boot.asm 程序代码:
org 0x7c00;加载本程序至内存0x7c00处,如果省略,那么标号后面必须手动加上0x7c00
mov bp,szBuffer;将标号地址赋值给bp
mov ah,0x0e;显示字符(ah值的选择可参考BIOS int 10h参数表)
mov cx,12;这里显示12个字符
mov bx,0h;初始化计数器bx为0
print_str:
mov bp,szBuffer;将字符串的地址赋值给bp
add bp,bx;将字符串首字符的地址加上已经显示过的字符数,就得到当前要显示的字符地址
mov al,[bp];将当前字符的地址中存储的字符赋值给al
add bx,1h;累加bx
int 10h;显示当前字符
loop print_str;循环显示,直到12个字符显示完毕
loop:
jmp loop;死循环挂起
szBuffer:
dw "hello,world!",0
times 510-($-$$) db 0;凑齐512个字符,不足添0
dw 0x55aa;可引导扇区必须以0x aa 55结尾
编译命令:
nasm boot.asm -f bin -o boot.img
用Virtual Box测试效果: