Mips存储并从阵列打印

时间:2017-10-22 23:04:56

标签: arrays loops debugging mips

我是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

1 个答案:

答案 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
相关问题