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

汇编语言中CMP语句与用户输入分支执行异常问题咨询

问题根源

你的汇编代码之所以不管输入值是什么,都会执行第一个分支甚至连带运行后续分支,核心是两个问题:

  1. 分支未添加终止跳转:每个分支执行完毕后没有跳转指令,CPU会自动按内存顺序向下执行。比如跳转到_redLight完成操作后,会直接进入_greenLight的代码块,接着再执行_offLight的逻辑。
  2. 无无效输入处理:如果输入值不是1、2、3,三次cmp都不会触发beq跳转,程序会直接从cmp之后顺次进入_redLight分支,完全没有被拦截。
修复后的代码

给每个分支添加跳转指令,确保执行完当前分支后回到输入判断的起点,同时补上无效输入的处理逻辑:

loop_start:
    bl _inputFunc

    cmp r1, #1
    beq _redLight
    cmp r1, #2
    beq _greenLight
    cmp r1, #3
    beq _offLight
    ; 输入不是1/2/3,直接回到输入步骤
    b loop_start

_redLight:
    GPIOWrite   pin17, high
    bl _inputFunc
    b loop_start ; 完成操作后跳回判断入口

_greenLight:
    GPIOWrite   pin18, high
    bl _inputFunc
    b loop_start ; 完成操作后跳回判断入口

_offLight:
    GPIOWrite   pin17, low
    GPIOWrite   pin18, low
    bl _inputFunc
    b loop_start ; 完成操作后跳回判断入口
关键修改说明
  • 新增loop_start标签作为循环入口,确保每次操作完成后都能重新获取输入并执行判断
  • 每个分支末尾添加b loop_start,强制跳回循环入口,彻底避免CPU顺次执行后续分支
  • 补充无效输入的处理逻辑,防止输入不符合要求时直接进入_redLight分支

额外提示:如果你的需求是一次输入对应一次操作,分支内的bl _inputFunc属于重复调用——可以将输入函数只放在loop_start开头,分支内完成灯光操作后直接跳回loop_start即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 00:05:25