2012-05-14 7 views
7

何かが0x1001 0000に格納されている場合、次のものは0x1001 0004に格納されます。もし私が正しいとすれば、32ビットアーキテクチャのメモリはそれぞれ32ビットです。したがって、0x1001 0002は32ビットの後半を指していますか?メモリアドレスがMIPSで4ずつインクリメントされるのはなぜですか?

+0

メモリアドレスは、* 4ビットではなく* 4 *インクリメントされます。 – Gabe

答えて

8

まず第一に(読むためにlhlhu、単一バイトを読み取るために例えばlblbuを参照して、バイトアドレス指定使用していますハーフワード)。

実際には、32ビット長(4バイト、lw)の単語を読み取ると、2つの連続した単語が互いに4バイト離れていることになります。この場合、最初の単語のアドレスに4を加えて、次の単語のアドレスを取得します。

これ以外にも、単語を読むと4の倍数に揃えなければなりません。そうしないと、配置の例外が発生します。

例では、最初の単語が0x10010000に格納されている場合、次の単語は0x10010004になります。もちろん、最初の半分/後半は0x1001000と0x1001002になります(順序はアーキテクチャのendiannessに依存します) )。

0

あなた自身がこれに答えているようです。 32ビットで4バイトになります。すべての要素が同じサイズでプッシュされるスタックにプッシュすると、各次の項目は4バイト先に(または前に)配置されます。あなたがメモリから任意のバイトを扱うことができるように、MIPSアーキテクチャのメモリアドレスが4 MIPSずつインクリメントされていない

関連する問題