IF ELSE语句操作数

时间:2020-10-13 02:30:04

标签: assembly arm keil thumb

我有一个非常简单的IF ELIF ELSE ENDIF语句来检查r0中的值是否与其他值相比。汇编后,代码始终会引发以下错误:

main.s(25): error: A1198E: Unknown operand
main.s(27): error: A1198E: Unknown operand

我认为问题可能与=<=>=无关,实际上不是可以在IF语句中起作用的操作数,而是基于文档在他们的网站上,=应该可以正常工作。代码如下:

       AREA    |.text|, CODE, READONLY, ALIGN=2
       THUMB
       EXPORT  Start
NEWVERSION dcw 2
Start
        mov r1, #21
        bl Price

loop   B    loop

Price 
            IF {[r1]! <= #13}
                mov r0, #6
            ELIF {[r1]! >= #65}
                mov r0, #7
            ELSE
                mov r0, #8
            ENDIF
            

       ALIGN      ; make sure the end of this section is aligned
       END        ; end of file

我知道我将寄存器与文字进行了比较,但是当[r0]!被某些立即值(例如#12)替换时,代码会引发此错误。关于如何在Thumb中使用IF ELSE语句似乎没有太多信息,我几乎开始质疑是否存在幕后原因,因为大多数示例都将其分支到子例程或使用IT指令。

1 个答案:

答案 0 :(得分:1)

根据to the documentation

IFENDIF结合使用,并可选地与ELSE结合使用,以仅在指定条件下进行汇编或执行操作。

这些不是控制程序流程的逻辑语句,而是对汇编器的指令,这些指令可根据例如为特定体系结构构建而包含或排除代码。

如果您熟悉C,这些语句就像#ifdef预处理程序指令,而不是if()程序流语句。

相关问题