MIPS:计算器打印字符串未通过syscall执行;一次计算后提示1不打印

时间:2018-10-08 23:24:44

标签: string assembly long-integer mips32

我正在使用MIPS中的计算器,该计算器可以支持长整数。计算最终结果很好,但是当我尝试打印结果时,用于打印字符串的syscall实际上不会打印任何内容。系统循环并执行第一个提示的syscall后,结果最终将被打印出来。当我调试它并逐步进行时,它表明系统确实到达了执行行,但是在执行之后什么也没发生。

我在确定造成问题的原因时遇到了一些麻烦。我认为这与读取字符串的getInput过程有关。

这是我认为可能是个问题的程序。

t

DisplayNumb:

#Procedure:  GetInput
#Displays a prompt to the user and then wait for a numerical input
#The users input will get stored to the (word) address pointed by $a1
#Input: $a0 points to the text string that will get displayed to the user
#Input: $a1 points to a word address in .data memory, where to store the input number
getInput:
    #PRINT STRING
    li      $v0, 4              #Load print string syscall
    syscall                    #Execute

    #READ INPUT
    move        $t0, $a1         #Save pointer
    li          $v0, 8          #Load read string input
    li          $a1, 80
    syscall                    #Execute
    move        $a1, $t0         #Reload pointer

    #SAVE RETURN TO STACK
    addi $sp, $sp, -4            #Subtract 4 to stack to prevent loss of memory
    sw $ra, 0($sp)               #Saves #ra on stack

    #CONVERT
    jal     DecAscToBin        #Jump to convert ascii to binary

    #LOAD RETURN FROM STACK
    lw $ra, 0($sp)               #Loads $ra on stack
    addi $sp, $sp, 4             #Add 4 to stack to prevent loss of memory

    jr      $ra             #Return

enter image description here

这本身可能不足以解决问题。您可以从我的Github页面here中获取整个项目。该项目位于mipscalc.asm中。

1 个答案:

答案 0 :(得分:0)

我知道了。问题是我正在使用提示1的字符串从用户读取字符串。如果我改用新的缓冲字符串读取输入内容,则可以解决此问题。

#READ INPUT
    move        $t0, $a1         #Save pointer
    la          $a0, buffer      #LOAD BUFFER STRING INSTEAD OF PROMPT STRING
    li          $v0, 8           #Load read string input
    li          $a1, 80
    syscall                      #Execute
    move        $a1, $t0         #Reload pointer