Pregunta

Estoy trabajando en una tarea traducir un programa en C que escribimos a MIPS. Mi pregunta es acerca de la codificación general de MIPS y no proyecta cuestiones específicas sin embargo. Me he encontrado un problema con la impresión de mi salida. He una cadena matriz y la producción declarada como tal:

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

Estoy tratando de salida de los datos, así que tengo el siguiente formato:

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

Nuestra gama está codificado, y nuestra longitud de la matriz está predeterminado. He tratado de llegar a un bucle para imprimirlo eficiente, pero en relación con la lw de desplazarse utilizando un registro era un problema.
He llegado con el código siguiente para codificar mi salida, pero todavía tengo otra matriz que necesito para imprimir, y esto sólo parece como si estuviera tomando forma de mucho espacio. Mi código es completamente funcional, pero es un desastre! ¿Alguien puede darme consejos para limpiarlo / refactorearlo?
La matriz se almacena en $a0/$s0, el tamaño de la matriz se almacena en $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

Este es un proyecto de la tarea y realmente quiere entender plenamente una forma más limpia para imprimir las matrices, no estoy buscando a plagiar. Consejos sobre cómo escribir el bucle son muy apreciadas, no estoy buscando a alguien que me diera el código.

¿Fue útil?

Solución

Puede ser útil para incrementar $s0 con addi en lugar de cambiar manualmente el desplazamiento -. De esta manera siempre está utilizando lw 0($s0)

Editar: Supongo que debo añadir que estás siendo incrementando $s0 dentro de un bucle (j uso para el bucle)

.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top