我试图对从mips程序参数中获得的二进制补码进行符号扩展。我该怎么办?
答案 0 :(得分:1)
一种方法是利用MIPS sra
指令,该指令执行arithmetic right shift-它在向右移位寄存器的同时移入符号位。
通过使用sll
将8位值放在最左边(在最高有效位置读取),我们使它的符号位与寄存器符号位重合,然后使用sra
:
#Assume $a0 is a) 0x40 b) 0x80
sll $a0, $a0, 24 #a) $a0 = 0x40000000 b) $a0 = 0x80000000
sra $a0, $a0, 24 #a) $a0 = 0x00000040 b) $a0 = 0xffffff80
对于内存中的值,lb
将加载扩展它的字节符号(与lbu
相反)。
自release 2 of the MIPS32 ISA开始,seb rt, rs
指令对GP寄存器的最低有效字节进行符号扩展。