0

私は MIPS のマニュアルを読んでいました。計算されたアドレスがメモリ空間の中間点を超えたためです。」

これは正確にはどういう意味ですか?具体的には、メモリ空間の中間点を越えます。

また、次のコードでは、8($sp) から 20($sp) にスキップする理由がわかりません。コードは後で 12($sp) と 16($sp) からロードされますが、メモリのこれらの部分で何かを行うのはいつですか。jal JILLなら可能だと思っていたのですが、あまり説明がありません。

addiu $sp, $sp, -24 
sw $t1, 0($sp) 
sw $t2, 4($sp) 
sw $t3, 8($sp) 
sw $ra, 20($sp) 
jal JILL
lw $ra, 20($sp) 
lw $t4, 12($sp) 
lw $t5, 16($sp) 
addiu $sp, $sp, 24
4

1 に答える 1

1

32 ビットのアドレス空間を持つ MIPS32 アーキテクチャを想定すると、メモリ空間の中間点はアドレス 0x80000000 (つまり 2^31) になります。32 ビットの符号付き (A2 補数) 演算では、0 から 0x7FFFFFFF までの整数は正の数用に予約されており、0x80000000 から 0xFFFFFFFF までの整数は負の数用に予約されています。

符号付き加算を発行すると、加算の結果がその中間点を「超える」場合、オーバーフロー例外が発生します。しかし、あなたの例では、実際には符号付きの数値ではなくメモリアドレスを扱っています...したがって、アドレスの符号 (32 ビット数値として解釈される) は無意味なので、符号なし加算を使用する必要があります。

2番目の質問については、JILLプロシージャを調べて、それが何をするかを確認する必要があります...確かに、そのプロシージャはいくつかの情報を保存し12($sp)ます16($sp)

于 2013-02-18T14:04:10.560 に答える