PDA

View Full Version : [Assembly MIPS] primi passi: non riesco ad usare l'offset delle istruzioni di load


ndakota
16-05-2010, 14:13
Ciao a tutti. Sto muovendo i miei primi passi con l'assembly MIPS. Beh, un esempio vale pių di mille parole.


.data
array: .byte 1, 3, 5, 7, 9, 11, 13, 15, 17, 19
newline: .asciiz "\n"
.text
main:
la $t0, array
move $t1, $zero
repeat:
lb $a0, 1($t0) # load i element

li $v0, 1 # code to print an integer
syscall

li $v0, 4 # code to print a string
la $a0, newline
syscall

addi $t1, $t1, 1 # increment i

bne $t1, 10, repeat

li $v0, 10 # correct termination
syscall


Dichiaro un array di 10 elementi di byte. Quello che voglio fare č semplicemente ciclare su questo array e stampare i suoi elementi. Cosė come č ora il codice, stampa sempre il primo elemento. Quello che volevo fare era di mettere al posto dell'istruzione in grassetto questa


lb $a0, $t1($t0)


Praticamente, voglio aggiornare l'offset ma mi da' errore. Qualcuno riesce ad aiutarmi?

P.s. scusate per il mio inglese :D

lock cmpxchg8b %ebx
16-05-2010, 15:51
L'offset č una costante.
lb $x,C($y)
Puoi sempre aumentare l'indirizzo ad ogni ciclo.

ndakota
16-05-2010, 15:59
Grazie, ho fatto cosė allora.


.data
array: .byte 1, 3, 5, 7, 9, 11, 13, 15, 17, 19
newline: .asciiz "\n"
.text
main:
la $t0, array
move $t1, $zero
repeat:
lb $a0, ($t0) # load first byte of array

li $v0, 1 # code to print an integer
syscall

li $v0, 4 # code to print a string
la $a0, newline
syscall

addi $t0, $t0, 1
addi $t1, $t1, 1 # increment i

bne $t1, 10, repeat

li $v0, 10 # correct termination
syscall



Funziona :) Anche se sono certo che si possa far di meglio. Cosė sto utilizzando un indice che di fatto uso solo per contare i giri e per la condizione ma mi sembra inutile.

DanieleC88
16-05-2010, 19:09
Anche se sono certo che si possa far di meglio.

Se funziona č ok. :p