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

来源:互联网 发布:淘宝货到付款的女装 编辑:程序博客网 时间:2024/05/01 16:29

计算机电源打开时,会先进行加点自检(POST),然后寻找启动盘,如果选择是从软盘驱动,计算机就会检查软盘的0面0磁道1扇区,如果它以0xaa55结束,则bios则认为它是一个引导扇区。这一段代码总共为512字节。

一旦bios发现来引导扇区,就会将这512字节的内容装载到内存中0000:7c00去,然后跳转到这个位置将控制权彻底交给这段引导代码。

编写bios

文件名boot.asm

  <pre name="code" class="plain">org 07c00h;告诉编译器将程序加载到7c00h处mov ax,cs;cs=0的复制过去ax=0,ds=0,es=0mov ds,axmov es,axcall Disptr;调用显示字符串到寄存器jmp $;无限循环Disptr:mov ax,BootMessage;将BootMessage的地址传给axmov bp,ax;再传给bpmov 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  中断显示retBootMessage: db"Hello  OS world!"times 510-($-$$)db0 ;填充剩下的空间,使生成的二进制代码恰好为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






0 0
原创粉丝点击