关于PUSH,POP指令
记得小甲鱼在一集视频中提到,pop指令只是将数据复制出去,那说明经过pop指令后数据不变。可是,在实验五第一题和第二题中,(图中以第二题为例)为什么经过pop指令后栈中数据会变化?难道是CPU背后又给栈中进行了push指令改变的吗?
8023az 发表于 2012-2-3 21:38 static/image/common/back.gif
请问POP指令数据弹出的意思是仅仅把数据拿出来吗?那原来在栈中的数据会根据内存的需求自己改变吗?是这个 ...
汇编语言 第61页,栈里面的数据是不会变的。
拿OD调试程序也可以证明不会变。
看来是和 debug 有关了,debug 在调试的时候影响了堆栈。
debug中的t命令
书上说是用了单步中断的原理
1.取得中断码
2.tf if入栈
3.cs ip入栈
4.响应中断
执行T命令时,tf if入栈,cs ip入栈,栈里面的数据会受到影响。
哦,这4步是在网上查的,debug的原理不太清楚。
我认为是这样的。 图中的0C0D:000C~000F,应该是56 04 23 01。可是却被覆盖了~ :L你不应该去看栈中(ss)的数据,pop出来数据应该在 DS:BX段中 跟以前 逆序存放的。。。
为什么经过pop指令后栈中数据会变化?
pop指令执行后栈顶指针变了,指向的数据变了,当然会变,不然后面的数据怎么办:L 小军 发表于 2012-2-3 00:08 static/image/common/back.gif
你不应该去看栈中(ss)的数据,pop出来数据应该在 DS:BX段中 跟以前 逆序存放的。。。
恩,这个我知道,我就是不明白自己没有改变栈中的数据,他为什么会变~ Seely 发表于 2012-2-3 00:31 static/image/common/back.gif
pop指令执行后栈顶指针变了,指向的数据变了,当然会变,不然后面的数据怎么办
我觉得可能你没有搞清楚我的问题,就是说经过POP指令后,是把栈中的数据复制出去,那应该栈中数据不变化,而这里变化了。请问这是为什么? 本帖最后由 Seely 于 2012-2-3 23:58 编辑
8023az 发表于 2012-2-3 14:28 http://bbs.fishc.com/static/image/common/back.gif
我觉得可能你没有搞清楚我的问题,就是说经过POP指令后,是把栈中的数据复制出去,那应该栈中数据不变化, ...
debug的问题 Seely 发表于 2012-2-3 17:40 static/image/common/back.gif
不知道是小甲鱼说的不清楚还是你理解错了,是把数据弹出而不是复制。
如果只是复制的话,就相当于没 ...
请问POP指令数据弹出的意思是仅仅把数据拿出来吗?那原来在栈中的数据会根据内存的需求自己改变吗?是这个意思吗? Seely 发表于 2012-2-4 00:03 static/image/common/back.gif
汇编语言 第61页,栈里面的数据是不会变的。
拿OD调试程序也可以证明不会变。
看来是和 debug 有关了, ...
也就是说,pop指令把数据复制出来,栈中数据开始没有变化,可是因为debug的t命令使得栈中数据发生了变化。懂了!多谢不厌其烦的教导! 当栈中的数据被pop出的时候SP也发生变化 懂吧也就是指针不在原来那地址了。
你把 SP该回来应该能看见以前的数据。。汇编视频里有讲的。前提是 以前的数据没被覆盖。。。 Seely 发表于 2012-2-2 22:40 static/image/common/back.gif
汇编语言 第61页,栈里面的数据是不会变的。
拿OD调试程序也可以证明不会变。
看来是和 debug 有关了, ...
2是标志寄存器入栈,TF=0,IF=0
目的是保存原来的标志寄存器,完成中断后恢复 指针变了,所以看到的数据变了。你只要查看pop钱栈指针位置的数据,肯定是不变的
感谢楼主谢谢你 学习了 感谢楼主谢谢你 学习了 来学习一下,
页:
[1]