boot.asm
org 07c00h ; 告诉编译器程序加载到7c00处
call DispStr ; 调用显示字符串例程
hlt: hlt
jmp hlt ; 无限循环
DispStr:
mov ax, BootMessage
mov bp, ax ; ES:BP = 串地址
mov cx, 18 ; CX = 串长度
mov ax, 1301h ; AH = 13, AL = 01h
mov bx, 000ch ; 页号为0(BH = 0) 黑底红字(BL = 0Ch,高亮)
mov dl, 0
int 10h ; 10h 号中断
ret
BootMessage: db "Hello, OS world!88"
times 510-($-$$) db 0 ; 填充剩下的空间,使生成的二进制代码恰好为512字节
db 55h,0aah ; 结束标志
./nasm boot.asm -o boot //编译
dd if=boot of=a.img count=1 //制作一个软盘镜像,用virtualbox启动,可以看到启动成功,有"Hello, OS world!88"的打印
dd if=boot of=NewVirtualDisk1.hdd count=1 //制作一个硬盘镜像,用virtualbox启动,可以看到启动成功,有"Hello, OS world!88"的打印
若存于硬盘第一个扇区,则这段代码称为:硬盘主引导记录;若存于硬盘某个分区的第一个扇区,则称为:分区引导记录;若存于软盘的第一个扇区,则称为:软盘引导记录。磁盘引导记录的重要标志是是最后的55h和0aah
备注:nasm,dd 有linux版的,也有windows版的