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

如果还要用到这个“原来的栈顶元素”,能不能只改变SP而再次使用呢?
benbenfei123
[第1楼]   [ 回复时间:2013-07-15 12:53 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2013-07-14 15:44
可以试过了,debug 只要把元素的偏移量给sp,用mov指令实现,再用POP指令就行了
hky987654321
[第2楼]   [ 回复时间:2013-08-02 11:40 ]   [引用]   [回复]   [ top ] 
荣誉值: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
1461299415
[第3楼]   [ 回复时间:2014-11-16 14:18 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2014-11-08 19:06
为什么我用出栈后栈顶元素已经改变了呢,每次都这样,参见“定义64K栈时,想的一个问题”,各位大虾没有这样的问题吗
muxi
[第4楼]   [ 回复时间:2020-06-30 17:49 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2020-06-27 01:08
我的也是,pop前后,内存中的元素已经改变了
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved