IF ELSE 语句操作数

IF ELSE Statements Operands

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

根据to the documentation

Use IF with ENDIF, and optionally with ELSE, for sequences of instructions or directives that are only to be assembled or acted on under a specified condition.

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

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