您如何仅使用shift或ori将机器指令复制到寄存器?

时间:2019-03-05 02:44:58

标签: mips32

我一直在尝试自己学习汇编语言(MIPS32),并且一直在遵循免费的在线课程进行教学。

有一个练习要求我仅使用or,ori和shift将ori的$ 8,$ 6、0x20复制到$ 9。不幸的是,没有提供答案,我也不知道该怎么做。有人可以帮助我或指出正确的方向吗?谢谢。

1 个答案:

答案 0 :(得分:0)

首先,您必须检查ori指令所使用的格式:

0011 01ss ssst tttt iiii iiii iiii iiii

来源:MIPS Instruction Reference

  • sssss目标寄存器为$8 = 01000
  • ttttt$6 = 00110的源寄存器
  • ii...的直接操作数为0x20 = ...10 0000

结果说明如下:

0011 01ss ssst tttt iiii iiii iiii iiii
0011 0101 0000 0110 0000 0000 0010 0000

我们将其转换为十六进制以在我们的代码中使用:0x35060020

由于ori指令接受立即操作数的16位,我们可以将其与简单的左移结合起来,以首先用0x3506填充较高的16位,然后再将较低的16位与另一个ori指令。

ori $9, $0, 0x3506 # insert upper 16 bits of instruction
# 0000 0000 0000 0000 0011 0101 0000 0110

sll $9, $9, 0x10   # shift 16 bits to higher part of register
# 0011 0101 0000 0110 0000 0000 0000 0000

ori $9, $9, 0x0020 # insert lower 16 bits of instruction
# 0011 0101 0000 0110 0000 0000 0010 0000