15得票2回答
汇编中的 Push 和 Pop 如何工作?

我对汇编语言中的pop指令到底是干什么的感到困惑。它是将最后一个被PUSH进栈的值移出(这意味着如果我们在最后一个元素PUSH之后MOV一个值,pop就不适用于该值),还是只是弹出栈中最后一个值(因此,适用于MOV和PUSH),还是弹出由堆栈指针指向的任何值?请考虑以下代码:push $4 m...

13得票1回答
x86汇编:弹出一个值但不存储它

在x86汇编中,是否有可能在不将其存储的情况下从堆栈中移除一个值?例如pop word null之类的东西?我当然可以使用add esp,4,但也许有一个好看且干净的cisc助记符我错过了吗?

13得票2回答
“pushl/popl %esp”的汇编级表示是什么?

我正在尝试理解推送和弹出堆栈指针寄存器的行为。在AT&T格式中: pushl %esp 并且 popl %esp 请注意,它们将计算出的值存回到%esp中。 我独立考虑这些指令,而不是按顺序。我知道存储在%esp中的值始终是增量/减量之前的值,但我该如何用汇编语言表示这种...

12得票3回答
pop或者add esp, 4?有什么区别?

我看到这个问题,但在其中没有找到我的答案。 那么,为什么我更喜欢使用add esp, 4或add esp, 8而不是使用pop一次或两次?是否完全没有差别(性能、安全等),还是只是个人选择的问题?

12得票3回答
10得票1回答
ESP寄存器和SS寄存器有什么区别?

我只是一个汇编语言的初学者。 据我所知,ESP和SS都是指向堆栈寄存器,但我不太理解它们之间的区别。

10得票2回答
ARM汇编中,栈指针和帧指针有什么区别?

我想知道有人能否解释一下在ARM汇编中,堆栈指针(Stack Pointer)和帧指针(Frame Pointer)的区别。

10得票2回答
x64汇编中的堆栈对齐

在下面的计算中,如何计算从rsp中减去的值为28h(或十进制数40): 如何计算从rsp中减去28h(十进制40)的值? option casemap:none includelib kernel32.lib includelib user32.lib extern...

7得票1回答
GCC为什么会生成奇怪的移动栈指针方法

我观察到GCC的C++编译器生成了以下汇编代码: sub $0xffffffffffffff80,%rsp 这相当于 add $0x80,%rsp 例如,从堆栈中删除128字节。 为什么GCC生成第一个减法变体而不是加法变体?与利用下溢相比,加法变体对我来说似乎更自然...