x86推/弹小于4个字节?

时间:2013-04-06 19:20:40

标签: memory assembly x86 stack

您好我正在阅读弗吉尼亚大学的x86指南,并指出推送和弹出堆栈会删除或添加一个4字节的数据元素到堆栈。

为什么设置为4个字节?这可以改变,你可以通过推动较小的数据元素来节省堆栈中的内存吗?

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

1 个答案:

答案 0 :(得分:7)

简答:是,16或32位。而且,对于x86-64,64位。

堆栈的主要原因是从嵌套函数调用返回并保存/恢复寄存器值。它通常还用于传递参数和返回函数结果。除了最小的参数之外,这些项目通常具有与处理器设计相同的大小,即指令指针寄存器的大小。对于8088/8086,它是16位。对于80386和后继者,它是32位。因此,具有在其他尺寸上操作的堆栈指令几乎没有价值。

还要考虑内存总线上的数据大小。检索或存储单词需要相同的时间,因为它执行一个字节。 (8088除外,它有16位寄存器,但有8位数据总线。)对齐也起作用。堆栈应在字边界上对齐,以便可以将每个值检索为一个内存操作。通常需要权衡以节省内存。要传递一个字节作为参数,通常使用一个字。 (或者,根据编译器可用的优化,将使用一个字大小的寄存器,完全避免堆栈。)