assembly - 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指令。
解决方案
根据文档:
使用
IF
withENDIF
和可选 withELSE
,用于仅在指定条件下组装或执行的指令或指令序列。
这些不是控制程序流程的逻辑语句,而是对汇编程序的指令,以根据例如特定体系结构的构建来包含或排除代码。
如果您熟悉C
,这些语句就像#ifdef
预处理器指令,而不是if()
程序流语句。
推荐阅读
- python - 嵌套函数范围
- asp.net-core - 身份服务器 4:在 asp.net webform .NET 4.5 上获取访问令牌
- winforms - 在典型的 Windows 窗体中是否不需要“应用”按钮
- php - 怎么了,我想把图片文件上传后复制到我的其他目录,也输入到mysql数据库中
- javascript - 如何测试博客上呈现在其位置上的所有页面元素,其中图像随柏树而变化
- sql - 创建表格后如何在presto中显示评论?
- ionic4 - 如何在 ionic 5 中使用 LaunchNavigator?
- c# - 将一系列标签隐藏到文档中
- opencl - 如何在 GPU 上计划这种最小二乘计算?
- dataframe - 将 Spark DF 映射为 (row_number, column_number, value) 格式