我一直在努力学习汇编语言(MIPS32),而且我一直在关注这个教授它的免费在线课程。
有一个练习要求我通过仅使用or,ori和shift将ori $ 8,$ 6,0x20复制到$ 9。不幸的是,没有提供答案,我不知道如何做到这一点。有人可以帮助我或指出我正确的方向吗?谢谢。
首先,您必须检查用于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