[Solved] How to declare local variables in macro asm of gas like decalaring it in macro asm with %local in macro asm of nasm or local in macro asm of masm?


gas is primarily intended as a compiler backend, not for human use. As such, it’s lacking some features, among others this one. You can of course try to make a macro to do this, something along these lines:

.intel_syntax noprefix
.globl main

.macro local head, tail:vararg
# assume dwords for simplicity
.set localsize, localsize + 4
.set \head, -localsize
.ifnb \tail
local \tail
.endif
.endm

main:
    .set localsize, 0
    local old_ax, old_dx
    enter localsize, 0
    mov [ebp+old_ax], ax
    mov [ebp+old_dx], dx
    leave
    ret

But in general you can just use the equates for stack offsets directly, such as:

main:
    .set old_ax, 4
    .set old_dx, 0
    sub esp, 8
    mov [esp+old_ax], ax
    mov [esp+old_dx], dx
    add esp, 8
    ret

1

solved How to declare local variables in macro asm of gas like decalaring it in macro asm with %local in macro asm of nasm or local in macro asm of masm?