Помещение ассемблерного кода в макрос создает неизвестный токен в ошибке выражения - PullRequest
0 голосов
/ 14 сентября 2018

Итак, я создал Quine в Assembly. И хотел поместить части кода в макрос. Однако, как только я это сделаю, я получу предупреждение:

создание экземпляра: 9: 6: ошибка: неизвестный токен в выражении мов,% rxx

Grace.s: 28: 1: примечание: в процессе создания макроса notmain (х)

Вот код, о котором идет речь, с макросом (Получает ошибку)

.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
...