前文见此;
https://blog.csdn.net/bcbobo21cn/article/details/105314444
修改run.bat为:"C:\Program Files (x86)\Bochs-2.6.8\bochsdbg" -q -f bochsrc.bxrc;
然后run.bat,进入调试;
在<bochs:1>停住,此时仿真屏幕是空的,什么也没显示;
此时应该是硬盘主引导记录装入内存,还未开始运行;一句指令也没执行; 主引导记录会存入内存地址0x7C00;
输入 vbreak 0x0000:0x7c00,打 c 继续执行;运行到0000:7c00,这里是一条cli指令;CLI指令,禁止中断发生;
同时仿真屏幕输出如下;
打 step 执行下一条指令看一下;这是一条jmp指令,屏幕没有变化;
再step,下一条指令是 mov ax, 0x07c0;
0x07c0可能是等于0000:7c00,我还不是很清楚;我觉得应该是; 屏幕没有变化;
再往后单步,屏幕没有变化;
根据资料; 如下两句是设置数据段基地址;我还不清楚设置数据段基地址为0x07c0的意义;
mov ax,0x07c0
mov ds,ax
再往后单步,一直到如下图最后一条指令,屏幕没有变化;
既然有CLI指令,往后将能找到STI指令; STI,允许中断发生;到这里还没看到STI指令;
一些资料bochs调试的情况,0000:7c00处是如下的一条mov指令;跟这里前面不一样;我想可能是早一些的主引导记录情况,它没有关中断,直接mov ax, 0x7c0;前面的是先关了中断,再 mov ax, 0x7c0
(0) [0x00007c00] 0000:7c00 (unk. ctxt): mov ax, 0x7c0 ; b8c007
mov ax, 0x7c0 和 mov ax, 0x07c0,应该是一样的;
网上有个资料;主引导记录反汇编以后的内容如下;
MBR(Main Boot Record)主引导记录区位于硬盘0磁道0柱面1扇区。
BEGIN:
0000:7C00 FA CLI 关中断
0000:7C01 33C0 XOR AX,AX 设置堆栈段地址为0000
0000:7C03 8ED0 MOV SS,AX
0000:7C05 BC007C MOV SP,7C00 设置堆栈指针为7C00
0000:7C08 8BF4 MOV SI,SP si=7c00
0000:7C0A 50 PUSH AX
0000:7C0B 07 POP ES ES=0000
0000:7C0C 50 PUSH AX
0000:7C0D 1F POP DS DS=0000
0000:7C0E FB STI 开中断
0000:7C0F FC CLD 清除方向
……….
也是先关了中断,这点和前面是一样的;