masm 宏汇编内设计的宏内是否可使用循环

来源:百度知道 编辑:UC知道 时间:2024/07/04 17:45:21
例如:
××× MACRO
......
......
1LP: .....
......
JNZ LP1
......
ENDM
在使用masm编译上述程序时会显示multidefined LP1,是否表示宏定义内不可以使用这样的循环啊?麻烦各位啦。多谢多谢啊

这个不是循环的错,而是说LP1标号有多次定义。
程序中有其他地方也是用了LP1标号,或者所定义的宏多次使用,都可能出现这个错误。

解决方法1:使用@@标号。例子(寻找字串中最后一个非空格字符):
.....
@@:
cmp BYTE PTR [edi-1], 32
jne @F ; @F: 指本行向下最近的那个@@(向前,Forward)
dec edi
jmp @B ; @B:指本行向上最近的那个@@(向后,Backward)
@@:
.....

解决方法2: 将LP1标号说明为局部标号:
*** MACRO
LOCAL LP1
.....
LP1:
.....
JNZ LP1
.....
ENDM