Boot Sector
这是第一次学习编写自己的os,在这里多亏自己动手写操作系统这本的书的学习,也是一个挺不错的入门书。在开始学习的时候,学习者首先应该要会简单的C和assembly基础,不然是学不下去,还有就是对基本的硬件要有所了解,如果有学过8086,那就更好,这起码在对这些的了解会更简单一些!在这一次的学习中我用了这几个学习软件,nasm和vc++6.0在这里nasm和我们平时用的masm功能上差不多,只是看个人习惯。下面看一下一个简单带有hello os的简单的boot sector
;%define _boot_debug_;可以进行nasm boot.asm -o boot.bin或者是
;nasm boot.asm -o boot.com
%ifdef _boot_debug_
org 0100h;调试状态生成.com文件,可以调试
%else
org 07c00h ;告诉编译器加载到7c00处
%endif
mov ax,cs;(我们开机的时候bios发现啊boot sector就会将512b加载到
mov ds,ax;内存的0000:7c00h处,然后跳转到这个地方将控制权彻底的交给这段引导代码)
mov es,ax;使es和ds都指向cs段
call DispStr;电泳显示字符串例程
jmp $ ;无限循环
DispStr:
mov ax,BootMessage
mov bp,ax;es:bp=串地址
mov cx,16
mov ax,01301h
mov bx,000ch
mov dl,0
int 10h;10号中断
ret
BootMessage: db "Hello,OS world!"
times 510-($-$$) db 0;填充剩下的空间,便生成
;的二进制代码恰好为512字节
dw 0xaa55;结束标志(期中$$这个代表一个节(section)的开始处被汇编后的地址,所以在这里他实际表示的是程序被编译后的开始地址,也就是0x7c00)
浙公网安备 33010602011771号