/ / looping through array using while while? - MIPS - polia, slučky, zostava, čipy

slučky pomocou poľa pri použití slučky? - MIPS - polia, slučky, montáž, mipsy

Chcem opakovať niekoľko čísel ako

.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

a chcem sa ubezpečiť, že všetko v poli je hodnota 2. Teraz je to 52 prvkov, takže zakaždým, keď chcem skontrolovať, či sú všetky prvky poľa 2., je múdre robiť niečo iné.

To je to, čo som doteraz urobil:

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

Ale keď vytvorím pole ako je toto

   .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

stále opúšťa, aj keď pole nie je všetky 2s.

odpovede:

1 pre odpoveď č. 1

Za týmto účelom by ste chceli začať prístupom na internetprvý prvok každého poľa a potom opakujte, kým sa ukazovateľ (alebo adresa pamäte) nenachádza mimo rozsahu poľa. Adresa poľa je tiež adresa prvého prvku (a má posun 0 bitov) a posledný prvok má posun 48 bitov.

Nech je $ t0 adresa aktuálneho prvku a $ t1 je mimo hraníc.

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.

Môžete tiež použiť addi namiesto addiu, ale ako sa pravdepodobne dozviete neskôr v priebehu kurzu, addi môže spôsobiť výnimku.