汇编7-第七章

汇编7-第七章

ID:43586190

大小:193.50 KB

页数:67页

时间:2019-10-11

汇编7-第七章_第1页
汇编7-第七章_第2页
汇编7-第七章_第3页
汇编7-第七章_第4页
汇编7-第七章_第5页
资源描述:

《汇编7-第七章》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库

1、第七章  宏汇编7.1宏指令7.2重复汇编7.3条件汇编7.1宏指令在汇编语言源程序中,有的程序段在整个程序中要多次出现。有的出现可能是完全不修改的重复,有的可能是仅修改程序段中某些操作数字段,而程序段的功能并无大的变化。为了使在源程序中不重复编写这个相同程序段,我们可以将这个程序段定义成一个“指令”,叫做宏指令。这样,在书写源程序时,可以简单地用宏指令名来代替原来的程序段,使源程序更加简洁、易读。例如在某个源程序中要多次用到对AX、BX、CX、DX的压栈,则可事先编写如下宏指令。PUSHREGMACROPUSHAXPUSHBX

2、PUSHCXPUSHDXENDM则在后面的程序中,凡是需要对AX、BX、CX、DX的压栈的地方,就可以用PUSHREG来替代。7.1.1宏功能的使用过程使用宏指令必须按照宏定义、宏调用、宏展开三步进行。一、宏定义应用宏指令之前,必须首先进行宏定义。用MACRO和ENDM伪指令进行宏定义。MACRO表示宏定义的开始,ENDM表示宏定义的结束。其格式有以下两种:(1)不带参数的宏定义:宏名MACRO:宏体:ENDM(2)带参数的宏定义:宏名MACRO形参1,形参2,.....:宏体:ENDM上述两种宏定义中,宏体是由若干语句序列组成

3、的程序段。宏名就是给宏体中程序段指定一个符号名,亦是以后宏指令语句中调用该宏体直接引用的符号名。宏名在整个程序中应是唯一的。不带参数的指令在每次宏调用时只需引用宏名,在宏展开时宏体内各语句序列均不作任何修改。带参数的指令允许在宏调用中做适当修改,在宏定义中,把允许修改的部分用形式参数(简称形参)来表示,当宏调用时就用相应的实在参数(简称实参)来取代形式参数。形参可以是多个,各个形参之间用逗号相隔。例如对两个字节单元内容相互交换的程序段进行宏定义:EXCHANGEMACROMEM1,MEM2,REGMOVREG,MEM1XCHGR

4、EG,MEM2MOVMEM1,REGENDM在上述宏定义中,有三个形参:MEM1、MEM2、REG,其中前两个表示将要进行交换的两个存储单元,最后一个参数表示实现两个存储单元数据进行交换时使用的寄存器。宏定义可以进行嵌套。这时,宏体中语句序列除指令语句、伪指令语句外,可以是另一个已经定义的宏名。二、宏调用经过宏定义,在源程序中任意位置可以调用宏指令。宏调用格式:·无参数宏调用:宏名·带参数宏调用:宏名实参1,实参2,...例如:对前面两个宏定义的调用:...PUSHREG...EXCHANGEBY1,BY2,AL..:EXCHA

5、NGEDA_BYl,DA_BY2:宏汇编程序对带参数宏调用,用第一个实参替代第一个形参,第二个实参替代第二个形参,以此类推。因此,当实参是多个时,实参的排列顺序要与形参的排列顺序一致.若实参的个数比形参多,则多余实参自动被略去,若实参个数比形参少,那么多的形参自动用"空白串"替代.三、宏展开当宏汇编程序扫描到宏指令语句(即宏调用)时,宏汇编程序就把宏定义中宏体的程序段目标代码插在宏指令语句的位置上以替代宏指令语句。若是带参数的宏调用,则同时用相应的实参代替宏体中对应形参的位置,并对原有宏体代码作修改。这样,在程序的目标代码中,每

6、个宏指令语句位置上都包含相应宏体的目标代码,此宏指令的使用不会减少程序的目标代码长度。下面是一个源程序的列表文件,它展示了宏定义,宏调用和宏展开的全部过程。在列表文件中,左边带“+”号的指令是宏汇编程序在宏展开时自动生成的指令。宏定义本身不生成任何目标代码,宏指令语句(即宏调用)本身也不生成目标代码,它仅表示宏调用出现的位置。列表文件如下:;宏定义INPUTMACROMOVAH,0lHINT2lHANDAL,0FHENDM;宏定义EXCHANGMACROMEM1,MEM2,REGMOVREG,MEM1XCHGREG,MEM2MO

7、VMEM1,REGENDM;设置数据段DATASEGMENTBYlDB10HBY2DB20HDATAENDS;设置堆栈段STACK1SEGMENTPARASTACKDW20HDUP(0)STACK1ENDS;设置代码段CODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACKlSTARTMOVAX,DATAMOVDS,AX:INPUT;宏调用语句+MOVAH,01H+INT21H+ANDAL,0FHEXCHANGEDA_BY1,DA_BY2;宏调用语句+MOVAL,BY1+XCHGAL,BY2+MOVBY

8、1,AL:CODEENDSENDSTART7.1.2宏操作符一、文本操作符在宏调用时,有时一个实参是由字符、空格或逗号组成,如“WORDPTRDA_BYTE”。这时把带空格或逗号的实参用“<>”括起来,以表示它是一个完整的单一的实参。例如对于前面两个存储单元的内

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。