我应该用MIPS(我使用MARS)编写一个程序来读取和打印整数数组。唯一的问题是控制台应该看起来像这样:
显示数组:
n = 5
v [0] = 1
v [1] = 10
v [2] = 3
v [3] = 11
v [4] = 100
数组为:1、10、3、11、100。
控制台应该在“ =”的左侧写入部分,而用户在写入值(在右侧写入部分)。
我的问题是我似乎无法存储数组的值,或者至少不能显示它们,而我只能得到一些正方形。
我的看起来像这样:
显示数组:
n = 5
v [0] = 1
v [1] = 10
v [2] = 3
v [3] = 11
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: