私はいくつかの場所でこれを読んだが、理由を完全に理解していない。私はすべての命令がMIPS32の4バイトにワードアライメントされなければならない理由を理解しています。MIPSのスタックポインタをダブルワードで整列させる必要があるのはなぜですか?
しかし、私はを読みました。スタックポインタはダブルワードアライメントでなければならないので、スタックフレームは8の倍数でなければなりません。どうして?
スタックを8バイトの倍数に埋め込む理由を除いて、添付画像のすべてを理解しています。
編集:私は、これはhere、3ページ、他の4箇条書きました読みところの1つの供給源は、下、パターソンとヘネシー、付録A.6によってコンピュータの構成&デザイン、第5版、でしたプロシージャ呼び出しの例。しかし、MIPS32について話していたと誤解されていた今、私には明らかです。
MSDN:_ "MIPS ISA IおよびIIは、32ビットモードで動作し、スタックポインタとフレームポインタのアドレスが4バイトの境界に揃うことを要求します。MIPS ISA III以降は64ビットモードで動作し、スタックポインタとフレームポインタのアドレスが8バイトの境界に揃うようにする必要があります。 "そうでなければ、' sd'を使って64ビットの値をスタックにプッシュしようとすると、アライメントエラーが発生します。 – Michael
マイケルに感謝します。これは単に、64ビットのスタックポインタアドレスまたはリターンアドレスを潜在的に収容するための予防措置を意味していますか?私たちが32ビットモードで動作していても? –
32ビットMIPSには8バイトのスタックアライメントが必要ですか?マイケルは、8B要件が64ビットモードでのみ適用されると言っているようです。しかし、8Bアライメントは、32ビットモードでスタック上に 'double '精度の浮動小数点を格納するのを容易にするので、いくつかのABIは8Bスタックアライメントを必要とするかもしれません。とにかく、これを読んだ場所へのリンクを追加してください。 –