MIPS汇编循环查找字符串空格:程序陷入循环无法退出
问题出在空格的比较方式上!
嘿,我一眼就瞅到你代码里的问题啦——你在比较的时候搞混了地址和实际字符值,这才导致循环永远跳不出去。
让我拆解下问题:
la $t1, space这条指令是把space这个字符串的内存地址加载到$t1里,而不是空格字符本身的ASCII值(32)。- 而
lb $a0, 0($t0)是从name里取出当前位置的字符ASCII值,你拿一个地址数值和字符数值做beq比较,这俩永远不可能相等,循环自然就死在里面了!
修复方案有两种,选哪种都行:
方案1:先把空格字符加载到$t1里
修改初始化部分,把space指向的字符读进$t1:
li $t0, 0 la $t0, name la $t1, space lb $t1, 0($t1) # 新增这行,把空格字符加载到$t1 # loop to find space loop2: lb $a0, 0($t0) #comparing char to space beq $a0, $t1, exit addi $t0, $t0, 1 j loop2 exit:
方案2:直接用空格的ASCII值比较
既然空格的ASCII是32,直接写数值进去更省事:
li $t0, 0 la $t0, name # loop to find space loop2: lb $a0, 0($t0) #comparing char to space (ASCII 32) beq $a0, 32, exit addi $t0, $t0, 1 j loop2 exit:
这样修改后,循环就能正确识别到空格字符,跳转到exit啦!
内容的提问来源于stack exchange,提问作者Samantha Hollensbe
相关产品推荐
相关产品推荐

