Assembly 程序集堆栈指针
堆栈: pop ax是指: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?
- 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)