Domanda

Sto lavorando su un compito a casa tradurre un programma di C abbiamo scritto a MIPS. La mia domanda riguarda in generale la codifica MIPS e non proiettare questioni specifiche però. Ho incontrato un problema con la stampa la mia uscita. Ho una stringa di array e uscita dichiarata come tale:

array: .word 7, 2, 5, -3, 3, 6, -4, 1  
output1: .asciiz "Array: \0"

Sto cercando di output dei dati in modo ho il seguente formato:

Array: 7 2 5 -3 3 6 -4 1

La nostra matrice è difficile codificato, e la nostra lunghezza della matrice è predeterminato. Ho provato a venire con un ciclo per stamparlo in modo efficiente, ma trattare con il lw derivato dall'utilizzo di un registro è stato un problema.
Sono venuto su con il seguente codice per codificare la mia uscita, ma ho ancora un altro array ho bisogno di stampare, e questo sembra proprio come sta riprendendo modo di molto spazio. Il mio codice è completamente funzionale, ma è solo un pasticcio! Qualcuno mi può dare consigli per ripulirlo / refactoring?
La matrice è memorizzato in $a0/$s0, la dimensione della matrice è memorizzato in $a1/$s1

la $a0, output1 # print the "Array: " string
li $v0, 4
syscall

# Huge Oversized Print Statement to print out the original Array: 
li $v0, 1 # print the array
lw $a0, 0($s0)
syscall
la $a0, space #print the space between elements
li $v0, 4
syscall
li $v0, 1
lw $a0, 4($s0)
syscall
la $a0, space #print the space between elements
li $v0, 4
syscall
lw $a0, 8($s0)
li $v0, 1
syscall
la $a0, space #print the space between elements
li $v0, 4
syscall
lw $a0, 12($s0)
li $v0, 1
syscall
la $a0, space #print the space between elements
li $v0, 4
syscall
lw $a0, 16($s0)
li $v0, 1
syscall
la $a0, space #print the space between elements
li $v0, 4
syscall
lw $a0, 20($s0)
li $v0, 1
syscall
la $a0, space #print the space between elements
li $v0, 4
syscall
lw $a0, 24($s0)
li $v0, 1
syscall
la $a0, space #print the space between elements
li $v0, 4
syscall
lw $a0, 28($s0)
li $v0, 1
syscall

Questo è un progetto compiti a casa e ho davvero voglia di comprendere appieno un modo più pulito per stampare array, non sto cercando di plagiare. Suggerimenti su come scrivere il loop sono molto apprezzate, io non sto cercando qualcuno che mi dia il codice.

È stato utile?

Soluzione

Potrebbe essere utile per incrementare $s0 con addi invece di cambiare manualmente l'offset -. In questo modo si sta utilizzando sempre lw 0($s0)

Modifica: Suppongo che dovrei aggiungere che sei stato l'incremento $s0 all'interno di un ciclo (uso j per il ciclo)

.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top