在GNU汇编程序(v。2.31.1)中,我想将.equ(或.set)设置的符号传递给宏。以ARM为例,我想将整数符号转换为字符串:
.equ WIDTH, 100
.macro numToString label, num
\label :
.asciz "\num"
.equ \label\()Len, .-\label
.endm
numToString xyzWidthStr, WIDTH
但是,这会导致以空终止的字符串“ WIDTH”而不是“ 100”的标签为“ xyzWidthStr”。有没有一种方法可以在使用宏之前强制宏对其进行评估/替代?
是否有一种方法可以强制宏在使用参数之前对其进行求值/替换?
您可以在需要时使用C预处理程序来解决它
#define WIDTH 100
与arm-gcc组装(不是arm-as
)。如果文件扩展名是.S
或.sx
,则gcc将在汇编文件之前调用C预处理程序。如果您使用其他扩展名,则可以
arm-gcc -x assembler-with-cpp code.asm <options>
如果要查看中间的预处理代码,请将-save-temps
添加到<options>
。 gcc将其保存到code.s
。