如何在MIPS中使二进制数的MSB等于1?我试图用屏蔽来做它,但是我得到了错误,那么还有另外一种方法吗?
通过屏蔽使MSB = 1的代码,这给了我错误。
srl $s3,$s3,1
// error out of range
ori $s3,$s3,2147483648 # making MSB = 1
此致
答案 0 :(得分:1)
具有立即操作数的指令的MIPS操作码格式只有16位可用于立即数。
这16位通常用于表示逻辑运算的无符号16位值(即0到65535或十六进制的0x0000 - 0xFFFF)(例如此处为ori
)或带符号16-算术运算的位值(-32768到32767,或0xFFFF8000到0x00007FFF)。
所以你不能在这里直接使用2147483648(0x80000000) - 因此“超出范围”错误。
但是有一条指令用于将16位立即值加载到寄存器的 top 16位(将底部位设置为0):lui
(立即加载)。
因此,您可以将0x80000000加载到这样的寄存器中,然后将or
加载到您的值中:
lui $t0, 0x8000
or $t0, $t0, $s3