我有一组指令如下:MIPS BNE指令
loop:
sll $t1, $t0, 2 # t1 = (i * 4)
add $t2, $a0, $t1 # t2 contains address of array[i]
sw $t0, 0($t2) # array[i] = i
addi $t0, $t0, 1 # i = i+1
add $t4, $t4, $t0 # sum($t4) = ($t4 + array[i])
slt $t3, $t0, $a1 # $t3 = (i < array_size)
bne $t3, $zero, loop # if (i < array_size) then loop
的sll
指令具有的0x18
的地址(程序计数器)。 bne
的地址为0x30
。 MARS模拟器将bne
指令解释为:bne $11, $0, 0xfff9
。 0xfff9
是-7
,这意味着指令将跳回7步。然而,sll
是六个步骤。 MIPS是否考虑到当前的指令?或者是否发生这种情况是因为程序计数器在指令结束执行前在fetch
阶段增加了?
我没有答案,但我会添加“步幅”作为另一个可能的原因。 –