为什么MIPS堆栈指针需要保持双字对齐?

时间:2016-09-30 08:26:41

标签: assembly stack mips mips32

我已经在几个地方看过这个,但没有完全理解为什么。我理解为什么所有指令都必须与MIPS32中的4个字节对齐。

但后来我读到堆栈帧需要是8的倍数,因为堆栈指针需要双字对齐。为什么呢?

我理解附加图像中的所有内容,除了添加空格以将堆栈填充到8个字节的倍数的原因。

Stack Frame

编辑:我读到这里的一个来源是here,第3页,第4章。另一个是计算机组织&设计,第5版,由Patterson和Hennessey,附录A.6,在程序调用示例下。但是,我很清楚,现在我错误地认为他们在谈论MIPS32。

1 个答案:

答案 0 :(得分:4)

MIPS架构只能访问内存中与其大小均匀对齐的数据类型。

请参阅Dominic Sweetman的MIPS Run 在第320页上说:

  

在调用子例程时,sp必须是8字节对齐的,匹配最大基本类型的对齐 - long long整数或浮点双精度。 32位MIPS整数硬件不需要8字节对齐,但它对于兼容性是必不可少的......

因此,如果您从未尝试将double推送到堆栈,那么在32位系统上可以很好地使用4字节对齐。但是,你的操作系统是否可以,是另一个问题。