Эффективный способ печати MIPS Int Array - PullRequest
1 голос
/ 10 ноября 2009

Я работаю над домашним заданием, переводя программу на C, которую мы написали для MIPS. Мой вопрос касается общего кодирования MIPS, а не конкретных проблем проекта. Я столкнулся с проблемой печати моего вывода. У меня есть массив и выходная строка, объявленная так:

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

Я пытаюсь вывести данные, поэтому у меня следующий формат:

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

Наш массив жестко запрограммирован, а длина нашего массива предопределена. Я пытался придумать цикл для его эффективной распечатки, но проблема со смещением lw с использованием регистра была проблемой.
Я придумал следующий код, чтобы жестко закодировать мой вывод, но у меня все еще есть еще один массив, который мне нужно распечатать, и кажется, что он занимает много места. Мой код полностью функционален, но это просто беспорядок! Кто-нибудь может дать мне советы, как его очистить / переработать?
Массив хранится в $a0/$s0, размер массива хранится в $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

Это домашнее задание, и я действительно хочу полностью понять более чистый способ распечатки массивов, я не собираюсь заниматься плагиатом. Советы по написанию цикла очень приветствуются, я не ищу, чтобы кто-нибудь дал мне код.

1 Ответ

3 голосов
/ 10 ноября 2009

Может быть полезно увеличить $s0 на addi вместо ручного изменения смещения - таким образом, вы всегда используете lw 0($s0).

Редактировать: Полагаю, мне следует добавить, что вы увеличиваете $s0 внутри цикла (используйте j для цикла).

...