我有一个非常简单的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()
程序流语句。