我马上就要考试了,我完全被这个问题困住了(见下文);即使查看模型答案也无济于事。我已经尝试阅读该主题的正文,但仍然不知道如何做到这一点。如果有人能提供该问题的分步介绍,我将不胜感激。
"Assuming the first instruction of the MIPS snippet below is located at memory address 0x10001000. What is the value for else and exit in bne and j instruction?"
1 0x10001000: addi $s0, $0, 5 2 0x10001004: sub $s2, $0, $s1 3 0x10001008: beq $s0, $s2, else 4 0x1000100C: add $s0, $0, $0 5 0x10001010: add $t0, $s2, $s0 6 0x10001014: j exit 7 0x10001018: else: addi $s1, $s0, -1 8 0x1000101C: exit:
Model Answer:
Else: 0000000000000011 Exit: 00000000000000010000000111
我还提供了指向原始问题图片的链接。 http://i.imgur.com/NgHpZXs.png
最佳答案
首先,我们将处理分支。分支是 I-Type
指令,因此分支目标以 16
位编码。找出分支的立即数字段的最简单方法是计算分支指令与其目标之间的指令数。在这种情况下,else
标签是 beq
之后的 4
指令,但是,PC
增加了 4
在指令获取阶段,所以实际的立即字段实际上是 3
。当然,在二进制中,这与示例 0000000000000011
匹配。
接下来,跳转是一个 J-Type
指令,它使用地址的前 24
位对跳转目标进行编码。但是,因为跳转目标必须是字对齐的,所以最后两位将始终为 0
,因此它们是不必要的。因此,j
指令的跳转字段匹配示例答案:0x1000101C >> 2 = 0x4000407 = 00000000000000010000000111
关于MIPS - 如何找到分支和跳转指令的地址值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23727105/