如何使二进制数的最高有效位= 1

时间:2012-10-14 14:36:32

标签: assembly mips 32-bit pcspim bitwise-or

如何在MIPS中使二进制数的MSB等于1?我试图用屏蔽来做它,但是我得到了错误,那么还有另外一种方法吗?

通过屏蔽使MSB = 1的代码,这给了我错误。

srl $s3,$s3,1

// error out of range

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

此致

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