ARM汇编宏中参数前添加反斜杠(\)的作用是什么?
ARM64汇编宏中参数前反斜杠()的作用解析
在GNU汇编器(GAS)的宏定义语法里,参数前的反斜杠是宏参数替换的必要语法标记,远不止“标识参数名称”这么简单,具体作用如下:
明确告知汇编器这是宏参数,需替换为实际传入值
汇编器默认会把代码里的标识符当成普通寄存器名、符号或内置指令。加反斜杠后,汇编器才会识别出这是宏定义时声明的参数,在展开宏时用调用者传入的实际值替换它。
比如你给出的代码里,当调用str_l x0, my_global_var, x1时,\tmp会被替换成x1,\sym替换成my_global_var,展开后得到adrp x1, my_global_var;如果去掉反斜杠写成adrp tmp, sym,汇编器会直接把tmp当成寄存器名(但ARM64没有这个寄存器)、sym当成未定义符号,直接报错。避免参数与后续字符的歧义,支持拼接场景
假设宏里需要把参数和固定后缀拼接,比如\sym_ptr,加反斜杠后,汇编器能准确识别sym是参数,替换后变成xxx_ptr(xxx是传入的符号名);如果不加反斜杠,汇编器会把sym_ptr当成一个完整的独立符号,完全无法识别参数。
总结:反斜杠是GAS宏语法里的参数替换触发标记,是让宏正常展开的必要语法,而非单纯的参数名称标识。
内容的提问来源于stack exchange,提问作者Yanel
相关产品推荐
相关产品推荐

