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