首页 > 解决方案 > 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. 似乎没有太多关于如何IF ELSE在 Thumb 中使用语句的信息,而且我几乎开始质疑是否存在幕后原因,因为大多数示例只是分支到代码的子例程或使用IT指令。

标签: assemblyarmkeilthumb

解决方案


根据文档

使用IFwithENDIF和可选 with ELSE,用于仅在指定条件下组装或执行的指令或指令序列。

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

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


推荐阅读