The*_*Neo 6 memory x86 assembly stack
嗨我正在阅读弗吉尼亚大学的x86指南,并指出推送和弹出堆栈要么删除或添加一个4字节的数据元素到堆栈.
为什么设置为4个字节?这可以改变,你可以通过推动较小的数据元素来节省堆栈中的内存吗?
如果有人希望查看该指南,可以在此处找到该指南:http: //www.cs.virginia.edu/~evans/cs216/guides/x86.html
简答:是,16或32位.并且,对于x86-64,64位.
堆栈的主要原因是从嵌套函数调用返回并保存/恢复寄存器值.它通常还用于传递参数和返回函数结果.除了最小的参数之外,这些项目通常具有与处理器设计相同的大小,即指令指针寄存器的大小.对于8088/8086,它是16位.对于80386和后继者,它是32位.因此,具有在其他尺寸上操作的堆栈指令几乎没有价值.
还要考虑存储器总线上的数据大小.检索或存储单词需要相同的时间,因为它执行一个字节.(8088除外,它有16位寄存器,但有8位数据总线.)对齐也起作用.堆栈应在字边界上对齐,以便可以将每个值检索为一个内存操作.通常需要权衡以节省内存.要传递一个字节作为参数,通常使用一个字.(或者,根据编译器可用的优化,将使用一个字大小的寄存器,完全避免堆栈.)
| 归档时间: |
|
| 查看次数: |
9672 次 |
| 最近记录: |