随风听雨雪 发表于 2013-10-2 17:22:41

pop之后原来栈中的内容为什么会改变?


在实验2中pop ax之后为什么2200:00fc中的内容也给改变了?
mov ax,ffff
mov ds,ax
mov ax,2200
mov ss,ax
mov sp,0100

mov ax,    ;ax= 5BEAH
add ax,    ;ax= 5CCAH
mov bx,    ;bx= 31F0H
add bx,    ;bx= 6122H

push ax       ;sp= 00FEH ,修改的内存单元地址是 2200:00FE 内容为 5CCAH
push bx       ;sp= 00FCH ,修改的内存单元地址是 2200:00FC 内容为 6122H
pop ax      ;sp= 00FCH ,ax= 6122H                              执行完这一条指令后,2200:00fc的内容为什么改变?
pop bx      ;sp= 00FEH ,bx= 5CCAH

push       ;sp= 00FEH ,修改的内存单元地址是 2200:00FE 内容为 31F0
push       ;sp= 00FCH ,修改的内存单元地址是 2200:00FC 内容为 2F32

tsembrace 发表于 2013-10-2 17:22:42

pop之后原先栈顶被系统回收,可能被系统用做他用,因此,其中数据变化是可以理解的。具体系统如何改变的,不知。个人理解。

vitamin 发表于 2013-10-2 20:33:09

我实验了几次,没有出现楼主的情况,求高手解答吧。

胡八一 发表于 2013-10-3 03:21:42

你刚开始把AX先放进去,应该是最后出来的。结果你让AX先出来,只能把BX的值放入AX中了。
先进后出,后进先出。按照你的疑问为什么会改变?
我想这样就不会改变了吧。
pushax
push bx
pop bx
pop ax

随风听雨雪 发表于 2013-10-3 10:05:21

胡八一 发表于 2013-10-3 03:21 static/image/common/back.gif
你刚开始把AX先放进去,应该是最后出来的。结果你让AX先出来,只能把BX的值放入AX中了。
先进后出,后进先 ...

我是问:pop之后,原先栈顶的数据为什么改变

随风听雨雪 发表于 2013-10-3 10:07:32

随风听雨雪 发表于 2013-10-3 10:05 static/image/common/back.gif
我是问:pop之后,原先栈顶的数据为什么改变

栈顶为2200::00fc,数值为6020,pop之后2200:00fc的值为什么变为0E08了?

hekang01 发表于 2013-10-4 09:38:15

为什么win8用不了{:5_104:}

无名侠 发表于 2013-10-5 17:43:26

搞晕乐乐乐乐
页: [1]
查看完整版本: pop之后原来栈中的内容为什么会改变?