私は見てきたいくつかの情報によれば、マシン命令は32ビットであり、即値はマシン命令に格納されているため、32ビットの即値を32ビットのミップで使用することはできません。私が知る限り、即座にできる最大のものは16ビットであり、残りの命令のための余裕を残しています。しかし、MARS 4.5 MIPSで、この命令は、(デフォルトの設定を使用して)正常に動作します:MARSが32ビット即時に可能なのはなぜですか?
.text
ori $t1, $0, 0xffffffff #load 32-bit pattern into $t1
これは、組み立てと正常に動作、私が思うように私をバッフルそれべきではありません以上の理由(どのようにすることができ、32ビットマシンコードについて32ビットのイミディエイトを保持しますか?)。 MARSのoriは、即時フィールドが0xffffより大きい場合は疑似命令を実行しますが、luiとoriは定期的にロードされますが、わかりません。誰かがこれにいくつかの光を当てることができますか?
バイナリを逆アセンブルして自分で確認します。確かにそれは動作しません。 'addi'のようないくつかの命令は即値を拡張するので、' addi $ t1、$ 0、0xffffffff'は動作します。ちなみに、これはアセンブラがここで 'ori'の代わりに使用できる命令です。 – Jester