在MIPS中读取和打印阵列

时间:2019-01-17 12:35:43

标签: assembly mips mars-simulator qtspim

我应该用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:

0 个答案:

没有答案