久一网络科技

久一网络科技是您快速建站的首选,我们提供快速高效的服务:快速建站,服务器运维,整站建设,网络编程,网络安全等。持久的品质保证,始终如一的服务理念,久一网络科技-----您身边的网络专家。 如有需求,请联系:tech@jooyee.net

其实写一个操作系统并不是多么遥远的事情,10分钟就可以搞定一个微型的操作系统:

org 07c00h
mov ax,cs
mov dx,ax
mov es,ax
call DispStr
jmp $
DispStr:
mov ax,BootMessage
mov bp,ax
mov cx,16
mov ax,01301h
mov bx,000ch
mov dl,0
int 10h
ret
BootMessage: db "Hello, OS world!"
times 510-($-$$) db 0
dw 0xaa55

把上段程序保存为FirstOS.asm,用NASM汇编一下,输入命令nasm FirstOS.asm -o FirstOS.bin,会产生一个FirstOS.bin文件,用绝对扇区读写工具把这个文件写进软盘的第0面0道的第一个扇区。重启电脑,选择从软驱启动,几秒钟后就可以在电脑屏幕上显示出一行字符:Hello, OS world!

考虑到现在装有软驱的电脑比熊猫还少见,而且频繁的重启对电脑来说也是一种摧残,我们可以在现有系统上装一个虚拟机,虚拟出一个硬件平台,也可以达到同样的效果。

准确的说上面的程序还不能算是一个操作系统,而只是一个引导扇区,但是它跟我们以前编的程序已经有了本质的不同:它不依赖于任何软件,直接作用于硬件,直接控制硬件。下面将对以上程序进行解释,虽然我对它也只是一知半解,我会尽可能的把它表达清楚。

在开始解释代码之前先介绍一下引导扇区的知识。当计算机电源打开后,计算机会加电自检,然后选择启动盘,如果选择的是从软驱启动,然后检查软驱的第0面0道的第一个扇区,如果这个扇区是以0xaa55结束,那么计算机的BIOS会把它当作一个引导扇区,然后把这个扇区的内容加载到内存的7c00h处,然后跳转到7c00处将控制权转交给这段引导代码。因此程序开始的第一行就是org 7c00h,告诉编译器,我段程序将会被加载到内存的7c00h处,程序的最后一行是dw 0xaa55,使这段程序以0xaa55结束,以便BIOS可以认出它是引导扇区。

第五行call DispStr调用显示字符串的子程序,第七行jump $使程序进入死循环。在NASM中,$代表本行程序汇编后的地址,$$代表本节程序开始的地址,倒数第二行times 510-($-$$)就是为了填充程序使它刚好为512B。$-$$表示当前行距本节开始处的距离,在本程序中就是本行距程序开始处的距离,times是重复指令,重复510-($-$$)次。

mov ax,BootMessage和mov bp,ax 两条指令把字符串的首地址传给bp,mov cx 16把串长度传给cx。

mov ax,01301h
mov bx,000ch
mov dl,0
这三条指令应该是为下面的int 10h做准备,具体为什么这么写我还不太清楚,我们可以先把它放在一边,等以后慢慢了解。

0 评论 ---->點閱數:

发表评论

关注者

热门帖子

网页浏览总次数