9

何かが 0x1001 0000 に格納されている場合、次は 0x1001 0004 に格納されています。32 ビット アーキテクチャのメモリ ピースはそれぞれ 32 ビットです。では、0x1001 0002 は 32 ビットの後半を指すのでしょうか?

4

2 に答える 2

10

まず第一に、MIPS アーキテクチャのメモリ アドレスは 4 ずつインクリメントされません。MIPS はバイト アドレッシングを使用するため、メモリから任意のバイトをアドレス指定できます (たとえばlblbu1 バイトを読み取る、lhおよびlhuハーフ ワードを読み取る)。

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

これに加えて、単語を読み取る場合は、4 の倍数で整列する必要があります。そうしないと、整列例外が発生します。

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

于 2012-05-14T12:33:18.083 に答える
1

あなたはこれに自分で答えたようです!32 ビットは 4 バイトになるため、たとえば、すべての要素が同じサイズでプッシュされるスタックにプッシュする場合、次の各項目は次の項目より 4 バイト先 (または前) になります。

于 2012-05-14T02:48:05.510 に答える