gpt4 book ai didi

memory - x86 push/pop 可以小于 4 个字节吗?

转载 作者:行者123 更新时间:2023-12-04 14:46:48 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Why is it not possible to push a byte onto a stack on Pentium IA-32?

(4 个回答)


5年前关闭。




嗨,我正在阅读弗吉尼亚大学的 x86 指南,它指出插入和弹出堆栈会删除或向堆栈添加 4 字节数据元素。

为什么将其设置为 4 个字节?这可以改变吗,你能通过推送更小的数据元素来节省堆栈上的内存吗?

如果有人想查看该指南,可以在此处找到:
http://www.cs.virginia.edu/~evans/cs216/guides/x86.html

最佳答案

简短回答:是的,16 位或 32 位。并且,对于 x86-64 , 64 位。

堆栈的主要原因是从嵌套函数调用中返回并保存/恢复寄存器值。它通常也用于传递参数和返回函数结果。除了最小的参数外,这些项通常由处理器的设计具有相同的大小,即指令指针寄存器的大小。对于 8088/8086,它是 16 位。对于 80386 和后续产品,它是 32 位。因此,在其他大小上运行堆栈指令几乎没有值(value)。

还有就是内存总线上数据大小的考虑。检索或存储一个字与存储一个字节所需的时间相同。 (除了具有 16 位寄存器但具有 8 位数据总线的 8088。)对齐也开始发挥作用。堆栈应在字边界上对齐,以便每个值都可以作为一个内存操作进行检索。权衡通常是为了节省时间而不是节省内存。要传递一个字节作为参数,通常使用一个字。 (或者,根据编译器可用的优化,将使用一个字大小的寄存器,完全避免堆栈。)

关于memory - x86 push/pop 可以小于 4 个字节吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15855021/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com