我是Mips的新手,需要一些帮助。我试图将5个用户输入字符串存储到一个数组中,然后按顺序打印出来。但我的代码打印数组的最后一个元素5次,而不是打印所有元素。我一直试图调试它,但到目前为止没有运气。
.data
open: .asciiz "Enter a series of 5 formulae:\n"
close: .asciiz "The values are:\n"
array: .space 100
line: .space 20
.text
main:
# print opening
li $v0, 4
la $a0, open
syscall
li $t0, 0
la $s0, array # set base of array
j loopinput
loopinput:
beq $t0, 20, print
li $v0, 8
la $a0, line
li $a1, 20
syscall
move $t1, $a0
sw $t1, 0($s0) # store word from line into array
addi $s0, $s0, 4
addi $t0, $t0, 4
j loopinput
print:
li $v0, 4 # print closing
la $a0, close
syscall
li $t0, 0
la $s1, array
loopoutput:
beq $t0, 20, end
lw $t1, 0($s1)
li $v0, 4
move $a0, $t1
syscall
addi $s1, $s1, 4
addi $t0, $t0, 4
j loopoutput
end:
li $v0, 10
syscall
答案 0 :(得分:0)
问题 #1:您选择在循环输入的 v0 中传递 8 而不是 5。5 用于读取整数。
问题#2:在
move $t0 $a0
在 loopinput 中应该是 move move $t0 $v0
,因为这是存储读取结果 syscall
的地方。
问题#3:我不明白你代码中 line 的用法,但我猜你用它来改变 line,因为你可以简单地声明一个字符串 "\n",然后在打印数组值后打印它.
问题 #4:在循环输出中,您在 $v0 中传递了 4 来打印字符串,您应该传递 1 来打印整数。
与下面附上的代码进行比较
.data
open: .asciiz "Enter a series of 5 formulae:\n"
close: .asciiz "The values are:\n"
array: .space 100
line: .space 20
lineChange: .asciiz "\n"
.text
main:
# print opening
li $v0, 4
la $a0, open
syscall
li $t0, 0
la $s0, array # set base of array
j loopinput
loopinput:
beq $t0, 20, print
li $v0, 5
syscall
la $a0, line
li $a1, 20
move $t1, $v0
sw $t1, 0($s0) # store word from line into array
addi $s0, $s0, 4
addi $t0, $t0, 4
j loopinput
print:
li $v0, 4 # print closing
la $a0, close
syscall
li $t0, 0
la $s1, array
loopoutput:
beq $t0, 20, end
lw $t1, 0($s1)
li $v0, 1
move $a0, $t1
syscall
li $v0, 4
la $a0, lineChange
syscall
addi $s1, $s1, 4
addi $t0, $t0, 4
j loopoutput
end:
li $v0, 10
syscall