我想将此指令更改为二进制或机器代码:addi $s3, $s1, -1000
。
我知道如何编码操作码,rs
和rt
,但我不知道如何将-1000
转换为二进制。
我知道如何获得1的补码和2的补码。但我不知道如何在这个I型指令中表达它。 我只是不知道如何将-1000表示为最后16位数字作为二进制数。
因为1000(十进制)是16位数的0000001111101000。
1's complement is 1111110000010111
+1
= 1111110000011000 2's complement
所以整个教学的答案是
001000 10001 10011 1111110000011000
addi rs rt immediate
这是正确的吗?
是的,MIPS addi
/ addiu
使用16位带符号2的补码立即作为指令字的低16位。解码时,CPU会将其签名扩展为32位(或64位)。
但请注意,ori
/ xori
/ andi
逻辑指令使用零扩展到32位(或64位)的无符号16位立即数,因此-1000
不可编码。
要实现xori $t0, $t1, -1000
,你需要在一个像-1000
这样的寄存器中创建一个32位的addiu $at, $zero, -1000
,那么你就可以使用xori $t0, $t1, $at
。 ($at
是像“bgt
”这样的伪指令使用的“汇编临时”寄存器。)