0

私は MIPS 命令を学んでいますが、即値を拡張する必要がある I タイプの命令をテストすると、次の結果について混乱します (それらはすべて MARS で実行されます)。

  1. ソース コード行 があるとしますori $s1, $s2, 0xfd10。MARS は基本的なアセンブラ命令 ori $17, $18, 0x0000fd10を提供します。これは、16 ビットの即値oriゼロ拡張する必要があるためです。機能を変更するだけoriandi、つまりソース コードの行 andi $s1, $s2, 0xfd10だけを変更すると、MARS はほぼ同じ基本的なアセンブラ命令 andi $17, $18, 0x0000fd10を提供します。ただし、 とは異なりori符号拡張andiを使用する必要があります。したがって、基本的なアセンブラ命令は.andi $17, $18, 0xfffffd10

andiまた、ゼロ拡張を使用する必要があります。最初の質問は無視してください。

  1. slti rt, rs, immたとえば、を使用しようとするとslti $s1, $s2, 0x8000、MARS は行の実行を拒否し、エラー メッセージは"0x8000": operand is out of range. 即時が範囲外である理由はわかりません。即時を少し下に変更すると、たとえば 、slti $s1, $s2, 0x7fff機能し、即時が に拡張され0x00007fffます。私の期待は、0x8000に拡張する必要があること0xffff8000です。私の理解に何か問題がありますか?
4

1 に答える 1