gpt4 book ai didi

MIPS - 如何找到分支和跳转指令的地址值

转载 作者:行者123 更新时间:2023-12-05 01:02:58 26 4
gpt4 key购买 nike

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

"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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com