Помещение кода сборки в макрос создает неизвестный токен в ошибке выражения
Итак, я создал Quine в Ассамблее. И хотел поместить части кода в макрос. Однако, как только я это сделаю, я получу предупреждение:
создание экземпляра:9:6: ошибка: неизвестный токен в выражении mov,% rcx
Grace.s: 28: 1: примечание: в то время как в макросе не существует (x)
Вот этот код с макросом (Получает ошибку)
.macro nomain
_main:
push %rbp
mov %rsp, %rbp
lea name(%rip), %rdi
lea write(%rip), %rsi
call _fopen
mov %rax, %rdi
mov $10, %rdx
mov $9, %rcx
mov $34, %r8
lea quine(%rip), %r9
lea quine(%rip), %rsi
call _fprintf
leave
ret
.endmacro
.data
quine: .string ".data%1$cquine: .string %3$c%4$s%3$c%1$cname: .string %3$cGrace_kid.s%3$c%1$cwrite: .string %3$cw%3$c%1$c%1$c.text%1$c.globl _main%1$c#main function%1$c_main:%1$c%2$cpush %%rbp%1$c%2$cmov %%rsp, %%rbp%1$c%2$clea name(%%rip), %%rdi%1$c%2$clea write(%%rip), %%rsi%1$c%2$ccall _fopen%1$c%2$cmov %%rax, %%rdi%1$c%2$cmov $10, %%rdx%1$c%2$cmov $9, %%rcx%1$c%2$cmov $34, %%r8%1$c%2$clea quine(%%rip), %%r9%1$c%2$clea quine(%%rip), %%rsi%1$c%2$ccall _fprintf%1$c%2$cleave%1$c%2$cret%1$c"
name: .string "Grace_kid.s"
write: .string "w"
.text
.globl _main
#main function
nomain
и без макроса (Работы)
.data
quine: .string ".data%1$cquine: .string %3$c%4$s%3$c%1$cname: .string %3$cGrace_kid.s%3$c%1$cwrite: .string %3$cw%3$c%1$c%1$c.text%1$c.globl _main%1$c#main function%1$c_main:%1$c%2$cpush %%rbp%1$c%2$cmov %%rsp, %%rbp%1$c%2$clea name(%%rip), %%rdi%1$c%2$clea write(%%rip), %%rsi%1$c%2$ccall _fopen%1$c%2$cmov %%rax, %%rdi%1$c%2$cmov $10, %%rdx%1$c%2$cmov $9, %%rcx%1$c%2$cmov $34, %%r8%1$c%2$clea quine(%%rip), %%r9%1$c%2$clea quine(%%rip), %%rsi%1$c%2$ccall _fprintf%1$c%2$cleave%1$c%2$cret%1$c"
name: .string "Grace_kid.s"
write: .string "w"
.text
.globl _main
#main function
_main:
push %rbp
mov %rsp, %rbp
lea name(%rip), %rdi
lea write(%rip), %rsi
call _fopen
mov %rax, %rdi
mov $10, %rdx
mov $9, %rcx
mov $34, %r8
lea quine(%rip), %r9
lea quine(%rip), %rsi
call _fprintf
leave
ret