(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 之间的距离。)