我正在处理的代码以“X123”形式从用户处获取一个字符串(不限于3个字符),其中X可以是任何非数字字符,123可以是任何数字字符系列。然后代码剥离非数字,将数字部分转换为int,添加5,然后打印结果。
.data
msgerror: .asciiz "The string does not contain valid digits."
input: .space 9
open: .asciiz "Enter a string:\n"
close: .asciiz "The value +5 is:\n"
.text
.globl main
main:
li $v0, 4
la $a0, open
syscall
li $v0, 8
la $a0, input #read a string into a0
move $t0, $a0
syscall
li $t3,0
li $t4,9
la $t0, input #address of string
lbu $t1, 1($t0) #Get first digit of actual number
li $a1, 10 #Ascii of line feed
li $a0, 0 #accumulator
addi $t1,$t1,-48 #Convert from ASCII to digit
move $a2, $t1 #$a2=$t1 goto checkdigit
jal checkdigit
add $a0, $a0, $t1 #Accumulates
addi $t0, $t0, 1 #Advance string pointer
lbu $t1, ($t0) #Get next digit
buc1:
beq $t1, $a1, print #if $t1=10(linefeed) then print
addi $t1,$t1,-48 #Convert from ASCII to digit
move $a2, $t1 #$a2=$t1 goto checkdigit
jal checkdigit
mul $t2, $a0, 10 #Multiply by 10
add $a0, $t2, $t1 #Accumulates
addi $t0, $t0, 1 #Advance string pointer
lbu $t1, ($t0) #Get next digit
b buc1
print:
add $a0, $a0, 5
li $v0, 1
syscall
b end
checkdigit:
blt $a2, $t3, error
bgt $a2, $t4, error
jr $ra
error:
la $a0, msgerror
li $v0, 4 #print eror
syscall
end:
li $v0, 10 #end program
syscall
然而,我的代码最终会产生:
Enter a string:
x123
The value +5 is:
1128
(128是预期的)。
如何让其中一个重复的数字消失?我已尝试使用print语句将地址递增1,但似乎不能与其他任何内容一起使用/不符合预期。
li $v0,4
la $a0, aString
add $a0, $a0, 1
syscall
如果输入123,上面的代码段会生成23,但我无法将其应用于上述代码段。
也欢迎更简单的整体方法。 mips的新手,所以我几乎不认为我的那么好。
答案 0 :(得分:0)
看起来你读了第一个数字两次。
这部分:
<p:commandLink id="btn_pwdChange" onclick="PF('ctr_dlgPwdChange').show();"...
应改为:
li $t3,0
li $t4,9
la $t0, input #address of string
lbu $t1, 1($t0) #Get first digit of actual number