1. ホーム
  2. assembly

[解決済み] lb命令は具体的に何をするのですか?

2022-03-15 06:49:38

質問

もうすぐ試験ですが、練習問題のひとつに

と仮定します。 $t0 は値を含んでいます。 0x12121212$t1 には アドレス 0x1000000 .

アドレスから始まるメモリデータがあるとします。 0x1000000 である。 88 77 66 55 .

の値はどうなるのでしょうか? $t0 を実行した後、次のコードを実行します。

lb $t0, 0($t1)

a) 0x00000088 b) 0x88121212 c) 0xffffff88 d) 0x12121288

私が出した答えは a というバイトがあるためです。 lb この命令で読み取られるのは(私の理解では)88です。そして、この88は $t0 したがって、その値は 0x00000088 . しかし、与えられた答えは c . ということについて、根本的な誤解をしているような気がします。 lb が動作する理由を誰か説明してください。 c ?

解決方法は?

答えは c) 0xffffff88 . その lb 命令は、バイトを32ビットの値に符号拡張します。つまり、最上位ビット(msb)が上位24ビットにコピーされます。

0x88 == 0b10001000 つまり msb は 1 ですので、上位 24 ビットは 0b1111111111111111 == 0xffffff となります。