assembly - ASM - 推/弹出

标签 assembly x86

为什么当您将一个值压入堆栈时,ESP 寄存器会减少(而不是增加),而当您弹出一个值时,ESP 寄存器会增加(而不是减少)?在这一点上,这对我来说是违反直觉的。

最佳答案

那是因为堆栈是从上到下“增长”的,与自下而上分配的堆相反。

在地址空间有限的架构上,这是一个设计决定,您可以更灵活地使用它们 - 只是两个分配的内存区域的总和不能超过特定限制。

如今,堆栈和堆地址空间无论如何都保存在不同的内存区域中,但他们决定保留向后增长的堆栈。

关于assembly - ASM - 推/弹出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9478625/

相关文章:

assembly - AT&T GAS 汇编中的数组寻址。 RIP 的寄存器偏移不起作用

c - 如何使用 .asm 文件中已在 .h 文件中声明和初始化的表

assembly - Intel VEX 前缀,L 位值的行为与文档不符

Gcc内联汇编: what's wrong with the dynamic allocated register `r` in input operand?

ubuntu - 如何制作 "Hello world"内核

assembly - 在 "real world"情况下编码的良好做法是什么?

linux - 为什么在访问设置了 16 个最高有效位中的任何一个的内存时段错误地址为 NULL?

iphone - 使用 NEON 优化 RGBA8888 到 RGB565 的转换

assembly - 所有实现AMD64指令集的CPU都具有相同的指令和寄存器吗?

linux - 如何通过查看堆栈值生成回溯?