如何通过shift,or,ori将机器指令复制到寄存器?

问题描述 投票:0回答:1

我一直在努力学习汇编语言(MIPS32),而且我一直在关注这个教授它的免费在线课程。

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

mips32
1个回答
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位,然后用另一个ori指令加上低16位。

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
© www.soinside.com 2019 - 2024. All rights reserved.