在 MASM 的宏中使用本地标签的问题

Ale*_*son 6 macros x86 assembly masm

我要编写一个宏,它接受E,NE,A,B... 作为参数和单个命令,即mov eax,ebx如果前面的操作设置的条件cmp为真,则该命令将执行。

调用示例如下所示。

cmp bx,20
mDoIf E,<call Dumpregs>
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是,当我尝试使用以下定义进行编译时,出现两个错误之一。根据LOCAL定义,我得到一个Undefined Symbol Error: ??0000. 当我删除LOCAL定义时,出现错误:jump destination must specify a label

mDoIf MACRO op, command
    LOCAL true
    J&op true
    exitm
    true: 
        command
        exitm

endm
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激。谢谢。

Gun*_*ner 6

尝试这个:

mDoIf MACRO op, command
    LOCAL L1, L2

    J&op    short L1
    jmp     short L2

L1: 
    call command
L2:
    exitm
endm

.code
start:
    mov     eax, 1
    cmp     eax, 2
    mDoIf l, DumpRegs

    invoke  ExitProcess, 0
end start
Run Code Online (Sandbox Code Playgroud)