0

我想将此指令更改为二进制或机器码: addi $s3, $s1, -1000.

我知道如何对操作码、rs和进行编码rt,但我不知道如何转换-1000为二进制。

我知道如何获得 1 的补码和 2 的补码。但我不知道如何在这个 I type 指令中表达它。
我只是不知道如何将 -1000 表示为二进制数的最后 16 位。

因为 1000(十进制)是 16 位的 0000001111101000。

1's complement is      1111110000010111
                                     +1
=                      1111110000011000 2's complement

所以整个指令的答案是

001000 10001 10011 1111110000011000
addi    rs    rt     immediate

这是正确的吗?

4

1 回答 1

1

是的,MIPS addi/addiu 使用 16 位有符号 2 的补码立即数作为指令字的低 16 位。CPU 在解码时会将其符号扩展为 32(或 64)位。

但请注意ori//逻辑指令使用零扩展为 32 位(xori或64 位)的无符号16 位立即数,因此不可编码。andi-1000

要实现xori $t0, $t1, -1000,你需要-1000在一个寄存器中创建一个 32 位addiu $at, $zero, -1000,然后你可以xori $t0, $t1, $at。($at是伪指令之类的“汇编器临时”寄存器bgt。)

于 2019-02-19T07:00:40.033 回答