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

Assembly 在MASM中的宏中使用本地标签的问题,assembly,macros,x86,masm,Assembly,Macros,X86,Masm,我要写一个宏,它需要E,NE,a,B。。。作为参数和单个命令,即mov eax,ebx,如果前面的cmp操作设置的条件为真,则将执行该命令 示例调用如下所示 cmp bx,20 mDoIf E,<call Dumpregs> 任何帮助都将不胜感激。多谢各位 试试这个: mDoIf MACRO op, command LOCAL L1, L2 J&op short L1 jmp short L2 L1: call comma

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

示例调用如下所示

cmp bx,20
mDoIf E,<call Dumpregs>
任何帮助都将不胜感激。多谢各位

试试这个:

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

尝试左边缘对齐标签“true:”。抱歉,没有骰子。我想我应该提供一些我用来编译东西的信息。我正在使用Visual Studio 2012 professional和Kip Irvine针对x86处理器的汇编语言第6版中的irvine32.lib。在过去,标签缩进并没有让我感到悲伤,尽管我尝试过你的建议,看看它是否有效。非常感谢。在有关宏的章节中,他们没有提到使用short。你能解释一下为什么这样做有效,而不是我的为什么无效吗?此外,我刚刚对它进行了测试,只要在中包含第二个参数,并且它是一条有效的汇编指令,就可以使用L1:commandit,而不必使用
short
。您的问题是放错了位置的exitm。如果在标签之前,则当宏展开时,预处理器将不会“看到”标签。宏的许多用途之一是帮助减少键入,为什么要在宏参数中添加额外字符?同意,但我们接受任何有效的汇编指令,而不仅仅是调用。i、 如果作为参数传入,我应该能够执行mov eax,ebx。
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