我想在汇编语言中使用比较语句和用户输入。在我接受用户输入后,它将比较语句并执行任务。但是,不管结果如何,它将只读取第一个比较语句并执行任务,即使它不符合条件。
bl _inputFunc
cmp r1, #1
beq _redLight
cmp r1, #2
beq _greenLight
cmp r1, #3
beq _offLight
_redLight:
GPIOWrite pin17, high
bl _inputFunc
_greenLight:
GPIOWrite pin18, high
bl _inputFunc
_offLight:
GPIOWrite pin17, low
GPIOWrite pin18, low
bl _inputFunc
1条答案
按热度按时间jrcvhitl1#
在机器代码中,在任何一条不是分支的指令之后,继续执行存储器中的下一条指令。这包括没有被采用的条件分支。在指令之间插入标签并不改变这一点。标签不是函数或块,在标签的“末尾”没有隐含的“返回”或任何类似的东西。事实上,标签没有“结束”这回事。
不要试图从
if/else
、while
或switch
等更高级别的结构来考虑汇编,至少不是直接的只有分支(相当于goto ...
)和条件分支(if (cond) goto ...
)。任何更高级别的抽象都由您根据这些构建块来实现。关于编程时不要使用goto
的所有经验教训都已过时;在程序集中,除了goto
之外,没有其他内容。假设这个程序应该是一个无限循环,我会把它写为
我去掉了您的额外缩进,这似乎会造成汇编是块结构语言的误解。它们也可能只是分支回到已经有对它调用的
_top
。我保留了用下划线作为标签命名的惯例,但在独立程序中通常不需要这样做,您可以直接将它们命名为
top
、redLight
等。