如何在GNU ARM汇编中为寄存器命名?

7

我有一块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前身进行更改?

我使用了带有 -x assembler-with-cpp 的 GCC,但无法让 KEIL 使用它,所以我转而使用 code-blocks,但是仍然无法将链接脚本与 code-blocks 结合起来!有什么想法吗? - I.Omar
2个回答

12
使用 .req 来为寄存器创建别名:
W .req r2
...
add W, IP, #4

太棒了。我正在使用那个汇编指令。谢谢你:) - I.Omar

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扩展名(在此处列出)。我找不到类似于GCC的-x开关。


非常感谢。我把它交给了Notlikethat,因为他的方法不使用前任,两种方法都起作用。再次感谢。 - I.Omar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接