我正在使用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
这本身可能不足以解决问题。您可以从我的Github页面here中获取整个项目。该项目位于mipscalc.asm中。
答案 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