Nasm:Macros没有扩展为操作指令

时间:2015-03-08 10:01:39

标签: assembly macros nasm

我为这样的鼻子写了一小段装配:

%macro register 1
    %if %1 = 0
        rax
    %elif %1 = 1
        rbx
    %elif %1 = 2
        rcx
    %endif
%endmacro

add register(1), register(2)

我希望评估为add rbx, rcx

但是,nasm -E test.asm会返回此值,表示未评估宏:

%line 10+1 test.asm

add register(1), register(2)

将其与此代码进行比较:

%macro register 1
    %if %1 = 0
        rax
    %elif %1 = 1
        rbx
    %elif %1 = 2
        rcx
    %endif
%endmacro

register(1)

转化为

%line 10+1 test.asm

rbx

为何与众不同?如何在第一个片段中实现我的期望?

1 个答案:

答案 0 :(得分:2)

您需要使用单行宏,因为它们的扩展方式不同:

%define register_1 rax
%define register_2 rbx
%define register_3 rcx
%define register(x) register_ %+ x

add register(1), register(2)
$ nasm -E t4.asm
%line 1+1 t4.asm

%line 6+1 t4.asm

add rax, rbx