【问题标题】:Reading and Printing User Entered MIPS Array读取和打印用户输入的 MIPS 阵列
【发布时间】:2016-09-30 15:42:40
【问题描述】:

所以我正在使用 MIPS 尝试读取用户输入的几个字符串,然后打印它们,但我没有得到我期望的行为。

我想接收 4 个字节的用户输入(基本上是 4 个字符)。在我的循环中,我使用字母“D”作为退出信号。问题是,无论我输入什么,当我稍后尝试打印第一个输入(甚至是第二个或第三个)时,我打印出来的只是用于退出的字母“D”(应该是数组的最后一个值吗?)。

.data
 mem: .space 256 #256 bytes of space for input
 inst .space 5
.text 

la $s1, mem #s1 used to take input
la $s2, 0($s1) #Pointer to base address of memory

jal readLoop #Read input loop 

lw $a0, 0($s2) #Attempt to read very first saved input
li $v0, 4
syscall

li $v0, 10 #End program 
syscall

readLoop:

li $v0, 8 #read string
la $a0, inst #location of input memory
addi $a1, $zero, 5 #length of buffer
syscall

lb $t2,($a0) #used to exit loop

sw $a0, 0($s1) #store input into memory
addi $s1, $s1, 4 #increment memory by 4 bytes

li $t1, 'D'
bne $t2, $t1, readLoop #exit loop on input of a 'D'

jr $ra

我已经检查了输入时的输入,甚至在保存后在数组中时也是如此。看来我的印刷品是问题,但我很容易出错。有什么想法吗?

【问题讨论】:

  • 您是在文本编辑器还是 ide 中编程?
  • 正在火星上进行编程。好点,抱歉忘记了。
  • 是的,有时它可以是 IDE,您也可以使用 IDE 查看我认为是否正在存储数据或您的逻辑是否混乱的寄存器。
  • 这不可能是整个程序。您指的是您向我们展示的代码中不存在的标签inst。在任何情况下,您都将读取的每个字符串的内容存储在同一位置 (inst),包括最后的字符串 "D",这就是您最终要打印的内容。
  • 忘记在开头包含inst标签,但它是一个简单的内存空间声明。 @Michael 不会 sw $a0, 0($s1) 行将 inst 的内容保存到 $s1 中,这是一个 256 字节的数组(由标签 mem 声明)。然后,将$s1 增加四应该得到数组中的下一个空间,对吧?

标签: arrays mips


【解决方案1】:

修复相当简单。我没有将用户输入存储到单独的内存位置,然后将该位置放入我的数组中,而是将用户输入直接存储到我的数组中。请参阅下面的代码更改。

.data
 mem: .space 256 #256 bytes of space for input
.text 

la $s1, mem #s1 used to take input

jal readLoop #Read input loop 

la $a0, mem #Attempt to read very first saved input
li $v0, 4
syscall

li $v0, 10 #End program 
syscall

readLoop:

li $v0, 8 #read string
la $a0, mem #set user input as memory location
addi $a1, $zero, 5 #length of buffer
syscall

lb $t2,($a0) #used to exit loop

addi $s1, $s1, 4 #increment memory by 4 bytes

li $t1, 'D'
bne $t2, $t1, readLoop #exit loop on input of a 'D'

jr $ra

【讨论】:

    猜你喜欢
    • 2023-03-28
    • 1970-01-01
    • 2012-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多