我想使用MIPS指令集进行一些字节操作。
$S0
,其中0x8C2E5F1E
已注册$S1
且0x10AC32BB
。 $S0
5F
的第二个字节存储到$S1
,AC
的第三个字节中。我的逻辑是将寄存器$S0
的字节存储到另一个寄存器中,将其移位到所需的字节。然后我会用$S1
注册0xFF00FFFF
。最后,我会或两个寄存器。
听上去怎么样?这是对的吗?有更好的方法吗?
任何建议或解决方案都将不胜感激。
答案 0 :(得分:1)
请考虑以下事项:
ori $t0 $s0 0xFF00 #extract byte 2
sll $t0 $t0 8 #shift to third byte
#create mask to clear third byte
lui $t1 0xFF
not $t1 $t1
and $s1 $s1 $t1 #clear third byte
or $s1 $s1 $t0 #set third byte
答案 1 :(得分:1)
对于版本2及更高版本,MIPS包含一个插入位字段指令,该指令从一个寄存器获取从最低有效位开始的位,并将它们放入第二个寄存器中的指定范围。因此,您的字节插入可以通过以下方式执行:
// rotating right one byte rather than shift to preserve data
// without using an additional register
ROTR $S0, $S0, 8;
// insert LSbits from $S0 into $S1 starting at bit 16
// with size of 8 bits
INS $S1, $S0, 16, 8;