【发布时间】:2013-03-18 20:18:09
【问题描述】:
堆栈:
0xDDDD
0xCCCC
0xBBBB
0xAAAA
pop ax 意思是:
- 0xAAAA 将被放置在 ax 中
- SS:SP 现在将指向 0xBBBB。
现在,我明白了。
0xDDDD
0xCCCC
0xBBBB
我想保存 ax 的值。
push ax.
0xDDDD
0xCCCC
0xBBBB
0xAAAA
我又来了。
mov ax, [ss:sp+2]
0xBBBB 将被加载到 ax 中。
我的函数完成后,我想从堆栈中删除 0xAAAA 和 0xBBBB。 首先,我会恢复斧头。
pop ax. (Now loaded with 0xAAAA)
如何从堆栈中删除 0xBBBB? 我是简单地“弹出”而不带参数(这存在吗?)还是添加 sp, 2 ?
谢谢。
【问题讨论】:
-
从 Intel 或 AMD 下载 CPU 手册。他们会告诉您是否存在无操作数
pop、add sp, 2会做什么以及问题的说明中是否还有其他错误。 -
mov ax, [ss:sp+2]不存在且不会组装。pop不带参数也不存在于 x86 程序集中并且不会组合,为此使用add sp,2。pop本身不会清除从堆栈中弹出的值,但通常它们会很快被下一个中断覆盖。