String 查找字符串mips程序集中的空格数

String 查找字符串mips程序集中的空格数,string,assembly,spaces,mips32,String,Assembly,Spaces,Mips32,所以我在.data中有一个字符串。字符串是“e8 e r e r c e r g”。 我想找到字符串中的空格数。它存储在$a0中,但存储在不同的文件中,我正在编写查找空格的方法的文件和带有字符串的文件都使用“include”功能链接 即使我认为这个想法是正确的,我的代码也不起作用 到目前为止我的代码 lb $s1, ($a0) la $s2 ' ' li $v0, 0 findNumSpaces: beq $s1, $zero, printNumSpaces beq $s1, $s2, is

所以我在.data中有一个字符串。字符串是“e8 e r e r c e r g”。 我想找到字符串中的空格数。它存储在$a0中,但存储在不同的文件中,我正在编写查找空格的方法的文件和带有字符串的文件都使用“include”功能链接

即使我认为这个想法是正确的,我的代码也不起作用

到目前为止我的代码

lb $s1, ($a0)
la $s2 ' ' 
li $v0, 0

findNumSpaces:
beq $s1, $zero, printNumSpaces
beq $s1, $s2, isSpace
addi $a0, $a0, 1
lb $s1, ($a0)
j findNumSpaces


isSpace:
addi $v0, $v0, 1
addi $a0, $a0, 1
lb $s1, ($a0)
j findNumSpaces

printNumSpaces:
li $v0, 1
syscall
  • 当它找到一个空格时,它不会增加$a0或加载$s1的新值
  • 它不会检查字符串的结尾,因此它将永远循环

  • 行addi$a0,$a0,1lb$s1,($a0)不这样做吗?它这样做了,但是当它找到一个空格时,它跳过它,然后它不返回,它返回到循环的开始。现在呢?
    la$s2'
    是“加载地址…空格字符”。。。甚至不应该编译,但是MARS有一个仁慈的汇编程序,它忽略了稍微错误的语法,并从中产生了一些东西。如果希望在
    s2
    中使用值32,则应为
    li$s2',
    。然后,
    printNumSpaces
    将覆盖
    v0
    中的值(其中是空格计数)。在每条指令上使用调试器和单步,在每一步之后慢慢检查CPU状态,这样的错误应该是显而易见的(就在syscall之前,您将突然丢失计数器值);它使答案无效。如果你想在下面添加一个修订版本,那仍然是在编辑中问一个新问题。使用调试器检查您的修复程序,如果它有效,请将其作为答案发布。