Я хочу объявить следующий макрос в моем файле 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
, я получаю следующие ошибки:
$ 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