@msm: niestety, ale musze to zrobic w ten wlasnie sposob. Po wielkich bólach doszedłem do czegoś takiego:
# s0=licznik, s1=wskaznik dla el., s2=wskaznik dla dugosci ciagu tablicy, s3=12 (granica ciagu tablicy)
.data
dlugtabl .space 12
tablica: .word 5, 1, 4 # trzy ciągi znaków "#", pierwszy z pięcioma el., drugi z 1, trzeci z 4.
naklejka1: .asciiz "#####"
naklejka2: .asciiz "#"
naklejka3: .asciiz "####"
.text
main:
li $s0, 0 # ustawiam wartość licznika na 0
la $s1, tablica # laduje adres wskaznika
lw $s2, dlugtabl # przypisuję znaczenie s2
li $s3, 12 # ustawiam granicę tablicy dla ostatniego elementu
petla:
#pętla while działająca na zasadzie: while(i<s3) i++;
sll $t1, $s0, 2 # mnożę ilość bitów x4: $t1=4*i
add $t1, $t1, $s1 # $t1 równe jest adresowi tablicy: tablica[i]
lw $t0, 0($t1) # ładuję t0 przyjmującą wartość tablicy: tablica[i]
#Teraz muszę ustawić warunek przy którym pętla się zakończy jeśli t0 przekroczy wartość 12 (choć nie wiem czy koniecznie muszę skoro #nie wprowadzam żadnych danych z klawiatury)
slt $t0, $s1, $s3
bne $t0, m$s3, Exit
add $s3, $s3, 1 # i++
j petla
Exit:
#teraz starałem się wykorzystać funkcję "if" do połączenia elementów numerycznych z tablicy z napisem symbolicznym
beq $s1, 0, N1 # jeśli s1=0 to idź do naklejki N1
beq $s1, 1, N2 # jeśli s1=1 to idź do naklejki N2
beq $s1, 2, N3 # jeśli s1=2 to idź do naklejki N3
N1:
li v0, 4
la a0, naklejka1
syscall
N2:
li v0, 4
la a0, naklejka2
syscall
N3:
li v0, 4
la a0, naklejka3
syscall
Nie wiem gdzie i z czym namieszałem. Niestety MIPS wraz ze swoją symboliką mnie przerasta. Nie wiem czy dasz radę się w tym połapać, ale sam pomimo czytania nie mogę tego ogranąć, a nie znam nikogo zaznajomionego z mipsem, aby mi to wytłumaczył