代码:
; boot.asm
.model tiny
.code
org 7c00h
start:
mov ah, 13h
mov al, 01h
mov bh, 00h
mov bl, 04h
mov cx, hear-msg
mov dh, 00h
mov dl, 00h
mov bp, offset msg
int 10h
jmp $
msg db 'hello, bootsector'
hear label byte
org start+510
signature:
dw 0aa55h
end start
汇编命令:
jwasm -bin -Fo boot.img boot.asm
jwasm 是一个masm兼容汇编器,用-bin选项可以直接产生 raw binary 格式文件,-Fo选项指定输出文件名
汇编生成的二进制文件大小为512字节,最后两个字节是签名,规定为0aa55h
二进制文件布局:
.model tiny 指定内存模型为tiny,意思是只有一个段,也就是cs,ds,es的值相同,所以程序里没有显示设置es寄存器
显示字符串是调用了bios的10h号中断的13h号子程序,具体可参考杨季文老师的教程第184页
用virtualbox新建一个虚拟电脑,如下图:
设置好虚拟软盘后,点启动,ok,在屏幕上就可以看到 hello,bootsector 啦
参考资料:
杨季文老师的《80x86汇编语言程序设计教程》
于渊同学的《自己动手写操作系统》第二版
masm官方文档
http://msdn.microsoft.com/en-US/library/afzk3475(v=vs.80)
http://webster.cs.ucr.edu/Page_TechDocs/MASMDoc/
jwasm官方网站