Mips 从代码段查找偏移量

Mips 从代码段查找偏移量,mips,computer-architecture,mips32,Mips,Computer Architecture,Mips32,我有点被下面的问题难住了 考虑以下MIPS代码并回答以下问题 在条件分支中,标签循环转换为什么值 指令 现在我知道了分支目标地址的数学公式。但是这里由于内存寻址没有完成,所以我通过计算目标地址和PC之间的行数来找出偏移量。这给出的答案是7(字偏移量)。我这样做对吗?好吧,恐怕不行 正如MIPS指令参考所述: 18位有符号偏移(16位偏移字段左移2位) 被添加到分支后面的指令地址(不是 分支本身),在分支延迟槽中,形成PC相对 有效目标地址 据我所知,从分支指令到循环标签的距离是负的(因为标签在分

我有点被下面的问题难住了

考虑以下MIPS代码并回答以下问题

在条件分支中,标签循环转换为什么值 指令

现在我知道了分支目标地址的数学公式。但是这里由于内存寻址没有完成,所以我通过计算目标地址和PC之间的行数来找出偏移量。这给出的答案是7(字偏移量)。我这样做对吗?

好吧,恐怕不行

正如MIPS指令参考所述:

18位有符号偏移(16位偏移字段左移2位) 被添加到分支后面的指令地址(不是 分支本身),在分支延迟槽中,形成PC相对 有效目标地址

据我所知,从分支指令到
循环
标签的距离是负的(因为标签在分支之前,因此地址较低)。距离以字数计算(因此2位左移)。由于所有MIPS指令都是4字节,因此之前应该是6条指令,因此-6是应该出现在分支指令偏移量(下半个字)中的值。二进制:1111111111010(二的补码)。十六进制:FFFA


通过模拟器检查,我的推理似乎是正确的,因为指令编码为0x1530FFFA。

使用火星模拟器的快速实验给了我答案-6,-5行数差,另一个-1,因为指令后PC增加了1。

你更快了,只需更正,4字节,not bits是编码指令的宽度。真的吗?选择弗拉基米尔的答案?难以置信…@m0skit0:是的,你们两人的答案都是正确的。他也提到了PC+4。我在他面前作了详细的回答。反正是np。
addi $t1, $s0, 400
loop: lw $s1, 0($s0)
add $s2, $s2, $s1
lw $s1, 4($s0)
add $s2, $s2, $s1
addi $s0, $s0, 8
bne $t1, $s0, loop