我已经在几个地方看过这个,但没有完全理解为什么。我理解为什么所有指令都必须与MIPS32中的4个字节对齐。
但后来我读到堆栈帧需要是8的倍数,因为堆栈指针需要双字对齐。为什么呢?
我理解附加图像中的所有内容,除了添加空格以将堆栈填充到8个字节的倍数的原因。
编辑:我读到这里的一个来源是here,第3页,第4章。另一个是计算机组织&设计,第5版,由Patterson和Hennessey,附录A.6,在程序调用示例下。但是,我很清楚,现在我错误地认为他们在谈论MIPS32。
答案 0 :(得分:4)
MIPS架构只能访问内存中与其大小均匀对齐的数据类型。
请参阅Dominic Sweetman的MIPS Run 在第320页上说:
在调用子例程时,sp必须是8字节对齐的,匹配最大基本类型的对齐 -
long long
整数或浮点双精度。 32位MIPS整数硬件不需要8字节对齐,但它对于兼容性是必不可少的......
因此,如果您从未尝试将double
推送到堆栈,那么在32位系统上可以很好地使用4字节对齐。但是,你的操作系统是否可以,是另一个问题。