鱼C论坛

 找回密码
 立即注册
查看: 2111|回复: 1

第四章实验3(3)的问题

[复制链接]
发表于 2014-1-20 22:31:42 | 显示全部楼层 |阅读模式
2鱼币
首先上代码 QQ截图20140120221803.png 然后是题目:用DEBUG跟踪t1.exe的执行过程,写出第一步执行后,相关寄存器的内容和栈顶内容。我自己做先运行了一下,在运行途中我没有使用别的命令了,一直是用T执行的。AX,BX途中一直是0,最后的结果也是0。但是当我看了答案以后,按照答案上面的运行了一下, QQ截图20140120222106.png 结果和之前的完全不一样了,答案上面是在运行POP AX之前查看了一下栈的内存情况,然后结果就不一样了。就算答案变了,可是我不明白运行POP AX以后AX的值为毛会成0C79,而不是2000?

最佳答案

查看完整内容

因为单步跟踪的时候每两步之间会有CS:IP入栈的过程,你仔细看看你的2000:0-2000:10是0B 00 0C 79正好是你之前的cs:ip。这个问题来源于debug的运作模式,在单步跟踪的时候由于cpu需要暂时保存原来正在执行的代码然后跳转去执行单步跟踪的程序,所以这是先要保存cs:ip。 类似的问题有王爽汇编语言第三章最后一个实验。 这两个问题都是单步跟踪的原理导致的,参考后续章节可得到你要的结果,要完全理解需要有标志寄存器的知识。 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-1-20 22:31:43 | 显示全部楼层
因为单步跟踪的时候每两步之间会有CS:IP入栈的过程,你仔细看看你的2000:0-2000:10是0B 00 0C 79正好是你之前的cs:ip。这个问题来源于debug的运作模式,在单步跟踪的时候由于cpu需要暂时保存原来正在执行的代码然后跳转去执行单步跟踪的程序,所以这是先要保存cs:ip。
类似的问题有王爽汇编语言第三章最后一个实验。
这两个问题都是单步跟踪的原理导致的,参考后续章节可得到你要的结果,要完全理解需要有标志寄存器的知识。简单来说就是,cs:ip入栈后其他堆栈内容的改变是中断处理程序执行过程中改变的,然后你又把这个入栈了……:sweat:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-1-20 23:47:21 | 显示全部楼层
..........
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-1-21 11:43:01 | 显示全部楼层

好吧,大致的明白你的意思了。现在说不清,继续往后听会明白的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-17 20:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表