【发布时间】:2012-01-10 05:14:55
【问题描述】:
我有一套指令如下:
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 阶段增加了?
【问题讨论】:
-
我没有答案,但我会添加“stride”作为另一个可能的原因。