Sto usando qualcosa come SPIMS o MARS con le funzioni syscall.Accesso a un carattere in una stringa
sto leggendo in una stringa (e funziona perché posso stamparlo) come segue:
li $v0, 8
la $a0, string
li $a1, 256
syscall
Tuttavia, sto avendo un problema di accesso un singolo carattere della stringa. Quindi, se voglio accedere al primo carattere e stamparlo, sto cercando questo:
la $t0, string
lb $a0, ($t0)
li $v0, 4
sys call
Se provo qualcosa di simile:
la $a0, string
li $v0, 4
syscall
Questo stampa l'intera stringa come punti di stringa al intera stringa.
Se provo qualcosa di simile:
la $a0, string
lb $a0, ($t0)
li $v0, 4
syscall
Mi dà un errore di limite. Non capisco perché però - non è un carattere lungo un byte e questo carica solo il primo byte dalla stringa in $ a0?
Grazie
IMO è necessario reimpostare sempre i valori dei registri prima di eseguire LI. Non sai mai cosa potrebbe avere la mezza parola superiore. – m0skit0
'LI' è uno pseudo-op che l'assemblatore di solito si espande in' ORI $ rd, $ zero, low16bits' seguito da 'LUI $ rd, hi16bits'. I 32 bit completi del registro di destinazione sono impostati correttamente dopo un'istruzione 'LI', quindi non è necessario ripristinare manualmente il registro prima di un' LI'. – markgz
Hai decisamente ragione – m0skit0