将值 0xB33C 分配给寄存器 $t0
Assign value 0xB33C to register $t0
将值 0xB33C 分配给寄存器 $t0。
答案是:ori $t0, $zero, 0xB33C
但是,我不明白为什么。我以为答案会是 addi $t0, $t0, 0xB33C
.
有人可以给我解释一下吗?我不确定 ori
指令是如何工作的。
I thought the answer would be addi $t0, $t0, 0xB33C
也许你的意思是addi $t0, $zero, 0xB33C
?无论如何,在这种情况下 addi
的问题在于它对指令字中编码的 16 位立即值进行符号扩展。所以你最终会得到 0xFFFFB33C
.
ori
执行按位或,这意味着如果在任何输入中设置了相应的位,则结果中的每一位都将被设置。 table 的真相是:
IN OUT
----------
0 0 -> 0
0 1 -> 1
1 0 -> 1
1 1 -> 1
如您所见,在零和某个值 X 之间执行按位或运算,结果将为 X。所以 ori $t0,$zero,0xB33C
给你 $t0 = 0 bitwise OR 0xB33C
,即 $t0 = 0xB33C
.
将值 0xB33C 分配给寄存器 $t0。
答案是:ori $t0, $zero, 0xB33C
但是,我不明白为什么。我以为答案会是 addi $t0, $t0, 0xB33C
.
有人可以给我解释一下吗?我不确定 ori
指令是如何工作的。
I thought the answer would be
addi $t0, $t0, 0xB33C
也许你的意思是addi $t0, $zero, 0xB33C
?无论如何,在这种情况下 addi
的问题在于它对指令字中编码的 16 位立即值进行符号扩展。所以你最终会得到 0xFFFFB33C
.
ori
执行按位或,这意味着如果在任何输入中设置了相应的位,则结果中的每一位都将被设置。 table 的真相是:
IN OUT
----------
0 0 -> 0
0 1 -> 1
1 0 -> 1
1 1 -> 1
如您所见,在零和某个值 X 之间执行按位或运算,结果将为 X。所以 ori $t0,$zero,0xB33C
给你 $t0 = 0 bitwise OR 0xB33C
,即 $t0 = 0xB33C
.