操作系统一个简单的汇编入门程序如下,代码中注释得已很详细
;程序被加载到的内存地址,即寄存器IP的值
org 07c00h
;以下3句是设置ds、es段寄存器的值
mov ax,cs
mov ds,ax
mov es,ax
;将字符串的首地址赋给ax
mov ax,BootMsg
;将字符串第19个字符改写
mov byte [BootMsg+18],0x07
;bp是传给中断的参数es:bp指向的是字符串
mov bp,ax
;字符串中字符的个数
mov cx,21
;表示的是写字符串,并移动光标到结尾处
mov ax,01301h
;字符显示属性红色,0页
mov bx,000ch
mov dl,0
int 10h
jmp $
BootMsg: db "Loading system ...."
db 13,10
;$表示程序的当前地址,$$表示程序所在节的地址,在这里只有一个节
times 510-($-$$) db 0
;软盘第一扇区结束标志
dw 0xaa55
程序在Virtual Box下运行的截图如下:
在Virtual PC下运行的截图如下:
特别注解:
1:org 07c00h,用Bochs调试运行后会发现,ip=0x7c00h,cs=0x0000,所以从这里可以得出的是四个段寄存器均是0
2:mov byte [BootMsg+18],0x07,这是为什么会发出滴答声的原因,查看ASCII码可以发现的是这里的0x07对应的实际上就是一个声响的ASCII码。
3:中断int 10h的0x13功能,其中ah用来表示功能号,其参数如下:
功能号:13H
功能:在Teletype模式下显示字符串
入口参数:AH=13H
BH=页码
BL=属性(若AL=00H或01H)
CX=显示字符串长度
(DH、DL)=坐标(行、列)
ES:BP=显示字符串的地址 AL= 显示输出方式
0—字符串中只含显示字符,其显示属性在BL中。显示后,光标位置不变
1—字符串中只含显示字符,其显示属性在BL中。显示后,光标位置改变
2—字符串中含显示字符和显示属性。显示后,光标位置不变
3—字符串中含显示字符和显示属性。显示后,光标位置改变
工具软件(nasm,bochs,程序源码)
具体下载目录在 /2013年资料/6月/9日/一个简单的汇编入门程序