Я сейчас изучаю курс компьютерной архитектуры, и мы рассматриваем основные инструкции R-типа и I-типа (также это RISC ) и т. Д. Я не могу понять, как оптимизировать этот код.
Объяснение: Этот код добавляет слова в массив чисел (на который указывает $ s1) до тех пор, пока не будет достигнут ноль. Результат сохраняется в $ t1. $ t0 содержит текущее слово.
add $t1, $zero, $zero # Initialize result to zero
again:
lw $t0, 0($s1) # Load the word from the array
beq $t0, $zero, done # Terminate if current word is a zero
add $t1, $t1, $t0 # Add current word to result
addi $s1, $s1, 4 # Point to the next word in the array
beq $t1, $t1, again # Loop again
done:
nop # Do nothing
Мне сложно оптимизировать код. Я считаю, что beq $ t1, $ t1, опять же
(так как это всегда правда) не нужен, но я не знаю, как его удалить. Вот моя попытка, но теперь я понимаю, что мой код не завершится.
add $t1, $zero, $zero # Initialize result to zero
again:
lw $t0, 0($s1) # Load the word from the array
add $t1, $t1, $t0 # Add current word to result
addi $s1, $s1, 4 # Point to the next word in the array
bne $t1, $zero, again # If result is not zero, loop
done:
nop # Do nothing
Я никогда не проверяю завершающий ноль и не перехожу к завершению. Но если я добавлю еще одну проверку, то разве код не будет таким же, как раньше?