我想将此指令更改为二进制代码或机器代码:addi $s3, $s1, -1000。
我知道如何对操作码、rs和rt进行编码,但我不知道如何将-1000转换为二进制。
我知道如何得到1的补语和2的补语。但是我不知道该怎么用这个我输入指令来表达它。
我只是不知道如何用二进制数把-1000表示成最后16位数。
因为1000(十进制)是0000001111101000的16位数。
1's complement is 1111110000010111
+1
= 1111110000011000 2's complement所以整个指令的答案是
001000 10001 10011 1111110000011000
addi rs rt immediate是这样的吗?
发布于 2019-02-19 07:00:40
是的,MIPS addi / addiu 使用16位签名2的补码作为指令字的低16位。CPU将在解码时将其扩展到32位(或64位)。
但是请注意,ori / xori / andi逻辑指令使用零扩展到32位(或64位)的无符号16位即时性,因此-1000是不可编码的。
要实现xori $t0, $t1, -1000,您需要在寄存器中使用类似于addiu $at, $zero, -1000的东西创建32位-1000,然后才能使用xori $t0, $t1, $at。($at是bgt等伪指令使用的“汇编程序临时”寄存器。)
https://stackoverflow.com/questions/54758681
复制相似问题