自己动手写操作系统-编写引导扇区

2019-07-14 00:41发布

计算机电源打开时,会先进行加点自检(POST),然后寻找启动盘,如果选择是从软盘驱动,计算机就会检查软盘的0面0磁道1扇区,如果它以0xaa55结束,则bios则认为它是一个引导扇区。这一段代码总共为512字节。 一旦bios发现来引导扇区,就会将这512字节的内容装载到内存中0000:7c00去,然后跳转到这个位置将控制权彻底交给这段引导代码。 编写bios 文件名boot.asm
org 07c00h		;告诉编译器将程序加载到7c00h处	
	mov ax,cs		;cs=0的复制过去ax=0,ds=0,es=0
	mov ds,ax
	mov es,ax
	call Disptr		;调用显示字符串到寄存器
	jmp $			;无限循环
Disptr:
	mov ax,BootMessage	;将BootMessage的地址传给ax
	mov bp,ax		;再传给bp
	mov cx,16		;因为要用到int10h中断,要先给各种寄存器赋值,cx表示显示字符串的长度
	mov ax,01301h		;AH=13在teletype模式下显示字符串,al=01h表示只显示字符串
	mov bx,000ch		;bh表示页号,bl=0ch表示显示属性高亮
	mov dl,0		;dh、dl表示显示的行、列
	int 10h			;bios  中断显示
	ret
BootMessage: 		db	"Hello  OS world!"
times 510-($-$$)	db	0 ;填充剩下的空间,使生成的二进制代码恰好为512字节,$表示当前行,$$表示一个节的开始地址
dw 	0xaa55			  ;结束标志,bios识别引导扇区的标志




编译命令: nasm编译文件
nasm boot.asm -o boot.bin bximage 创建一个软盘 dd=if=boot.bin of=a.img bs=512 count=1 conv=notrunc
启动qemu虚拟机 bochs -f bochsrc