汇编堆栈指针

时间:2013-03-18 20:18:09

标签: assembly x86

堆栈:

0xDDDD
0xCCCC
0xBBBB
0xAAAA

pop ax意味着:

  • 0xAAAA将被置于ax
  • SS:SP现在指向0xBBBB。

现在,我明白了。

0xDDDD
0xCCCC
0xBBBB

我想保存斧头的价值。

push ax.

0xDDDD
0xCCCC
0xBBBB
0xAAAA

我再来一次。

mov ax, [ss:sp+2]

0xBBBB将加载到ax。

我的功能完成后,我想从堆栈中删除0xAAAA和0xBBBB。 首先,我将恢复斧头。

pop ax. (Now loaded with 0xAAAA)

如何摆脱堆栈中的0xBBBB? 我只是简单地“弹出”没有参数(这是否存在?)或者我是否添加sp,2?

谢谢。

1 个答案:

答案 0 :(得分:1)

只需将堆栈指针调整到指向堆栈中的早期位置,就像使用add sp, $2一样。语法可能因您使用的汇编程序而异。 $2旨在表示“直接值2”。

您可以下载Intel 64 and IA-32 Architectures Software Developer’s Manuals

(请注意,使用16位寄存器相当旧。根据您所编写的平台,可能需要将堆栈对齐维持为四个字节或更多的倍数,特别是在调用或从例程返回时。)