如何在GNU ARM汇编器中为寄存器赋予不同的名称



我有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

问题:

  • 可以更改名称吗?
  • 如果没有,我可以使用C的前身吗?

为寄存器创建别名,使用.req:

W .req r2
...
add W, IP, #4

不能重命名寄存器

要使用预处理器,您需要使用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扩展名(列在这里)。我找不到像GCC的-x这样的开关

最新更新