Assembly 如何在程序集使用宏时避免名称冲突

Assembly 如何在程序集使用宏时避免名称冲突,assembly,x86,gnu-assembler,att,Assembly,X86,Gnu Assembler,Att,我想在我的common.h文件中声明以下宏: .macro HEX_NIBBLE reg //LOCAL letter, end cmp $10, \reg jae letter add $'0, \reg jmp end letter: /* 0x37 == 'A' - 10 */ add $0x37, \reg end: .endm 每当我在我的main.Scode中的多个位置调用上述内核时,我都会得到以下错误: $ as --32

我想在我的
common.h
文件中声明以下宏:

.macro HEX_NIBBLE reg
    //LOCAL letter, end
    cmp $10, \reg
    jae letter
    add $'0, \reg
    jmp end
letter:
    /* 0x37 == 'A' - 10 */
    add $0x37, \reg
end:
.endm
每当我在我的
main.S
code中的多个位置调用上述内核时,我都会得到以下错误:

$ as --32 -o main.o main.S -g
main.S: Assembler messages:
main.S:17: Error: symbol `letter' is already defined
main.S:17: Error: symbol `end' is already defined
main.S:17: Error: symbol `letter' is already defined
main.S:17: Error: symbol `end' is already defined
main.S:17: Error: symbol `letter' is already defined
main.S:17: Error: symbol `end' is already defined
我只想使用GNU汇编程序(GAS),不使用GCC。如何避免这些错误?对于这种情况是否有装配指令

main.S
对于这个例子可以采用任何形式,比如下面的代码:

.include "common.h"
BEGIN
    HEX_NIBBLE %ax
    HEX_NIBBLE %ax
    HEX_NIBBLE %ax
    HEX_NIBBLE %ax
    hlt

使用或re:hex:您可能对