Assembly 程序集堆栈指针

Assembly 程序集堆栈指针,assembly,x86,Assembly,X86,堆栈: pop ax是指: 0xAAAA将放置在ax中 SS:SP现在将指向0xBBBBBB 现在,我明白了 0xDDDD 0xCCCC 0xBBBB 0xAAAA 我想保存ax的价值 0xDDDD 0xCCCC 0xBBBB 我又来了 push ax. 0xDDDD 0xCCCC 0xBBBB 0xAAAA 0xBBBB将加载到ax中 函数完成后,我希望从堆栈中删除0xAAAA和0xBBBB。 首先,我将恢复ax mov ax, [ss:sp+2] 如何从堆栈中除去0xBBBB?

堆栈:

pop ax是指:

  • 0xAAAA将放置在ax中
  • SS:SP现在将指向0xBBBBBB
现在,我明白了

0xDDDD
0xCCCC
0xBBBB
0xAAAA
我想保存ax的价值

0xDDDD
0xCCCC
0xBBBB
我又来了

push ax.

0xDDDD
0xCCCC
0xBBBB
0xAAAA
0xBBBB将加载到ax中

函数完成后,我希望从堆栈中删除0xAAAA和0xBBBB。 首先,我将恢复ax

mov ax, [ss:sp+2]
如何从堆栈中除去0xBBBB? 我是简单地在没有参数的情况下“弹出”还是添加sp,2


谢谢。

只需将堆栈指针调整到堆栈中较早的位置,就像使用
添加sp,$2
一样。语法可能因使用的汇编程序而异<代码>$2的意思是“立即值2”

你可以下载


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

只需将堆栈指针调整到堆栈中较早的点,就像
add sp一样,$2
。语法可能因使用的汇编程序而异<代码>$2的意思是“立即值2”

你可以下载


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

从Intel或AMD下载CPU手册。它们将告诉您是否存在无操作数的
pop
add sp,2
将执行什么操作,以及问题中的指令中是否存在任何其他错误。
mov ax,[ss:sp+2]
不存在且不会汇编<没有参数的code>pop在x86汇编中也不存在,并且不会进行汇编,为此,请使用
add sp,2
pop
本身不会清除从堆栈中弹出的值,但通常它们会很快被下一次中断覆盖。从Intel或AMD下载CPU手册。它们将告诉您是否存在无操作数的
pop
add sp,2
将执行什么操作,以及问题中的指令中是否存在任何其他错误。
mov ax,[ss:sp+2]
不存在且不会汇编<没有参数的code>pop在x86汇编中也不存在,并且不会进行汇编,为此,请使用
add sp,2
pop
本身不会清除从堆栈中弹出的值,但通常下一次中断会很快覆盖这些值。
pop ax. (Now loaded with 0xAAAA)