Macros in assembly are a powerful way to reuse code without manually duplicating it. They allow you to define common patterns or sequences of instructions that can be inserted wherever needed in the code.
In assembly, macros are defined with the %macro directive and invoked with the % symbol:
%macro print_message 2
mov eax, 4 ; sys_write
mov ebx, 1 ; file descriptor (stdout)
mov ecx, %1 ; message
mov edx, %2 ; length
int 0x80 ; make the system call
%endmacro
This example uses a macro to print messages:
section .data
msg1 db 'Hello, world!', 0xA
msg1_len equ $ - msg1
section .text
global _start
_start:
print_message msg1, msg1_len ; Use the print_message macro
; Exit system call
mov eax, 1 ; sys_exit
xor ebx, ebx ; Return code 0
int 0x80