У меня есть код сборки, содержащий массив, и я просто не могу понять, что на самом деле результат в регистре $ s2. Если бы кто-то мог помочь и объяснить или упростить это для меня, это было бы здорово. Вот код:Проблема с ассемблером MIPS - массивы
.data arr: .word 3 2 -6 1 4 10 530 115 2231 1422
arrSize: .word 10
.text
.global main
main:
la $s0, arr
la $t0, arrSize
lw $s1, 0($t0)
add $s2, $zero, $zero
loop:
lw $t1, 0($s0)
andi $t2, $t1, 1
bne $t2, $zero, skip
addi $s2, $s2, 1
skip:
addi $s0, $s0, 4
addi $s1, $s1, -1
bne $s1, $zero, loop
end:
add $v0, $zero, $s2
Не будет ли он считать четные элементы, так как он перескакивает на 'skip', если установлен lsb? (Я предполагаю, что ассемблер заполняет слоты ветви задержки с помощью NOP или некоторых таких, так как вам не нужно принимать отложенное ветвление во внимание с помощью SPIM/MARS IIRC). – Michael
@Michael: да, я думаю, что вы правы - я перепутал логику - позвольте мне исправить это ... –
Возможно, комментарий для 'addi' должен быть изменен на' if (t2 == 0) 'или' if (t2! = 0) goto skip; ' – Michael