Чтение и печать массива в MIPS - PullRequest
0 голосов
/ 17 января 2019

Я должен написать программу на MIPS (я использую MARS) для чтения и печати массива целых чисел. Единственная загвоздка в том, что консоль должна выглядеть примерно так:

массив отображения:
п = 5
v [0] = 1
v [1] = 10
v [2] = 3
v [3] = 11
v [4] = 100
Массив: 1,10,3,11,100.

Предполагается, что консоль будет писать части слева от "=", а пользователь - значения (те, что справа). Моя проблема в том, что я не могу хранить значения массива или, по крайней мере, отображать их, и я просто получаю несколько квадратов.
Моя выглядит так:

массив отображения:
п = 5
v [0] = 1
v [1] = 10 * * тысяча двадцать-одны v [2] = 3 * * тысяча двадцать-два v [3] = 11 * 1 023 * v [4] = 100
массив: - некоторые квадраты

(я также добавил тест в цикл, где я читаю массив, чтобы проверить, хорошо ли читаются целые числа, поэтому я тоже пытаюсь их там распечатать)

.data 

array:        .space 40
display_array:   .asciiz"display array:"
n1:           .asciiz"\n n="
prompt1:          .asciiz"\nv["
prompt2:          .asciiz"]="
display:          .asciiz "\n array:"
iterator:     .word 0

.text
main:
#initial
li $t0,0
la $t2,array
lw $t1,iterator
li $v0,4
la $a0,display_array
syscall
#display "n="
li $v0,4
la $a0,n1
syscall
#read n
li $v0,5
syscall
#move n in t1
move $t1,$v0
for:
    bge $t0,$t1,end_for #checking if I is smaller than n
    sll $t3,$t0,2   #t3=4*I
    addu $t3,$t3,$t2 #Adding to t3 t3 and the address of the array
    li $v0,4
    la $a0,prompt1
    syscall      #Prints v[
    li $v0,1
    move $a0,$t0
    syscall     #Prints i
    li $v0,4
    la $a0,prompt2
    syscall     #Prints ]=
    li $v0,5
    syscall     #reads value
    sw $v0,0($t3)   #here's the problem, should store the value in t3
    li $v0,4
    la  $a0,0($t3)
    syscall
    addi $t0,$t0,1  #i++;
j for
end_for:
#Display Array
li $v0,4
la $a0,display 
syscall
#reinitialize i with 0
move $t0,$zero
for1:
    bge $t0,$t1,end_for1
    sll $t3,$t0,2
    addu $t3,$t3,$t2
    li $v0,4
    la $a0,0($t3)  
    syscall     #display v[i]
    addi $t0,$t0,1
j for1
end_for1:
...