大家好朋友:)我编写了一个练习但我发现了一个问题,在两天内我找不到解决方案......我解释得更好,这是我的代码:
main:
#first message
la $a0, m1
li $v0, 4
syscall
#space in the stack
addi $sp, $sp, -41
#read the input
move $a0, $sp
li $v0,8
li $a1, 41
syscall
#bge $a0, 41, error
...
我的代码,读取40个字符(41个带字符串终结符)来计算字符串内的人声字母,如果我插入41个字符,则向我发送错误信息并重复菜单的标记和相对输入,其中是问题?如果我在没有控件的情况下使用此代码 - > bge $ a0,41,错误 - >一切正常,我可以插入1-40个字符有和没有空格,当我插入此控件时给我错误,我已经设置当字符串是40+字符(见下面了解更好)
控制示例:
欢迎任何帮助或建议:)
谢谢大家,祝你有愉快的一天!
P.S。 抱歉我的英文不好
答案 0 :(得分:0)
bge $a0, 41, error
在这里毫无意义。系统调用8不返回结果,它只是将字符存储到您提供的缓冲区中。如果要查找写入缓冲区的字符数,请遍历缓冲区,直到找到值为0的字节(或者可能是13 [回车])。
答案 1 :(得分:0)
朋友也许我已经解决了我的问题...这是我的解决方案我希望它很好
#Create two copies of the string, one for nectCh and another for contaVocali
move $t0, $a0
move $t2, $a0
nextCh:
# extract a character from the string
lb $t1, ($a0)
# check the end of the string, so if it is more than 40+1
# give me the error message and repeat the prompt and the input
beq $t1, $zero, error
#check the carriage return and go to the function
beq $t1, 10, contaVocali
#next character
addi $a0, $a0, 1
# repeat
j nextCh
像解决方案一样可以接受吗?
谢谢
P.S。 输出结果与练习中提出的输出一致;)