1

如何在 MIPS 中使二进制数的 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 位通常用于表示用于逻辑运算(例如ori此处)的无符号 16 位值(即 0 到 65535,或 0x0000 - 0xFFFF 十六进制),或有符号 16 位值(-32768 到 32767,或 0xFFFF8000 到 0x00007FFF)用于算术运算。

因此,您不能在此处直接使用 2147483648 (0x80000000) 作为立即值 - 因此出现“超出范围”错误。

但是有一条指令用于将 16 位立即数加载到寄存器的16 位(将低位设置为 0):(lui加载上立即数)。

因此,您可以将 0x80000000 加载到这样的寄存器中,然后or使用您的值:

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