LMAC MACRO P1,P2,L1
ANL A,P1
JZ L1
ORL A,P2
L1: MOV @R1,A
INC R1
ENDM
0000 792A MOV R1,#2AH
0002 7465 MOV A,#65H
0004 LMAC R3,#0F0H,R3ANDA0
+0004 5B ANL A,R3
+0005 6002 JZ R3ANDA0
+0007 44F0 ORL A,#0F0H
+0009 F7 R3ANDA0: MOV @R1,A
+000A 09 INC R1
000B 7423 MOV A,#23H
000D LMAC R5,#07H,R5ANDA0
+000D 5D ANL A,R5
+000E 6002 JZ R5ANDA0
+0010 4407 ORL A,#07H
+0012 F7 R5ANDA0: MOV @R1,A
+0013 09 INC R1
0014 00 NOP
0000 END
The Cybernetic Micro Systems 8051 Family Assembler, Version 3.03 Page 2
08-27-96
;%T Symbol Name Type Value
LMAC. . . . . . . . . . . . . . M 0000
R3ANDA0 . . . . . . . . . . . . L 0009
R5ANDA0 . . . . . . . . . . . . L 0012
;%Z
00 Errors (0000)
若在宏指令中使用标号,由于这些标号不是形参,所以不会被实参所替代。这样,在程序中多次引用是否会出现标号重复呢,这一点宏汇编程序已作了考虑,在作宏汇编时,汇编程序会在所有标号尾部增加一个唯一的四位数,以使多次引用时标号不会重复。下面的例子说明了多次引用宏指令时内部标号的处理。
例:
CHK MACRO N1,N2
XRL A,N1
JZ MATCH1
XRL A,N2
JNZ NOMATCH
ADD A,#15H
MATCH1:
ADD A,#7
MOV R4,A
NOMATCH:
MOV R5,A
ENDM
MOV A,#23H
CHK #65H,R3
MOV A,@R0
CHK R2,#23H
NOP
END
程序中有二个标号MATCH1及NOMATCH。宏指令被二次引用。经汇编后其列表文件如下:
The Cybernetic Micro Systems 8051 Family Assembler, Version 3.03 Page 1
08-27-96
CHK MACRO N1,N2
XRL A,N1
JZ MATCH1
XRL A,N2
JNZ NOMATCH
ADD A,#15H
MATCH1:
ADD A,#7
MOV R4,A
NOMATCH:
MOV R5,A
ENDM
0000 7423 MOV A,#23H
0002 CHK #65H,R3
+0002 6465 XRL A,#65H
+0004 6005 JZ MATCH10001
+0006 6B XRL A,R3
+0007 7005 JNZ NOMATCH0001
+0009 2415 ADD A,#15H
+ MATCH10001:
+000B 2407 ADD A,#7
+000D FC MOV R4,A
+ NOMATCH0001:
+000E FD MOV R5,A
000F E6 MOV A,@R0
0010 CHK R2,#23H
+0010 6A XRL A,R2
+0011 6006 JZ MATCH10002
+0013 6423 XRL A,#23H
+0015 7005 JNZ NOMATCH0002
+0017 2415 ADD A,#15H
+ MATCH10002:
+0019 2407 ADD A,#7
+001B FC MOV R4,A
+ NOMATCH0002:
+001C FD MOV R5,A
001D 00 NOP
0000 END
The Cybernetic Micro Systems 8051 Family Assembler, Version 3.03 Page 2
08-27-96
;%T Symbol Name Type Value
CHK . . . . . . . . . . . . . . M 0000
MATCH10001. . . . . . . . . . . L 000B
MATCH10002. . . . . . . . . . . L 0019
NOMATCH0001 . . . . . . . . . . L 000E
NOMATCH0002 . . . . . . . . . . L 001C
;%Z
00 Errors (0000)
从列表文件中我们可以看到,汇编程序已对宏指令中的标号作了处理,在第一次引用时,宏指令中的标号MATCH1及NOMATCH分别衩扩展为MATCH1001及NOMATCH0001,而第二次被引用时相应的标号被扩展为MATCH1002及NOMATCH0002,从而避免在同一程序中标号的重复。
1.部分资源来自网络,经ET电子归类整理,旨在服务电子爱好者并无商业目的,不保证正确性与完整性.
2.如果您觉得本站资源对您有用,请告知您的好友,用搜索引擎搜"ET电子"即可.

