/ / looping a través de array usando while loop? - MIPS - matrices, bucles, ensamblaje, mips

bucle a través de la matriz usando while loop? - MIPS - matrices, bucles, montaje, mips

Quiero recorrer una serie de números como

.word 2,2,2,2,2,2,2,2,2,2,2,2,2
.word 2,2,2,2,2,2,2,2,2,2,2,2,2
.word 2,2,2,2,2,2,2,2,2,2,2,2,2
.word 2,2,2,2,2,2,2,2,2,2,2,2,2

y quiero asegurarme de que todo en la matriz tenga el valor 2. Ahora estos son 52 elementos, así que cada vez que quiero verificar si todos los elementos de la matriz son 2 ... de lo contrario, haga otra cosa.

Eso es lo que he hecho hasta ahora:

add $t6,$0,$0
add $t7,$0,$0
SL:
addi $t6,$t6,4
addi $t7,$t7,1
la $t1,array
add $t1,$t1,$t6
lw $s0,($t1)
j check

slti $t8,$t7,52
bnez $t8,SL
jr $ra
check:
li $t3,2
seq $t4,$s0,$t3
beqz $t4,do_something
bnez $t4,exit
jr $ra

Pero cuando hago una matriz como esta

   .word 0,2,2,2,2,2,2,0,2,2,2,2,2
.word 2,2,2,2,2,2,2,2,2,2,2,2,
.word 2,2,2,2,2,2,2,0,2,2,2,2,2
.word 2,2,2,2,2,2,2,2,2,2,2,2,0

todavía sale aunque la matriz no sea todo 2s.

Respuestas

1 para la respuesta № 1

Para hacer esto, debe comenzar accediendo aprimer elemento de cada matriz, y luego haga un bucle hasta que su puntero (o dirección de memoria) esté fuera del rango de la matriz. La dirección de la matriz también es la dirección del primer elemento (y tiene un desplazamiento de 0 bits), y el último elemento tiene un desplazamiento de 48 bits.

Supongamos que $ t0 sea la dirección del elemento actual y que $ t1 esté fuera de los límites.

la    $t0, array
addiu $t1, $t0, 52  # 52 is outside the array
L1:
beq   $t0, t1, L2
# do something here
addiu  $t0, $t0, 4
j     L1
L2:
# this part of the code happens after you traverse through an array.

Además, puede usar addi en lugar de addiu, pero como probablemente aprenderá más adelante en el curso, addi puede causar una excepción.