Ваш код: (оптимизирован)
addi $1, $0, 100
1: addi $2, $0, 0 #can replace with mov $2,$0 (easier to understand)
lw $3, 0($4) #don't need an offset, replace with lw $3,($4)
add $2, $2, $3
addi $4, $4, 4
bne $1, $0, 1b
addi $1, $1, -1
Я удалил nop и поменял местами инструкции bne и addi, чтобы процессор не терял циклов.Адди всегда выполняется в слоте задержки перехода.
PS Кодер переменной длины упоминает, что инструкция сложения должна ждать lw, и он является частично правильным и частично неправильным.Если архитектура поддерживает переадресацию, вам не нужно ждать (останавливаться), как это делают некоторые реализации архитектуры MIPS.Однако, если архитектура не поддерживает переадресацию (маловероятно), вам придется либо сделать то, что он / она предложил, либо поменять местами две инструкции добавления, следующие за lw