ZHCADC4A September 2011 – March 2014
SP 为 8 字节对齐,并且必须始终保持 8 字节对齐,以防在帧分配或释放期间发生中断。这意味着对 SP 的每次原子调整都必须是 8 字节的倍数。
帧底部的双字(8 字节)跨越帧边界。也就是说,第一个字位于被调用者的帧中,但第二个字位于调用者的帧中,因此二者都不能使用它来存储双字。从使用双字加载和存储来保存和恢复寄存器的角度看,这让人遗憾,但这是以前不支持双字的架构的历史遗留问题。在下图中,双字边界用较粗的线表示。
在函数中的第一条指令之前,栈如下所示:
如果此函数需要栈上的一个字来存储某些内容,则需要分配 2 个字的帧(因为 SP 必须始终保持 8 字节对齐)。执行分配的方法是将 SP 递减 8。现在栈如下所示: