30天自制操作系统 day2 32位处理器的几个寄存器 换种方式制作磁盘镜像 makefile

32位处理器的几个寄存器

30天自制操作系统 day2 32位处理器的几个寄存器 换种方式制作磁盘镜像 makefile_第1张图片
30天自制操作系统 day2 32位处理器的几个寄存器 换种方式制作磁盘镜像 makefile_第2张图片

制作磁盘镜像工具

用的是它自己写的工具,叫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:用作者的程序,运行出问题

问题描述

如果用作者的那个程序,运行前一切顺利,但是运行结果是这样的。
30天自制操作系统 day2 32位处理器的几个寄存器 换种方式制作磁盘镜像 makefile_第3张图片

解决

是因为把镜像复制到qemu目录时,目标文件名错了。
在这里插入图片描述
正确的应该是:fdimage0.bin
原本qemu中就有这个文件,如果没有发生替换,就是错的。

你可能感兴趣的:(30天自制操作系统,操作系统)