You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MIPS PLP回文检查器代码异常求助:所有输入均输出No

排查PLP MIPS回文检查程序全输出“No”的问题

以下是针对问题的具体排查方向和修正建议:

  • UART字符串接收有效性检查
    确认接收的字符串是否正确存储并添加了\0终止符。PLP的UART接收通常会带回车/换行符(\r/\n),如果未将这些字符替换为\0,后续的长度计算、字符比较会读取到无效内容,导致判断逻辑失效。可以通过内存调试工具查看字符串的实际存储内容,验证是否存在乱码或缺失终止符的情况。

  • 字符串长度计算逻辑校验
    检查长度计算函数的终止条件:如果错误地将'\n'而非'\0'作为终止判断,会导致长度计算错误,进而让首尾指针的定位出现偏差。
    错误示例:

    len_loop:
        lb $t0, 0($a0)
        beq $t0, '\n', len_exit  # 错误:应判断'\0'
        addi $v0, $v0, 1
        addi $a0, $a0, 1
        j len_loop
    

    修正:将终止符判断改为'\0',同时在UART接收完成后,把换行/回车符替换为'\0'。

  • 回文判断的指针定位错误
    验证首尾指针的初始化逻辑:尾指针应指向字符串的最后一个有效字符(即起始地址 + 长度 - 1),如果错误地指向了终止符(起始地址 + 长度),会导致第一次字符比较就和无效值对比,直接返回非回文。
    错误示例:

    add $t1, $a0, $v0  # $v0为字符串长度,此处尾指针指向'\0'
    

    修正:addi $t1, $a0, -1; add $t1, $t1, $v0

  • 回文循环终止条件错误
    检查循环终止逻辑:正确的条件应为“首指针小于尾指针时继续比较”,如果写成反向条件(比如gt而非lt),会直接跳过所有比较步骤,返回非回文结果。

  • 返回值判断逻辑反向
    确认主函数对回文判断函数返回值的处理:如果函数返回1表示是回文、0表示非回文,但主函数错误地写成beq $v0, 1, print_no,会导致所有情况都输出“No”。

  • 输出模块独立性验证
    直接调用输出“Yes”的函数,验证UART输出功能是否正常。如果无法输出“Yes”,说明输出模块本身存在问题,需要优先排查输出函数的实现逻辑。

内容的提问来源于stack exchange,提问作者stgiv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 00:15:49