我试图弄清楚MIPS的“非”指令,我还想不通...... 我在网上看到很多例子并尝试过。 例如:
not $t0, $t1
和
nor $t0, $t1, $zero
但是当我尝试使用模拟器MARS这两个指令时,我得到的答案是:-1或-2。 当我应该为1或0时。
我想要的是:
!1(= 0)或!0(= 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)。