org 07c00h 寻找启动盘时,如果选择软盘启动,计算机就会检查软盘的0面0磁道1扇区,如果发现它以0xaa55结束,则bios认为它是一个引导扇区。 BIOS将这512装载到内存地址0000:7c00处,然后跳转到该处,并将控制权交给这段代码。
mov ax, cs
mov ds, 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
1. nasm的知识要点
1)不被[]扩起来的标签或变量名都被认为是地址;[]扩起来的才是内容
2)$表示当前行被汇编后的地址; $$表示一个节(section)的开始处被汇编后的地址
使用ndisasm -o 0x7c00 boot.bin >> disboot.asm,可以看到jmp $被翻译为:
00007C09 EBFE jmp short 0x7c09
2. 32位cpu所含有的寄存器
4个数据寄存器(EAX、EBX、ECX和EDX)
2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP)
6个段寄存器(ES、CS、SS、DS、FS和GS)
1个指令指针寄存器(EIP) 1个标志寄存器(EFlags)