1

堆:

0xDDDD
0xCCCC
0xBBBB
0xAAAA

流行斧的意思:

  • 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 ?

谢谢你。

4

1 回答 1

1

只需将堆栈指针调整为指向堆栈中较早的位置,如add sp, $2. 语法可能因您使用的汇编程序而异。$2旨在表示“立即值 2”。

您可以下载Intel 64 和 IA-32 架构软件开发人员手册

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

于 2013-03-18T20:26:44.823 回答