私は現在、アセンブリ言語、特に GNU アセンブラー、IA-32 (x86) の AT&T 構文でのマクロの概念を理解しようとしています。私の大学のスライドには次のように書かれています。
# How to define a macro:
.macro write string
movl string, %esi
call printstr
.endm
# How to use a macro:
write aString
しかし、これは私にはうまくいきません。コードのコンパイルにgccを使用しています。
.data
msg: .string "The result is %d.\n"
.text
.global main
.macro add_3 n
movl n, %eax
addl $3, %eax
.endm
main:
add_3 $39
pushl %eax
pushl $msg
call printf
popl %eax
popl %eax
movl $1, %eax
int $0x80
これをコンパイルしようとすると、次のエラーが発生します。
undefined reference to `n'
私は正確に何を間違っていますか?