2

我要考试了,我完全被这个问题困住了(见下文);即使查看模型答案也无济于事。我已经尝试阅读该主题的正文,但仍然不知道如何做到这一点。如果有人可以逐步解决这个问题,我将不胜感激。

“假设下面 MIPS 片段的第一条指令位于内存地址 0x10001000。在 bne 和 j 指令中 else 和 exit 的值是多少?”

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:

模型答案:

Else: 0000000000000011 Exit: 00000000000000010000000111

我还包含了指向原始问题图像的链接。 http://i.imgur.com/NgHpZXs.png

4

1 回答 1

7

首先,我们将处理分支。分支是一条I-Type指令,因此分支目标以16位编码。找出分支的立即数字段的最简单方法是计算分支指令与其目标之间的指令数。在这种情况下,else标签是4之后的指令beq,但是,在指令获取阶段PC会递增4,因此实际的立即数字段实际上是3。当然,在二进制中,这与 sample 匹配0000000000000011

接下来,跳转是使用地址J-Type的第一位对跳转目标进行编码的指令。24但是,因为跳转目标必须是字对齐的,所以最后两位总是0使它们变得不必要。因此,j指令的跳转字段与示例答案匹配:0x1000101C >> 2 = 0x4000407 = 00000000000000010000000111

于 2014-05-19T03:49:50.407 回答