鱼C论坛

 找回密码
 立即注册
查看: 1527|回复: 4

[已解决]出栈后值是否仍存在验证结果与书不符,是什么原因?

[复制链接]
发表于 2022-10-10 16:40:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 18217781932 于 2022-10-10 16:52 编辑

书中提到:出栈后,SS:SP指向新的栈顶,pop操作前的栈顶元素,1000CH处的2266H依然存在,但在实验出栈过程中,2266H经过pop已不在了。
是我理解的问题还是我用的dosbox有问题吗?请教,谢谢!
最佳答案
2022-10-10 16:54:21
本帖最后由 jackz007 于 2022-10-10 17:03 编辑

        对于堆栈而言只有从 SP 到堆栈栈顶部之间的数据是到受保护的,执行 POP 指令会把堆栈所指 SP 处的一个 WORD 从堆栈中弹出,同时 SP 的值增加 2,这一操作只是意味着被弹出的这 1 个 WORD 的存储空间已经位于 SP 之下,不再受到保护而已,如果再有 PUSH 操作,这 1 个 WORD 就会首当其冲被覆盖掉,并不意味着这 1 个 WORD 所占用的堆栈空间内原来的数值会立即被改变。
        我们知道,CPU 在运行过程中,除了 DOS 中断,还有很多的硬件中断,例如,时钟中断、键盘中断等等,这些中断一般都不可控,一旦发生,是必然会使用到堆栈的,所以,有的时候我们会发现,位于当前 SP 以下的区域的数据可能会无缘无故地变来变去,应该就是这个原因了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-10-10 16:48:52 | 显示全部楼层

                               
登录/注册后可看大图

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-10-10 16:54:21 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2022-10-10 17:03 编辑

        对于堆栈而言只有从 SP 到堆栈栈顶部之间的数据是到受保护的,执行 POP 指令会把堆栈所指 SP 处的一个 WORD 从堆栈中弹出,同时 SP 的值增加 2,这一操作只是意味着被弹出的这 1 个 WORD 的存储空间已经位于 SP 之下,不再受到保护而已,如果再有 PUSH 操作,这 1 个 WORD 就会首当其冲被覆盖掉,并不意味着这 1 个 WORD 所占用的堆栈空间内原来的数值会立即被改变。
        我们知道,CPU 在运行过程中,除了 DOS 中断,还有很多的硬件中断,例如,时钟中断、键盘中断等等,这些中断一般都不可控,一旦发生,是必然会使用到堆栈的,所以,有的时候我们会发现,位于当前 SP 以下的区域的数据可能会无缘无故地变来变去,应该就是这个原因了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-10 17:28:35 | 显示全部楼层
jackz007 发表于 2022-10-10 16:54
对于堆栈而言只有从 SP 到堆栈栈顶部之间的数据是到受保护的,执行 POP 指令会把堆栈所指 SP 处的 ...

谢谢,同时解决了我另一个疑惑,区域内的数据会变动的问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-28 13:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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