⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 masm4.htm

📁 单片机入门教程.rar
💻 HTM
📖 第 1 页 / 共 3 页
字号:
    </font></i> 
    <p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>若在宏指信中使用标号,由于这些标号不是形参,所以不会被实参所替代。这样,在程序中多次引用是否会出现标号重复呢?在作宏汇编时,汇编程序会在所有标号尾部增加一个唯</font><font face="Arial" size=3> 
      </font><font face="宋体" lang="ZH-CN" size=3>一的四位数,以使多次引用时标号不会重复。例:</font></p>
    <font face="Arial" size=3> 
    <p align="JUSTIFY"> <i> LMAC MACRO P1,P2,L1</i></p>
    <i> 
    <p align="JUSTIFY"> ANL A,P1</p>
    <p align="JUSTIFY"> JZ L1</p>
    <p align="JUSTIFY"> ORL A,P2</p>
    <p align="JUSTIFY"> L1: MOV @R1,A</p>
    <p align="JUSTIFY"> INC R1</p>
    <p align="JUSTIFY"> ENDM</p>
    <p align="JUSTIFY"></p>
    <p align="JUSTIFY"> MOV R1,#2AH</p>
    <p align="JUSTIFY"> MOV A,#65H</p>
    <p align="JUSTIFY"> LMAC R3,#0F0H,R3ANDA0</p>
    <p align="JUSTIFY"> MOV A,#23H</p>
    <p align="JUSTIFY"> LMAC R5,#07H,R5ANDA0</p>
    <p align="JUSTIFY"> NOP</p>
    <p align="JUSTIFY"> END</p>
    </i></font> 
    <p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>程序中有二个标号MATCH1及NOMATCH,宏指令被二次引用,经汇编后其列表文件如下:</font></p>
    <i><font face="Arial" size=3> 
    <p align="JUSTIFY">The Cybernetic Micro Systems 8051 Family Assembler, Version 
      3.03 Page 1</p>
    <p align="JUSTIFY"> 08-27-96</p>
    <p align="JUSTIFY"> LMAC MACRO P1,P2,L1</p>
    <p align="JUSTIFY"> ANL A,P1</p>
    <p align="JUSTIFY"> JZ L1</p>
    <p align="JUSTIFY"> ORL A,P2</p>
    <p align="JUSTIFY"> L1: MOV @R1,A</p>
    <p align="JUSTIFY"> INC R1</p>
    <p align="JUSTIFY"> ENDM</p>
    <p align="JUSTIFY"></p>
    <p align="JUSTIFY"> 0000 792A MOV R1,#2AH</p>
    <p align="JUSTIFY"> 0002 7465 MOV A,#65H</p>
    <p align="JUSTIFY"> 0004 LMAC R3,#0F0H,R3ANDA0</p>
    <p align="JUSTIFY">+0004 5B ANL A,R3</p>
    <p align="JUSTIFY">+0005 6002 JZ R3ANDA0</p>
    <p align="JUSTIFY">+0007 44F0 ORL A,#0F0H</p>
    <p align="JUSTIFY">+0009 F7 R3ANDA0: MOV @R1,A</p>
    <p align="JUSTIFY">+000A 09 INC R1</p>
    <p align="JUSTIFY"> 000B 7423 MOV A,#23H</p>
    <p align="JUSTIFY"> 000D LMAC R5,#07H,R5ANDA0</p>
    <p align="JUSTIFY">+000D 5D ANL A,R5</p>
    <p align="JUSTIFY">+000E 6002 JZ R5ANDA0</p>
    <p align="JUSTIFY">+0010 4407 ORL A,#07H</p>
    <p align="JUSTIFY">+0012 F7 R5ANDA0: MOV @R1,A</p>
    <p align="JUSTIFY">+0013 09 INC R1</p>
    <p align="JUSTIFY"> 0014 00 NOP</p>
    <p align="JUSTIFY"> 0000 END</p>
    <p align="JUSTIFY">The Cybernetic Micro Systems 8051 Family Assembler, Version 
      3.03 Page 2</p>
    <p align="JUSTIFY"> 08-27-96</p>
    <p align="JUSTIFY"> ;%T Symbol Name Type Value</p>
    <p align="JUSTIFY"> LMAC. . . . . . . . . . . . . . M 0000</p>
    <p align="JUSTIFY"> R3ANDA0 . . . . . . . . . . . . L 0009</p>
    <p align="JUSTIFY"> R5ANDA0 . . . . . . . . . . . . L 0012</p>
    <p align="JUSTIFY"> ;%Z</p>
    <p align="JUSTIFY"> 00 Errors (0000)</p>
    </font></i> 
    <p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>若在宏指令中使用标号,由于这些标号不是形参,所以不会被实参所替代。这样,在程序中多次引用是否会出现标号重复呢,这一点宏汇编程序已作了考虑,在作宏汇编时,汇编程序会在所有标号尾部增加一个唯一的四位数,以使多次引用时标号不会重复。下面的例子说明了多次引用宏指令时内部标号的处理。</font></p>
    <p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>例:</font></p>
    <i><font face="Arial" size=3> 
    <p align="JUSTIFY"> CHK MACRO N1,N2</p>
    <p align="JUSTIFY"> XRL A,N1</p>
    <p align="JUSTIFY"> JZ MATCH1</p>
    <p align="JUSTIFY"> XRL A,N2</p>
    <p align="JUSTIFY"> JNZ NOMATCH</p>
    <p align="JUSTIFY"> ADD A,#15H</p>
    <p align="JUSTIFY"> MATCH1:</p>
    <p align="JUSTIFY"> ADD A,#7</p>
    <p align="JUSTIFY"> MOV R4,A</p>
    <p align="JUSTIFY"> NOMATCH:</p>
    <p align="JUSTIFY"> MOV R5,A</p>
    <p align="JUSTIFY"> ENDM</p>
    <p align="JUSTIFY"></p>
    <p align="JUSTIFY"> MOV A,#23H</p>
    <p align="JUSTIFY"> CHK #65H,R3</p>
    <p align="JUSTIFY"> MOV A,@R0</p>
    <p align="JUSTIFY"> CHK R2,#23H</p>
    <p align="JUSTIFY"> NOP</p>
    <p align="JUSTIFY"> END</p>
    </font></i> 
    <p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>程序中有二个标号MATCH1及NOMATCH。宏指令被二次引用。经汇编后其列表文件如下:</font></p>
    <i><font face="Arial" size=3> 
    <p align="JUSTIFY">The Cybernetic Micro Systems 8051 Family Assembler, Version 
      3.03 Page 1</p>
    <p align="JUSTIFY"> 08-27-96</p>
    <p align="JUSTIFY"> CHK MACRO N1,N2</p>
    <p align="JUSTIFY"> XRL A,N1</p>
    <p align="JUSTIFY"> JZ MATCH1</p>
    <p align="JUSTIFY"> XRL A,N2</p>
    <p align="JUSTIFY"> JNZ NOMATCH</p>
    <p align="JUSTIFY"> ADD A,#15H</p>
    <p align="JUSTIFY"> MATCH1:</p>
    <p align="JUSTIFY"> ADD A,#7</p>
    <p align="JUSTIFY"> MOV R4,A</p>
    <p align="JUSTIFY"> NOMATCH:</p>
    <p align="JUSTIFY"> MOV R5,A</p>
    <p align="JUSTIFY"> ENDM</p>
    <p align="JUSTIFY"></p>
    <p align="JUSTIFY"> 0000 7423 MOV A,#23H</p>
    <p align="JUSTIFY"> 0002 CHK #65H,R3</p>
    <p align="JUSTIFY">+0002 6465 XRL A,#65H</p>
    <p align="JUSTIFY">+0004 6005 JZ MATCH10001</p>
    <p align="JUSTIFY">+0006 6B XRL A,R3</p>
    <p align="JUSTIFY">+0007 7005 JNZ NOMATCH0001</p>
    <p align="JUSTIFY">+0009 2415 ADD A,#15H</p>
    <p align="JUSTIFY">+ MATCH10001:</p>
    <p align="JUSTIFY">+000B 2407 ADD A,#7</p>
    <p align="JUSTIFY">+000D FC MOV R4,A</p>
    <p align="JUSTIFY">+ NOMATCH0001:</p>
    <p align="JUSTIFY">+000E FD MOV R5,A</p>
    <p align="JUSTIFY"> 000F E6 MOV A,@R0</p>
    <p align="JUSTIFY"> 0010 CHK R2,#23H</p>
    <p align="JUSTIFY">+0010 6A XRL A,R2</p>
    <p align="JUSTIFY">+0011 6006 JZ MATCH10002</p>
    <p align="JUSTIFY">+0013 6423 XRL A,#23H</p>
    <p align="JUSTIFY">+0015 7005 JNZ NOMATCH0002</p>
    <p align="JUSTIFY">+0017 2415 ADD A,#15H</p>
    <p align="JUSTIFY">+ MATCH10002:</p>
    <p align="JUSTIFY">+0019 2407 ADD A,#7</p>
    <p align="JUSTIFY">+001B FC MOV R4,A</p>
    <p align="JUSTIFY">+ NOMATCH0002:</p>
    <p align="JUSTIFY">+001C FD MOV R5,A</p>
    <p align="JUSTIFY"> 001D 00 NOP</p>
    <p align="JUSTIFY"> 0000 END</p>
    <p align="JUSTIFY"></p>
    <p align="JUSTIFY">The Cybernetic Micro Systems 8051 Family Assembler, Version 
      3.03 Page 2</p>
    <p align="JUSTIFY"> 08-27-96</p>
    <p align="JUSTIFY"> ;%T Symbol Name Type Value</p>
    <p align="JUSTIFY"> CHK . . . . . . . . . . . . . . M 0000</p>
    <p align="JUSTIFY"> MATCH10001. . . . . . . . . . . L 000B</p>
    <p align="JUSTIFY"> MATCH10002. . . . . . . . . . . L 0019</p>
    <p align="JUSTIFY"> NOMATCH0001 . . . . . . . . . . L 000E</p>
    <p align="JUSTIFY"> NOMATCH0002 . . . . . . . . . . L 001C</p>
    <p align="JUSTIFY"> ;%Z</p>
    <p align="JUSTIFY"> 00 Errors (0000)</p>
    </font></i> 
    <p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>从列表文件中我们可以看到,汇编程序已对宏指令中的标号作了处理,在第一次引用时,宏指令中的标号MATCH1及NOMATCH分别衩扩展为MATCH1001及NOMATCH0001,而第二次被引用时相应的标号被扩展为MATCH1002及NOMATCH0002,从而避免在同一程序中标号的重复。</font></p>
    <p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>“&”在宏指令中作为连接操作符。“&”通常出现在带有形参的字符串中。为了区分字符串中哪些字符是形参,需要在形参与固定字符间加入“&”例如:</font></p>
    <font face="Arial" size=3> 
    <p align="JUSTIFY"> <i> CON MACRO X1,X2,SI,L1</i></p>
    <i> 
    <p align="JUSTIFY"> MOV R2,#X1</p>
    <p align="JUSTIFY"> MOV R2,#X1</p>
    <p align="JUSTIFY"> ADD A,#X1+5-X2</p>
    <p align="JUSTIFY"> DB 'STRING&amp;SI&amp;'</p>
    <p align="JUSTIFY"> JNZ LAB&amp;L1</p>
    <p align="JUSTIFY"> LAB&amp;L1:</p>
    <p align="JUSTIFY"> XRL A,R3</p>
    <p align="JUSTIFY"> ENDM</p>
    <p align="JUSTIFY"> CLR A</p>
    <p align="JUSTIFY"> CON 23H,65H,SPECIAL,57</p>
    <p align="JUSTIFY"> END</p>
    </i></font> 
    <p align="JUSTIFY"><font face="Arial" size=3> </font><font face="宋体" lang="ZH-CN" size=3>列表文件如下:</font></p>
    <i><font face="Arial" size=3> 
    <p align="JUSTIFY">The Cybernetic Micro Systems 8051 Family Assembler, Version 
      3.03 Page 1</p>
    <p align="JUSTIFY"> 08-27-96</p>
    <p align="JUSTIFY"> CON MACRO X1,X2,SI,L1</p>
    <p align="JUSTIFY"> MOV R2,#X1</p>
    <p align="JUSTIFY"> MOV R2,#X1</p>
    <p align="JUSTIFY"> ADD A,#X1+5-X2</p>
    <p align="JUSTIFY"> DB 'STRING&amp;SI&amp;'</p>
    <p align="JUSTIFY"> JNZ LAB&amp;L1</p>
    <p align="JUSTIFY"> LAB&amp;L1:</p>
    <p align="JUSTIFY"> XRL A,R3</p>
    <p align="JUSTIFY"> ENDM</p>
    <p align="JUSTIFY"> 0000 E4 CLR A</p>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -