将变量值传递给宏

时间:2018-01-29 14:57:37

标签: assembly macros

如果我有一个名为的宏,例如test,我想将变量值传递给它,我应该怎么做? 例如:

test macro num
    ; ...
endm

我称之为:

test num
例如,

和num在数据段中定义为db。 我的问题是,这可能吗?为什么我这样做会出错?我甚至需要这样做吗?我只是在宏中访问num而不将其作为参数传递?

无论如何,谢谢。

编辑1:这是一个实际代码示例:

    ;... in the data segment i have car_fich defined like this
    car_fich    db    9
    ; ........................................................

fill_array macro car_fich
    mov ah, car_fich
    ; .. do other things
endm

Main proc

    fill_array car_fich

Main endp

1 个答案:

答案 0 :(得分:0)

我仍然猜测数据段car_fich与宏定义car_fich之间存在名称冲突。为什么你们两个都一样?

有些汇编程序使用符号的最新定义作为当前符号(这与<{3>}在高级语言中的使用根本不同)。

因此,在这种情况下,宏中的定义将覆盖数据段中的定义,实质上使后者不可见,从而产生错误(最有可能;感谢汇编程序它是,因为否则将更难调试)。

如果是这种情况,可以通过更改宏中的符号来检查:

    ;... in the data segment i have car_fich defined like this
    car_fich    db    9
    ; ........................................................

fill_array macro m_car_fich        ; changed symbol name
    mov ah, m_car_fich             ; changed symbol name
    ; .. do other things
endm

Main proc

    fill_array car_fich            ; refers to data segment variable

Main endp