IF ELSE语句操作数



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

根据文档:

对于仅在指定条件下汇编或执行的指令或指令序列,可将IFENDIF一起使用,也可选择与ELSE一起使用。

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

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

最新更新