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