Pergunta

Eu estou trabalhando em uma tarefa de casa traduzir um programa em C que escreveu para MIPS. Minha pergunta é sobre MIPS gerais de codificação e não projetar questões específicas embora. Eu correr em um problema com a impressão minha saída. Eu tenho uma string array e saída declarada como tal:

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

Eu estou tentando enviar os dados, por isso tenho o seguinte formato:

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

Nossa matriz é codificado, e nossa comprimento da matriz é predeterminado. Eu tentei chegar a um loop para imprimi-lo de forma eficiente, mas lidar com o lw compensada através de um registo foi um problema.
Eu vim com o seguinte código para codificar a minha saída, mas ainda tenho outra matriz Eu preciso imprimir, e isso só parece que ele está ocupando maneira de muito espaço. Meu código é totalmente funcional, mas é apenas uma confusão! Alguém pode me dar dicas para limpá-lo / refatorar?
A matriz é armazenada no $a0/$s0, o tamanho da matriz é armazenada no $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 é um projeto de lição de casa e eu realmente quero entender completamente uma maneira mais limpa para imprimir matrizes, eu não estou olhando para plagiar. Dicas sobre como escrever o loop são muito apreciados, eu não estou procurando alguém para me dar o código.

Foi útil?

Solução

Pode ser útil para $s0 incremento com addi em vez de mudar manualmente o offset -. Dessa forma, você está sempre usando lw 0($s0)

Edit:. Acho que eu deveria acrescentar que você está sendo incrementado $s0 dentro de um (j uso para o loop) de loop

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top