我有tiva c TM4C123GH6PM,我刚刚安装了一个GNU ARM工具链。我想只在程序集中编程,因为我想为它构建FORTH系统,但是当我使用
时.equ W, r2 // working register
这给出了符号r2
add W, IP, #4
main.S(54): error: undefined symbol r2 used as an immediate value
然后我改为:
#define W r2
现在给出了
add W, IP, #4
main.S(55): error: undefined symbol W used as an immediate value
问题:
答案 0 :(得分:5)
要为注册创建别名,请使用.req
:
W .req r2
...
add W, IP, #4
答案 1 :(得分:2)
您无法重命名寄存器。
要使用预处理器,您需要使用GCC进行编译,而不是使用as
进行编译。除了直接使用arm-none-eabi-cpp
之外,还有两种方法:
.S
(大写)扩展名命名程序集文件,并使用GCC进行编译(例如arm-none-eabi-gcc -c foo.S -o foo.o
)。 小写 .s
扩展程序会跳过预处理。-x assembler-with-cpp
传递给GCC(例如arm-none-eabi-gcc -c -x assembler-with-cpp foo.bar -o foo.o
。使用-x assembler
代替跳过预处理。如果您使用Keil进行编译,请使用.sx
扩展名(列出here)。我找不到像GCC -x
那样的开关。