Assembly IF-ELSE语句操作数

Assembly IF-ELSE语句操作数,assembly,arm,keil,thumb,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,

我有一个非常简单的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指令。

根据:

将IF与ENDIF一起使用,也可以选择与ELSE一起使用,用于仅在指定条件下组装或执行的指令或指令序列

这些不是控制程序流的逻辑语句,而是指向汇编器的指令,用于根据特定体系结构的构建来包含或排除代码


如果您熟悉C,则这些语句类似于ifdef预处理器指令,而不是If程序流语句。

因此,只有在您知道执行时的结果时,这些语句才有价值?这是在运行thumb main时。处理If指令的过程,取决于表达式求值结果,IF..ENDIF块中的代码已写入或未写入输出main.o文件。@OffBeat Yes。这些指令是汇编时指令。它们用于条件汇编,而不是控制流。