如何在 MIPS 中使二进制数的 MSB 等于 1?我试图用屏蔽来做到这一点,但我得到了错误,那么还有另一种方法吗?
通过掩码使 MSB=1 的代码给了我错误。
srl $s3,$s3,1
// error out of range
ori $s3,$s3,2147483648 # making MSB = 1
问候
如何在 MIPS 中使二进制数的 MSB 等于 1?我试图用屏蔽来做到这一点,但我得到了错误,那么还有另一种方法吗?
通过掩码使 MSB=1 的代码给了我错误。
srl $s3,$s3,1
// error out of range
ori $s3,$s3,2147483648 # making MSB = 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