. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->寄存器(内存访问)
主题 : :  能否单独改变SP使之前的栈顶元素不被覆盖?  [待解决] 回复[ 6次 ]   点击[ 527次 ]  
cutebe
[帖 主] [ 发表时间:2013-05-27 14:23 ] 
荣誉值:4
信誉值:0
注册日期:2010-01-27 19:28
P61
“出栈后,原来的栈顶元素依然存在,只有在PUSH等入栈指令后才会被覆盖”

如果还要用到这个“原来的栈顶元素”,能不能只改变SP而再次使用呢?
hky987654321
[第2楼] [ 回复时间:2013-08-02 11:40 ] 
荣誉值:26
信誉值:0
注册日期:2013-07-15 09:25
我在64位w7下用dosbox0.74试过。按书上的设置,在debug中跟踪调试了一遍,与书上所述有出入。结果显示:出栈后,原入栈元素没有如书所说“2266H依然存在”于原来的地址中,而是已经“从内存中消失”。出入栈结果与内存显示完全一致,结果见下面的1——3。接着将sp改为原入栈元素所在地址000eh,执行pop cx,结果cx=0102,内存显示见4-5。不知是不是系统环境不同,没感到书中的“覆盖”问题。
1、执行至入栈前,用d ss:0 f查看栈为:00 00 00 00 00 00 00 00-0C 01 0B 01 83 04 92 01 
2、执行入栈后,  用d ss:0 f查看栈为:00 00 00 00 00 00 00 00-0C 01 83 04 92 01 66 22 
3、执行出栈后,  用d ss:0 f查看栈为:00 00 00 00 00 00 00 00-0C 01 0D 01 83 04 92 01

4、再执行出栈前,用d ss:0 f查看栈为:00 00 00 00 00 00 00 00-10 01 83 04 92 01 02 01
5、执行出栈后,  用d ss:0 f查看栈为:00 00 00 00 00 00 00 00-10 01 11 01 83 04 92 01
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved