Я должен написать программу на 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: