将值 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.