首页 > 解决方案 > 如何仅使用 shift 或 ori 将机器指令复制到寄存器?

问题描述

我一直在尝试自己学习汇编语言 (MIPS32),并且我一直在学习这个免费的在线课程来教授它。

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

标签: mips32

解决方案


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

0011 01ss ssst tttt iiii iiii iiii iiii

资料来源:MIPS 指令参考

  • 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 位作为立即操作数,我们可以将其与简单的左移相结合,先用另一条指令填充高 16 位0x3506,然后再将低 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

推荐阅读