x86ASM编写主引导扇区
编写主引导扇区程序
test.asm
1 | mov ax, 0x30 |
一个扇区有512个字节,前面一共是8个字节,后面有2个字节,中间就只需要填充502个字节了
对源程序进行编译:nasm -f bin test.asm -o test.bin
test.bin的二进制如下:
一个有效的主引导扇区程序,其最后的两个字节数据必须是0x55, 0xAA(规定的)

创建虚拟硬盘并向虚拟硬盘中写入主引导扇区程序
创建虚拟硬盘



查看刚刚创建的虚拟硬盘

把之前编译的bin文件写入到虚拟硬盘中


打开bochs,调好参数



调试主引导扇区程序
start后,左边是虚拟机调试窗口,右边是虚拟机的显示器

Next at t=0
[0x0000fffffff0] f000:fff0 (unk. ctxt): jmpf 0xf000:e05b ; ea5be000f0
t表示当前的内部时钟是0,下一条指令在此基础上执行然后依次是物理地址、逻辑地址、汇编指令、机器码
仔细看会发现,物理地址和逻辑地址是不一致的,这个原因以后再解释,只会出现在刚加电的时候
sreg查看段寄存器内容

r显示通用寄存器

s单步执行b设置断点c执行到断点

执行完后发现右边的显卡已经初始化了,下一步执行 mov ax, 0x0030是我们之前写的程序的第一条命令

继续往下发现都符合,主引扇区写入成功

All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.

