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.