如何为GNU ARM汇编程序中的寄存器指定不同的名称?

时间:2016-09-18 05:55:02

标签: assembly arm c-preprocessor gnu preprocessor-directive

我有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前身吗?

2 个答案:

答案 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那样的开关。