1

MIPS で 2 進数の MSB を 1 にするにはどうすればよいですか? マスキングでやろうとしたのですがエラーが出てしまうので、他に方法はありますか?

エラーが発生しているマスキングによってMSB = 1にするコード。

srl $s3,$s3,1

// error out of range

ori $s3,$s3,2147483648       # making MSB = 1

よろしく

4

1 に答える 1

1

即値オペランドを持つ命令の MIPS オペコード形式では、即値定数に使用できるのは 16 ビットのみです。

これらの 16 ビットは通常、論理演算 (ここなど) の符号なし 16 ビット値 (つまり、0 ~ 65535、または 16 進数で 0x0000 ~ 0xFFFF ori)、または符号付き 16 ビット値 (-32768 ~ 32767、算術演算の場合は 0xFFFF8000 ~ 0x00007FFF)。

したがって、ここでは 2147483648 (0x80000000) を即値として直接使用することはできません。したがって、「範囲外」エラーが発生します。

ただし、レジスタの上位lui16 ビットに 16 ビットの即値をロードする (下位ビットを 0 に設定したままにする) 命令があります: (上位即値をロード)。

したがって、そのようなレジスタに 0x80000000 をロードしてからor、値をロードできます。

lui  $t0, 0x8000
or   $t0, $t0, $s3
于 2012-10-14T17:03:03.673 に答える