不操作丢失

时间:2015-07-27 21:59:12

标签: mips

我试图弄清楚MIPS的“非”指令,我还想不通...... 我在网上看到很多例子并尝试过。 例如:

not $t0, $t1

nor $t0, $t1, $zero

但是当我尝试使用模拟器MARS这两个指令时,我得到的答案是:-1或-2。 当我应该为1或0时。

我想要的是:

!1(= 0)或!0(= 1)

有什么问题?我错过了什么吗?

1 个答案:

答案 0 :(得分:3)

  

我想要的是:

     

!1(= 0)或!0(= 1)

在这种情况下,你应该这样做:

sltu $t0, $zero, $t1
xori $t0, $t0, 1

sltu指令检查零是否小于$t1,并将$t0设置为1或0,具体取决于该比较的结果。由于它是无符号比较,因此它基本上与$t0 = ($t1 != 0) ? 1 : 0相同。因为你想要的是$t0 = ($t1 == 0) ? 1 : 0我们之后使用eXclusive OR将0反转为1,反之亦然。

not指令执行a bitwise NOT operation。也就是说,它反转所有位(全0到1,所有1到0)。因此,如果输入为0,则结果为0xFFFFFFFF(也可以解释为-1)。如果输入为1,则得到0xFFFFFFFE(也可以解释为-2)。