用于MIPS指令集的字节操作

时间:2013-11-15 01:05:25

标签: assembly mips computer-architecture instruction-set digital-logic

我想使用MIPS指令集进行一些字节操作。

  • 我已注册$S0,其中0x8C2E5F1E已注册$S10x10AC32BB
  • 我想将$S0 5F的第二个字节存储到$S1AC的第三个字节中。

我的逻辑是将寄存器$S0的字节存储到另一个寄存器中,将其移位到所需的字节。然后我会用$S1注册0xFF00FFFF。最后,我会或两个寄存器。 听上去怎么样?这是对的吗?有更好的方法吗?

任何建议或解决方案都将不胜感激。

2 个答案:

答案 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;