У меня есть следующий набор инструкций:
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 Simulator интерпретирует инструкцию bne
как: bne $11, $0, 0xfff9
. 0xfff9
равно -7
, что означает, что инструкция отскочит на 7 шагов назад. Однако sll
- это шесть шагов назад. Учитывает ли MIPS текущую инструкцию? Или это происходит из-за того, что счетчик программы увеличивается на этапе fetch
до завершения выполнения инструкции?