获取整数的用户输入并存储在数组中

时间:2014-02-01 04:57:31

标签: assembly architecture mips

我正在尝试向用户询问他们想要输入的整数数量的输入,然后循环显示该数量。此外,我想将每个值提供给一个数组,但我遇到一个问题,检查循环是否继续,直到用户输入的sentinel值。 li不接受两个寄存器作为参数,还有其他方法可以做到吗?

.data

    arr1:
         .word 0:50 #allocate space for 50 integers (4-bits)
    msg:
         .asciiz "Give me the quantity of numbers:\n"

.text

 main:
         #print message
         li $v0, 4
         la $a0, msg    
         syscall

         #read int
         li $v0, 5
         syscall

         #store initial loop value
         move $t0, $v0

         li $8, 0
         li $13, $t0 #sentinel value for loop
         for:
              bge $8, $13, end_for #end the loop when you reach then number entered earlier

              #keep reading numbers
              li $v0, 5
              syscall

              move $t1, $v0
              la $9, arr1 #base address for array
              mul $10, $8, 4 #offset of 4 bytes
              add $11, $10, $9 #address for new element
              li $12, $t1
              sw $12, ($11) #save element at address
              add $8, $8, 1 #increment loop
              b for
          end_for:

1 个答案:

答案 0 :(得分:1)

li代表“立即加载”,因此它总是需要一个寄存器和一个立即值。 要将一个寄存器值复制到另一个寄存器,请使用move destination source