(asm x86) 是否有类似于 add 的指令,但涉及寄存器和堆栈顶部的第一个值?
(asm x86) Is there an instruction similar to add, but involving a register and the first value on top of the stack?
例如,我有一个注册值为 50 的 EAX。我在堆栈中有一组其他值 (40、30、20),我想添加到我的寄存器中。我正在寻找一条将 50 + 40 + 30 + 20 的结果放入 EAX 的指令,而不是将值弹出到另一个寄存器然后将它们添加到 EAX
你是说喜欢 add eax, [esp]
/ add eax, [esp+4]
/ add eax, [esp+8]
?
如果要在添加后弹出值,请执行 add esp, 12
。
使用普通指令和寻址模式随机访问堆栈在 x86 上很简单;你 没有 使用堆栈指令,如 push 和 pop。
(16 位模式不能使用 [sp]
作为基址寄存器,但幸运的是那些黑暗的日子早已过去。但即使那样你也可以相对于 [bp]
寻址堆栈内存,并且你通常知道 bp 和 sp 之间的距离。)
例如,我有一个注册值为 50 的 EAX。我在堆栈中有一组其他值 (40、30、20),我想添加到我的寄存器中。我正在寻找一条将 50 + 40 + 30 + 20 的结果放入 EAX 的指令,而不是将值弹出到另一个寄存器然后将它们添加到 EAX
你是说喜欢 add eax, [esp]
/ add eax, [esp+4]
/ add eax, [esp+8]
?
如果要在添加后弹出值,请执行 add esp, 12
。
使用普通指令和寻址模式随机访问堆栈在 x86 上很简单;你 没有 使用堆栈指令,如 push 和 pop。
(16 位模式不能使用 [sp]
作为基址寄存器,但幸运的是那些黑暗的日子早已过去。但即使那样你也可以相对于 [bp]
寻址堆栈内存,并且你通常知道 bp 和 sp 之间的距离。)