制作磁盘镜像工具
用的是它自己写的工具,叫edimg。使用方式如下
edimg imgin:../z_tools/fdimg0at.tek wbinimg src:ipl.bin len:512 from:0 to:0 imgout:helloos.img
读取fdimg0at.tek,在读取ipl.bin,从ipl.bin的开头读512个字节到fdimg0at.tek中,并另存为helloos.img。
ipl.bin就是编译出来的二进制代码。可以用作者提供的启动程序,也可以用day1自己写的。作者提供的程序多了一些内容。是一些参数。
错误
错误1:自己写的程序在edimg不通过
问题描述
不知道为什么,我用自己在day1写的程序编译,编译没有问题,但是edimg报错:
解决
我想edimg对这个有严格规定。就是必须在某个规定的位置有一些信息。把那些信息加上,edimg就让过了。
ORG 0x7c00 ;伪指令,告诉编译器第一条指令的地址是0x7c00,cpu并不执行
JMP entry
DB 0x90
DB "HELLOIPL" ; �u�[�g�Z�N�^�̖��O�����R�ɏ����Ă悢�i8�o�C�g�j
DW 512 ; 1�Z�N�^�̑傫���i512�ɂ��Ȃ�������Ȃ��j
DB 1 ; �N���X�^�̑傫���i1�Z�N�^�ɂ��Ȃ�������Ȃ��j
DW 1 ; FAT���ǂ�����n�܂邩�i���ʂ�1�Z�N�^�ڂ���ɂ���j
DB 2 ; FAT�̌��i2�ɂ��Ȃ�������Ȃ��j
DW 224 ; ���[�g�f�B���N�g���̈�̑傫���i���ʂ�224�G���g���ɂ���j
DW 2880 ; ���̃h���C�u�̑傫���i2880�Z�N�^�ɂ��Ȃ�������Ȃ��j
DB 0xf0 ; ���f�B�A�̃^�C�v�i0xf0�ɂ��Ȃ�������Ȃ��j
DW 9 ; FAT�̈�̒����i9�Z�N�^�ɂ��Ȃ�������Ȃ��j
DW 18 ; 1�g���b�N�ɂ����‚̃Z�N�^�����邩�i18�ɂ��Ȃ�������Ȃ��j
DW 2 ; �w�b�h�̐��i2�ɂ��Ȃ�������Ȃ��j
DD 0 ; �p�[�e�B�V�������g���ĂȂ��̂ł����͕K��0
DD 2880 ; ���̃h���C�u�傫����������x����
DB 0,0,0x29 ; �悭�킩��Ȃ����ǂ��̒l�ɂ��Ă����Ƃ����炵��
DD 0xffffffff ; ���Ԃ�{�����[���V���A���ԍ�
DB "HELLO-OS " ; �f�B�X�N�̖��O�i11�o�C�g�j
DB "FAT12 " ; �t�H�[�}�b�g�̖��O�i8�o�C�g�j
RESB 18 ; �Ƃ肠����18�o�C�g�����Ă���
entry:
MOV SI,data
putloop:
;为显卡中断做参数准备
MOV AL,[SI] ;AL 要打印的字符
CMP AL,0
JE end
MOV AH,0x0e ;操作码,0x0e是打印字符
MOV BL,15 ;颜色码
MOV BH,0 ;规定填0
INT 0x10 ;显卡中断,填充好AL,AH,BL,BH,进行显卡中断将显示一个字符
ADD SI,1
JMP putloop
end:
HLT
JMP end
data:
DB 0x0a ;换行
DB "hello_world!"
DB 0x0a ;换行
DB 0 ;结束符
fill:
RESB 0x7dfe-$
DB 0x55,0xaa
错误2:用作者的程序,运行出问题
问题描述
如果用作者的那个程序,运行前一切顺利,但是运行结果是这样的。
解决
是因为把镜像复制到qemu目录时,目标文件名错了。
正确的应该是:fdimage0.bin
原本qemu中就有这个文件,如果没有发生替换,就是错的。