我一直在尝试自己学习汇编语言(MIPS32),并且一直在遵循免费的在线课程进行教学。
有一个练习要求我仅使用or,ori和shift将ori的$ 8,$ 6、0x20复制到$ 9。不幸的是,没有提供答案,我也不知道该怎么做。有人可以帮助我或指出正确的方向吗?谢谢。
答案 0 :(得分:0)
首先,您必须检查ori
指令所使用的格式:
0011 01ss ssst tttt iiii iiii iiii iiii
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