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 № 1Para 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.