第三章实验任务二刚开始还真有点儿晕。仔细分析了一下还是明白了。图3.19给出的汇编指令有七条,手动执行到完第三条后栈区确定了(就是2000:0—2000:f),然后我们用了一个-d命令来查看内存内容,其实在上文王爽老师已经说过了,debug的-d命令当然也是由CPU来执行的。这样的话,实际上CPU是中断了当前由IP自增指向的第四条指令,转而执行-d的指令代码段。这就要求保护被中断指令的“现场”,也就是相应寄存器入栈(据我分析,有CS,IP,BP,AX,BX,CX,DX入栈,但最先入栈的059DH却不知道是什么,有知道的留个言啊),然后-d命令的相关参数写入相应寄存器,-d执行完事之后一个ret,栈中数据弹回相应寄存器,ip仍然指向被中断的第四条指令。所以如果我们再次输入-t还是会接着执行原来所写的第四条汇编指令。这就是为什么2000:0—2000:f内存内容发生了改变。 |