分享

PROC与MACRO辨析

 Kinetis 2014-04-29
1,过程定义伪指令PROC、ENDP
1.1 过程就是子程序。一个过程可以被其它程序所调用(用CALL指令),过程的最后一条指令一般是返回指令(RET)。
  过程定义伪指令的格式为
    <过程名>    PROC  [类型]
                …
                …   
                RET
    <过程名>    ENDP
  注意:PROC和ENDP必须成对出现。
1.2 过程的类型有两种:
    NEAR——(默认类型)表示段内调用
    FAR——表示段间调用
    
  调用一个过程的格式为:
CALL  <过程名>

2,宏定义伪指令
如果需要多次使用同一个程序段,可以将这个程序段定义为一个”宏指令”,然后在需要时,可简单地用宏指令名来代替这个程序段。
指令的格式为:
<宏指令名>  MACRO  [形参表]
       <宏定义体>
     ENDM
例:两个数之和的宏定义和宏调用。
   宏定义为:
DADD  MACRO   X,Y,Z
             MOV   AX,X
             ADD   AX,Y
             MOV   Z,AX
             ENDM
X、Y、Z是形式参数。调用宏DADD时可写为:
    DADD   DATA1,DATA2,SUM
DATA1,DATA2,SUM是实际参数,由它们替换定义中的X、Y、Z。

3,宏调用与过程(子程序)调用都是一次定义,多次调用。它们之间的差别是:
① 执行形式:宏命令伪指令由宏汇编程序在汇编过理中进行处理,而CALL、RET则是由CPU执行的指令。
② 汇编结果:宏命令伪指令汇编后被展开。
③ 执行速度:宏命令执行速度较快(因无调用转移)
④ 占用内存:宏指令简化了源程序,但不能简化目标程序,并不节省内存单元。使用过程可以节省代码占用的内存空间。
宏展开:汇编程序会把宏调用按宏定义展开。
例如:宏定义为:
               Display    MACRO    string
                               LEA    DX,string
                               MOV   AH,9
                               INT     21H
                               ENDM
           程序中宏调用:
                                ……
                               DISPLAY           ERROR_MESSAGE
                               DISPLAY           EXIT_MESSAGE
                                ……
           汇编后的结果:(带有+号的指令为宏展开后的结果)
                                ……
                         +     LEA    DX,ERROR_MESSAGE
                         +     MOV   AH,9
                         +     INT     21H
                         +     LEA     DX,EXIT_MESSAGE
                         +     MOV AH,9
                         +     INT     21H
                                ……


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多