(进一步了解:http://www.cs.bham.ac.uk/~exr/lectures/opsys/10_11/lectures/os-dev.pdf)
1.ORG 07c00H
将引导程序定位到07c00H,因为BIOS会从此处加载引导程序。
2.512字节
引导扇区大小。
times 510-($-$$) db 0将引导程序大小填充到510字节,加上结尾的aa55,正好512。
3.0xaa55
引导程序终结标识,无此标识的不会被认为是引导程序。
4.BIOS中断
使用int 10H中断来向显示器写字符。
BIOS中断向量
I/O ADDR
|
INT TYPE(16进制)
|
FUNCTION
|
40 ~43
|
10
|
视频显示 I/O
|
44 ~ 47
|
11
|
设备检验
|
48 ~ 4B
|
12
|
测定存储器容量
|
4C ~ 4F
|
13
|
磁盘 I/O
|
50 ~ 53
|
14
|
|
54 ~ 57
|
15
|
系统描述表指针
|
58 ~ 5B
|
16
|
键盘 I/O
|
5C ~ 5F
|
17
|
打印机 I/O
|
60 ~ 63
|
18
|
ROM BASIC 入口代码
|
64 ~ 67
|
19
|
引导装入程序
|
68 ~ 6B
|
1A
|
日时钟
|
示例:在显示器上依次添加字符显示,最后显示出“Hello”。
org 07c00h mov ah,0x0e mov al,'H' int 10H mov al,'e' int 10H mov al,'l' int 10H mov al,'l' int 10H mov al,'o' int 10H times 510-($-$$) db 0 dw 0xaa55
5.其他
org 07c00h mov ax,cs mov ds,ax mov es,ax call DispStr jmp $ DispStr: mov ax,BootMessage mov bp,ax mov cx,8 mov ax,01301h mov bx,000ch mov dl,0 int 10h ret BootMessage: db "Hello,OS" times 510-($-$$) db 0 dw 0xaa55
说明:
mov ax, BootMessage
mov bp, ax ;这条指令与上一条指令合二为一,应该写成:lea bp,BootMessage
mov cx, 8 ;要显示的"Hello,os"字符数
mov ax, 01301h ;AH=13h,int 10h,即视频中断13h号功能:写字符串;AL=01H,表示写完字符串后,更新光标位置
mov bx, 000ch ;BH=0,页号(视频缓冲区是分页的);BL=0CH,字符显示属性,以黑底亮红显示字符
mov dl, 0 ;DH、DL=写串的光标位置,DH=行号,DL=列号