Formatting 使用MIPS解析和打印整数时出现的问题
我正在做一个家庭作业,我需要使用MIPS中的运行时堆栈计算一个括号内的数学问题,我遇到了一个小问题: 我已经到了试图从用户提供的输入中解析整数的地步。当它只处理一位数时,效果非常好,但当我处理两位数时,它给我带来了问题(我使用的是Syscall 4或print string函数)。例如,我输入77,它会给我“H”。所以我把系统调用切换到1,print integer命令,现在我得到了非常大的数字。有什么方法我可以完成我需要做的吗 我的代码到目前为止。忽略加法和减法,它们还没有实现。我觉得在我解决了这个问题之后,这些应该很容易介绍Formatting 使用MIPS解析和打印整数时出现的问题,formatting,integer,stack,mips,Formatting,Integer,Stack,Mips,我正在做一个家庭作业,我需要使用MIPS中的运行时堆栈计算一个括号内的数学问题,我遇到了一个小问题: 我已经到了试图从用户提供的输入中解析整数的地步。当它只处理一位数时,效果非常好,但当我处理两位数时,它给我带来了问题(我使用的是Syscall 4或print string函数)。例如,我输入77,它会给我“H”。所以我把系统调用切换到1,print integer命令,现在我得到了非常大的数字。有什么方法我可以完成我需要做的吗 我的代码到目前为止。忽略加法和减法,它们还没有实现。我觉得在我解决
.data
Welcome: .asciiz "\nCalculate a Fully Parenthesized Expression.\n"
promptExpr: .asciiz "Enter the expression: "
bufExpr: .space 200
.text
.globl main
main:
la $a0, Welcome
li $v0, 4
syscall
la $a0, promptExpr
li $v0, 4
syscall
li $v0, 8
la $a0, bufExpr
li $a1, 200
syscall
li $t0, 0
subu $sp, $sp, 4
sw $t0, ($sp)
li $t1, 0
Loop: lb $t0, bufExpr($t1)
beq $t0, 10, endProg
beq $t0, 45, negCheck
bgt $t0, 47, num
beq $t0, 41, calc
bne $t0, 32, push
addi $t1, $t1, 1
j Loop
endProg:
li $t1, 0
la $a0, ($sp)
li $v0, 1
syscall
li $v0, 10
syscall
num:
move $t2, $t0
addi $t1, $t1, 1
lb $t0, bufExpr($t1)
bgt $t0, 47, collect
subu $sp, $sp, 4
sw $t2, ($sp)
addu $t1, $t1, 1
j Loop
collect:
# collects the entire integer by multiplying the current amount by ten
# and adding the next digit.
li $t7, 10
mul $t2, $t2, $t7
addu $t2, $t2, $t0
addi $t1, $t1, 1
lb $t0, bufExpr($t1)
bgt $t0, 47, collect
subu $sp, $sp, 4
sw $t2, ($sp)
j Loop
push:
subu $sp, $sp, 4
sw $t0, ($sp)
addu $t1, $t1, 1
j Loop
negCheck:
calc:
lw $t4, ($sp)
addu $sp, $sp, 4
lw $t5, ($sp)
addu $sp, $sp, 4
move $t0, $t4
beq $t5, 40, push
lw $t6, ($sp)
addu $sp, $sp, 4
lw $t7, ($sp)
addu $sp, $sp, 4
beq $t5, 43, addMath
beq $t5, 45, subMath
addMath:
subMath:
对不起,如果我的代码有点乱,MIPS让我头疼
提前谢谢你 您需要在
num
/collect
例程中减去'0'
(十进制48
),以将输入字符串中的字符转换为0..9
范围内的值
否则,如果在提示下输入字符串12
,则会得到'1'*10+'2'
,即49*10+50
(=540)