(进一步了解: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中断来向显示器写字符。
|
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=列号
原文:http://www.cnblogs.com/dev2007/p/3564971.html