【发布时间】:2020-11-01 11:21:33
【问题描述】:
我用谷歌搜索了它,但找不到任何东西,我是汇编新手,我有一个符号定义,我认为它等同于 C 的#define 语句。
FIRST EQU 0x20000480
在__main中,我想把这个0x20000480的值加载到R1寄存器中,所以我有如下代码,
LDR R1, FIRST
这给出了一个错误
main.s(65): error: A1150E: Bad symbol, not defined or external
如果我在 FIRST 前面插入一个“=”,
LDR R1, =FIRST
然后它构建得很好。
谁能在这里解释一下“=”运算符(如果是运算符)的用法吗?
【问题讨论】:
-
LDR R1, FIRST是从内存中加载的实际指令,LDR R1, =FIRST是由汇编器实现并加载地址的伪指令。 -
所以您正在尝试使用汇编语言进行编程,而没有汇编程序使用的语法的明确文档就在您的指尖?好像汇编语言编程还不够难。
-
程序集特定于工具(不是目标)。如果他们完全支持它,并非所有人都平等地处理这个伪指令。请注意,此主题已在此处多次介绍。提问前请先看。
-
@andymango 也许只有我一个人,但 ARM 组装是最简单的。鉴于
EQU指令,OP 似乎正在使用 Keil 或 ARM Development Studio。我也花了一段时间才习惯 GCC 汇编语法。 -
@old_timer 新手在搜索时通常甚至不知道正确的关键字。让我们不要那么苛刻。