何かが0x1001 0000に格納されている場合、次のものは0x1001 0004に格納されます。もし私が正しいとすれば、32ビットアーキテクチャのメモリはそれぞれ32ビットです。したがって、0x1001 0002は32ビットの後半を指していますか?メモリアドレスがMIPSで4ずつインクリメントされるのはなぜですか?
7
A
答えて
8
まず第一に(読むためにlh
とlhu
、単一バイトを読み取るために例えばlb
とlbu
を参照して、バイトアドレス指定使用していますハーフワード)。
実際には、32ビット長(4バイト、lw
)の単語を読み取ると、2つの連続した単語が互いに4バイト離れていることになります。この場合、最初の単語のアドレスに4を加えて、次の単語のアドレスを取得します。
これ以外にも、単語を読むと4の倍数に揃えなければなりません。そうしないと、配置の例外が発生します。
例では、最初の単語が0x10010000に格納されている場合、次の単語は0x10010004になります。もちろん、最初の半分/後半は0x1001000と0x1001002になります(順序はアーキテクチャのendiannessに依存します) )。
0
あなた自身がこれに答えているようです。 32ビットで4バイトになります。すべての要素が同じサイズでプッシュされるスタックにプッシュすると、各次の項目は4バイト先に(または前に)配置されます。あなたがメモリから任意のバイトを扱うことができるように、MIPSアーキテクチャのメモリアドレスが4 MIPSずつインクリメントされていない
関連する問題
- 1. メモリアドレス0x0が予約されているのはなぜですか?
- 2. なぜintポインタ '++'は1ではなく4だけインクリメントするのですか?
- 3. このメモリアドレスがランダムな値を持つのはなぜですか?
- 4. 他のメモリアドレスが変更されている間に、一部のメモリアドレスが一定の理由で報告されるのはなぜですか?
- 5. 出力でcがインクリメントされないのはなぜですか?
- 6. ステートメント "m = ++ i ||"で "k"がインクリメントされないのはなぜですか? ++ j && ++ k "?
- 7. Dataflow-BigTableコネクタでインクリメントがサポートされないのはなぜですか?
- 8. x ++の後にxがインクリメントされないのはなぜですか?
- 9. 結果はインクリメント後に11になるはずです、それは12です、なぜですか?
- 10. なぜグリフアイコンがブートストラップ4で削除されたのですか?
- 11. `writev`の呼び出しでメモリアドレスが表示されないのはなぜですか?
- 12. sizeof()のdouble配列[4]はなぜ4つだけですか?
- 13. カウンタがインクリメントするのはなぜですか?
- 14. なぜ4番目にテンプレートが4回コンパイルされるのですか?
- 15. なぜstd :: transformなどで 'for'ループのインクリメントが(void)にキャストされますか?
- 16. アセットがRails 4でレンダリングされないのはなぜですか?
- 17. なぜSilverlight 4ではInvalidEnumArgumentExceptionが廃止されましたか?
- 18. Golang:構造体参照のメモリアドレスが変わるのはなぜですか?
- 19. jUnit 4が予想される例外を見つけられないのはなぜですか?
- 20. アレイのメモリアドレスが常に増加しないのはなぜですか?
- 21. 4つの.php関数がすべてsubmitで表示されるのはなぜですか?
- 22. SQOOPがデフォルトで4つのマッパーを起動するのはなぜですか?
- 23. Windows x64でIntPtr.sizeが4になるのはなぜですか?
- 24. カウンタ "c"がforループでインクリメントされずに初期化されない1
- 25. .NET 4でBeforeFieldInitビヘイビアが変更されたのはなぜですか?
- 26. なぜ-4 <= -4が真であると評価され、なぜ9> = 9がRubyで真と評価されるのですか?
- 27. これが要素を4回移動させるのはなぜですか?
- 28. なぜ2つの同じタイプのxmlで、1つはデシリアライズされず、もう1つはxmlですか?
- 29. Angular 4 ChartJSコンポーネントがレンダリングされないのはなぜですか?
- 30. なぜMIPSでは 'opcode'フィールドと 'funct'フィールドが離れていますか?
メモリアドレスは、* 4ビットではなく* 4 *インクリメントされます。 – Gabe