3.3. Les macros

Si vous préférez éviter les fonctions, vous pouvez toujours préserver une certaine lisibilité de votre code à l'aide des macros.

Contrairement aux fonctions, qui sont effectivement traduites comme telles dans le code binaire généré par le compilateur, les macros ne sont là que pour aider le programmeur à y voir plus clair, mais dans le code final on ne trouvera aucun appel. Leur code sera juste inséré à l'endroit des différentes références qui y auront été faites.

Notre programme coucou_func_asm.asm se transforme donc en :

Exemple coucou_func_asm.asm


	%macro write_screen 2
	        mov eax,4
	        mov ebx,1
	        mov ecx,%1
	        mov edx,%2
	        int 80h
	%endmacro
	       
	section .text
	        global _start
	               
	_start:
	        write_screen msg,msg_len
	       
	        mov eax,1
	        int 80h
	       
	section .data
	        msg db "coucou",0x0A
	        msg_len equ $ - msg
	

On voit que la définition d'une macro est toute simple. Il suffit juste de spécifier derrière son nom le nombre d'arguments qu'elle attend. Pour ce qui est de l'appel, on dirait presque un langage évolué :-)

Si vous regardez la taille du code généré, elle est presque équivalente à la taille de notre coucou_asm.asm de la Section 1.3, mais avec l'appel en plus.