Я работаю над калькулятором в MIPS, который может поддерживать длинные целые числа.Вычисления заканчиваются хорошо, однако, когда я пытаюсь напечатать результат, системный вызов для печати строки фактически ничего не печатает.Результат заканчивается печатью после того, как система зацикливается, и выполняется системный вызов для первого запроса.Когда я отлаживаю его и иду шаг за шагом, это показывает, что система доходит до строки исполнения, однако после ее выполнения ничего не происходит.
У меня возникли некоторые проблемы с определением причинЭто.Я думаю, что это связано с моей процедурой getInput, где я читаю строку.
Вот процедуры, которые, я думаю, могут быть проблемой.
#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
DisplayNumb:
#Procedure: DisplayNumb
#Displays a message to the user followed by a numerical value
#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 the result value is stored
displayNumb:
#PRINT STRING
li $v0, 4 #Load print string syscall
syscall #Execute
#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 RESULT BINARY
move $a0, $a1 #Load pointer of result to be converted in $a0
la $a1, buffer #Load pointer of result buffer for holding string to be printed in $a1
jal BinToDecAsc #Convert
#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
#PRINT RESULT
la $a0, buffer #Copy result into $a0
li $v0, 4 #Load print string syscall
syscall #Execute <-- RUNS BUT NOTHING PRINTS
jr $ra #Return
Этой информации может быть недостаточно для самостоятельного решения проблемы.Вы можете взять весь проект с моей страницы Github здесь .Проект находится в mipscalc.asm.