鱼C论坛

 找回密码
 立即注册
查看: 2424|回复: 6

第三章 寄存器访问 2.2习题

[复制链接]
发表于 2013-6-19 12:40:53 | 显示全部楼层 |阅读模式
3鱼币
为什么运行后debug中的2000:0~2000:F中的内容会发生改变?
请给个详细的过程 是怎么样发生改变的   

最佳答案

查看完整内容

SS:SP联合指向栈顶,而对它们的设置应该连续完成。如果在执行完设置SS的指令后,CPU响应中断,引发中断过程,要在栈中压入标志寄存器、CS和IP的值。而SS改变,SP并未改变,SS:SP指向的不是正确的栈顶,将引起错误。 mov ss, 2000后,栈段为2000。为了使程序能正常运行,设置栈顶指针的时候,不能被打断,以免栈顶指针还未设置好,而又产生了入栈或出栈指令,这样可能会破坏数据。 执行 mov sp, 10 时会产生中断。标志寄存器入 ...
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-6-19 12:40:54 | 显示全部楼层
SS:SP联合指向栈顶,而对它们的设置应该连续完成。如果在执行完设置SS的指令后,CPU响应中断,引发中断过程,要在栈中压入标志寄存器、CS和IP的值。而SS改变,SP并未改变,SS:SP指向的不是正确的栈顶,将引起错误。

mov ss, 2000后,栈段为2000。为了使程序能正常运行,设置栈顶指针的时候,不能被打断,以免栈顶指针还未设置好,而又产生了入栈或出栈指令,这样可能会破坏数据。
执行 mov sp, 10 时会产生中断。标志寄存器入栈,CS, IP依次入栈。所以 2000:0 ~ 2000:f中值发生改变
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-6-19 13:13:27 | 显示全部楼层
你的那个sp栈指针设置为10h了相当于十进制16 ,你push进去的数据都是ax格式就是占2个字节
所以就是e f一个位置 所以f就会改变
栈有一个特性就是push进的数据是从高地址向低地址扩展的!
不是回复过你了吗??
http://bbs.fishc.com/thread-33058-1-1.html
不懂欢迎追问!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-6-19 13:26:53 | 显示全部楼层

他的前面3个步骤执行后就已经改变了2000:0 f中的值是什么情况
mov ax 2000
mov ss ax
mov sp 10
三个步骤执行完了就已经改变了他的0 f的值   这是为什么     我不是指他push进去改变的值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-6-19 13:33:57 | 显示全部楼层
本帖最后由 comethat 于 2013-6-19 13:35 编辑
家里穷 发表于 2013-6-19 13:26
他的前面3个步骤执行后就已经改变了2000:0 f中的值是什么情况
mov ax 2000
mov ss ax

因为在debug使用T等指令引发了中断造成的,中断过程使用当前栈空间存放cpu关键数据,所以,你的栈里就有些不是你操作的数据了。  

这个问题后面会学到,不过这里也要有个印象,因为如果是在中断过程中压栈是栈越界的话,在windows下的命令窗口会强制关闭的。这个可能在你跟踪一些程序的时候会遇到,到时候有个思考方向。

书上解释的很清楚嘛!等你学到后面了!你就明白了!因为你用 -t命令 一步一步调试肯定会中断的!
ps:感觉现在很多书都是喜欢这样,给你留个问题!让你不知所措,直到你学到了一定的部分,或者等到某天,你突然觉悟了想通了!你就感觉得心应手,非常容易了!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-6-19 13:42:57 | 显示全部楼层
路过~~顶一下。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-6-21 21:01:17 | 显示全部楼层
同样路过帮忙顶一下~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-6 11:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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