MIPS字符串控件不能正常工作

时间:2016-08-30 09:14:56

标签: mips

大家好朋友:)我编写了一个练习但我发现了一个问题,在两天内我找不到解决方案......我解释得更好,这是我的代码:

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+字符(见下面了解更好)

控制示例:

  • 输入:hello(单击return)ERROR:字符串大于40个字符
  • 输入:h ello(点击返回)错误:字符串大于40个字符

欢迎任何帮助或建议:)

谢谢大家,祝你有愉快的一天!

P.S。 抱歉我的英文不好

2 个答案:

答案 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。 输出结果与练习中提出的输出一致;)