堆栈:
0xDDDD
0xCCCC
0xBBBB
0xAAAA
pop ax意味着:
现在,我明白了。
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?
谢谢。
答案 0 :(得分:1)
只需将堆栈指针调整到指向堆栈中的早期位置,就像使用add sp, $2
一样。语法可能因您使用的汇编程序而异。 $2
旨在表示“直接值2”。
您可以下载Intel 64 and IA-32 Architectures Software Developer’s Manuals。
(请注意,使用16位寄存器相当旧。根据您所编写的平台,可能需要将堆栈对齐维持为四个字节或更多的倍数,特别是在调用或从例程返回时。)