アセンブラ開発でしばしば使われるm4マクロを使って
高級言語のように名前付き変数を実現する方法を紹介します。以下のコードはLinux GCC専用です。
define(`tmpcount',0)
define(`setVars',`ifelse($#,1,,eval($#%2),0,`dnl
define(`count$1',eval(tmpcount+$2)) dnl
define(`tmpcount',eval(tmpcount+$2)) dnl
define($1,`-count$1 (%ebp)') dnl
setVars(shift($@))',`setVars(shift($@))') dnl
')
上記のマクロを定義して、以下のように、setvarsマクロによって変数の宣言を行います。
hello: .string "hello!"
.global main
main:
pushl %ebp
movl %esp,%ebp
subl $8,%esp
setVars(var1,4,var2,4)
movl $1,var1
movl $2,var2
pushl $hello
call puts
leave
ret
setVarsマクロはsetVars(変数1の名前,変数1のバイト数,変数2の名前,変数2のバイト数,...)
といった具合に宣言を行います。