缺少 NOT 操作
NOT operation missing
我试图弄清楚 MIPS 的 "not" 指令,但我还想不通...
我在网上看到了很多例子并尝试了它们。
例如:
not $t0, $t1
和
nor $t0, $t1, $zero
但是当我尝试使用模拟器 MARS 这两个指令时,我得到的答案是:-1 或 -2。
对我来说什么时候应该是 1 或 0。
我想要的是:
!1 (= 0) 或 !0 (=1)
有什么问题吗?我错过了什么吗?
What i want is:
!1 (= 0) or !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
我们之后使用异或将 0 反转为 1,反之亦然。
not
指令执行a bitwise NOT operation。也就是说,它反转 all 位(所有 0 为 1,所有 1 为 0)。因此,如果输入为 0,则结果为 0xFFFFFFFF(也可以解释为 -1)。如果输入为 1,则得到 0xFFFFFFFE(也可以解释为 -2)。
我试图弄清楚 MIPS 的 "not" 指令,但我还想不通... 我在网上看到了很多例子并尝试了它们。 例如:
not $t0, $t1
和
nor $t0, $t1, $zero
但是当我尝试使用模拟器 MARS 这两个指令时,我得到的答案是:-1 或 -2。 对我来说什么时候应该是 1 或 0。
我想要的是:
!1 (= 0) 或 !0 (=1)
有什么问题吗?我错过了什么吗?
What i want is:
!1 (= 0) or !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
我们之后使用异或将 0 反转为 1,反之亦然。
not
指令执行a bitwise NOT operation。也就是说,它反转 all 位(所有 0 为 1,所有 1 为 0)。因此,如果输入为 0,则结果为 0xFFFFFFFF(也可以解释为 -1)。如果输入为 1,则得到 0xFFFFFFFE(也可以解释为 -2)。