如何在MIPS机器代码中将负数转换/编码为立即数

问题描述 投票:0回答:1

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

我知道如何编码操作码,rsrt,但我不知道如何将-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

这是正确的吗?

binary mips twos-complement machine-code immediate-operand
1个回答
1
投票

是的,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”这样的伪指令使用的“汇编临时”寄存器。)

© www.soinside.com 2019 - 2024. All rights reserved.