我在几个地方读到过这个问题,但是没有完全理解为什么。我知道MIPS32中所有指令都必须对齐到4字节,这点我能理解。
但是我还读到栈帧需要是8的倍数,因为栈指针需要双字对齐。为什么呢?
我理解图片中的所有内容,除了向栈添加空间以填充到8字节的倍数的原因。
编辑:我看到这个信息的来源之一是这里,第3页,第4个要点。另一个来源是《计算机组成与设计》第5版,作者是Patterson和Hennessey,在附录A.6的“过程调用示例”下。不过,现在我很清楚地意识到,我错误地认为它们谈论的是MIPS32。
sd
将64位值推入堆栈,将会导致对齐错误。 - Michael