google mips命令セットの場合、lbはロードバイトです。
lb $t, offset($s)
はMEMが広いここで32ビットであると仮定
$t = MEM[$s + offset]; advance_pc (4);
を意味し、それは、私たちが気をいけない実装方法、コアの端部です。
学習苦痛を作成することを意図した小数点以下の定義。バイトアドレスを意味するバイトサイズの値にすべて収まるようにします。
r2が12の場合、定義されていない小数アドレス25を取得するために13を加算します。私たちがコメントで言及しているように、これらの概念はワードサイズの定義です。次に、24 = -14はアドレス0x18(BTWは有効な8ビット、16ビット、32ビット、64ビットの整列アドレス)を意味し、0x18の値は0xFFFFFFF2、0x19は0x19です。したがって、エンディアンに応じて、どちらの場合でも0xFFFFバイトまたは0xFFFFバイトの0xFFである可能性があります。
次に、lb記号が拡張されていることを知る必要があります。 0xFFのmsbitは1であるため、残りのビットは0xooooooFFをロードしてから0xFFFFFFFFに符号を拡張するビットになります。それをr3に保存します。 (そして、プログラムカウンタを次の命令にインクリメントする)。
これを見ると0xFFFFFFFFという回答があったので、それはバイト値ではないので、lbは符号拡張でなければならず、読み込み値は0xFFでなければなりません。もしそれが符号拡張されなかったなら、我々は0x000000XXを期待するだろう.XXは我々が探しているバイトである。そして、またはxxは、バイトサイズの2の補数の観点から正の値をとっています。
r3の初期値は関連性がありません。おそらくあなたを倒すかもしれません。
これはr2(12)を取って13に25(10進数)を加え、そのアドレスからバイトを読み込みますはい?そしておそらく、彼らはメモリのリセットが0xFFに初期化されていると仮定します。そしてlb標識は延長されますか? –
lbは符号拡張されています。したがって、メモリ24が-14であれば、第1のバイトは11111111であり、第2のバイト(アドレス25)も0xFFである11111111であることを意味する。 sign extendedは0xFFFFFFFFになりますか?それはそれを行う正しい方法ですか?お返事ありがとうございます! –
MIPSでは、メモリは32ビットワードを保持します。最上位ビットは最下位アドレスに格納されます。したがって、バイト25は、アドレス24の32ビットバージョンの2番目のバイトです。そのため、memアドレスは各バイトごとに4,1の倍数でずらされています。おもう。 –