版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、7.1 宏汇编 在汇编语言中,如果在源程序中多次使用到同一个程序段,则可以将这个程序段定义成一个“指令”,叫宏指令。17.1 宏汇编 在汇编语言中,如果在源程序中多次使用到仅是源程序级的简化:宏调用在汇编时进行程序语句的展开,不需要返回;不减小目标程序,执行速度没有改变通过形参、实参结合实现参数传递,简捷直观、灵活多变还是目标程序级的简化:子程序调用在执行时由CALL指令转向、RET指令返回;形成的目标代码较短,执行速度减慢需要利用寄存器、存储单元或堆栈等传递参数比较宏子程序共同点:简化源程序的书写;节省编程的工作量2仅是源程序级的简化:宏调用在汇编时进行程序语句的展开,不需要宏与子程序具有各
2、自的特点,程序员应该根据具体问题选择使用那种方法通常,当程序段较短或要求较快执行时,应选用宏;当程序段较长或为减小目标代码时,要选用子程序比较宏子程序3宏与子程序具有各自的特点,程序员应该根据具体问题选择使用那种7.1 宏汇编宏:具有宏名的一段汇编语句序列宏定义时书写宏指令:这段汇编语句序列的缩写宏调用时书写宏展开:宏指令处用这段宏代替的过程宏汇编时实现宏的参数功能强大,颇具特色配合宏,还有宏操作符和有关伪指令47.1 宏汇编宏:具有宏名的一段汇编语句序列4一、宏定义mainbeginMACRO ;定义名为mainbegin的宏,无参数mov ax,data;宏定义体mov ds,axENDM
3、;宏定义结束宏名macro 形参表宏定义体endmmainendMACRO retnum;带有形参retnummov al, 0mov ah, retnum ;宏定义中使用参数int 21hENDM宏注释符5一、宏定义mainbeginMACRO ;定义名为m宏调用及其展开start:mainbegin;宏调用,建立DS内容mainend 4ch ;宏调用,返回DOSend start宏名 实参表宏调用的实质是在汇编过程中进行宏展开对于宏来说,先定义,后调用。 宏展开的具体过程是:当汇编程序扫描源程序遇到已有定义的宏调用时,即用相应的宏定义体取代源程序的宏指令,同时用位置匹配的实参对形参进行取
4、代6宏调用及其展开start:mainbegin;宏调用,建宏展开start:mainbegin;宏指令 1mov ax,data;宏展开 1mov ds,axmainend 4ch;宏指令 1mov al,0;宏展开 1mov ah,4ch 1int 21h在汇编时,用宏定义体的代码序列替代宏指令的过程7宏展开start:mainbegin;宏指令在汇编时,用 宏展开 当宏汇编程序扫描到宏指令语句(即宏调用)时,宏汇编程序就把宏指令定义中宏体的程序段代码替代宏指令语句。 若是带参数的宏调用,则同时用相应的实参替代宏体中对应形参的位置,并对原有宏体代码作修改。 8 宏展开8 宏展开 下面是一个
5、源程序的列表文件,它展示了宏定义、宏调用和宏展开的全部过程。 在列表文件中,左边带“+”号的指令是宏汇编程序在宏展开时自动生成的指令。 宏定义本身不生成任何目标代码,宏指令语句本身也不生成目标代码,它仅表示宏调用出现的位置。9 宏展开 下面是一个源程序的列表文件,它展示EXCH_MEMMACRO MEM_l,MEM_2,REG MOV REG,MEM_1XCHG REG,MEM_2MOV MEM_1,REGENDMDATASEGMENT DA_W1 DW 55AAH DA_W2 DW 6688H DATA ENDSCODE SECMENTASSUME CS:CODE,DS:DATA,SS:ST
6、ACKSTART:MOVAX,DATA MOV DS,AX 10EXCH_MEMMACRO MEM_l,MEM_2,;宏调用和宏展开 EXCH_MEM DA_W1,DA_W2,AX ;宏指令语句 + MOV AX ,DA_Wl + XCHG AX,DA_W2 + MOV DA_W1,AX MOV AH,4CHINT 21HCODE ENDS END START11;宏调用和宏展开11子程序调用和宏调用的区别 子程序时在程序执行期间由主程序调用的,它只占有它自身大小的一个空间 宏调用是在汇编期间展开的,每调用一次就把宏定义体展开一次,因而它占有的存储空间与调用次数有关。12子程序调用和宏调用的区
7、别 子程序时在程序宏的参数可以无参数,例如mainbegin可以带有一个参数,例如mainend也可以具有多个参数;参数可以是常数、变量、存储单元、指令(操作码)或它们的一部分,也可以是表达式;宏定义体可以是任何合法的汇编语句,既可以是硬指令序列,又可以是伪指令序列;13宏的参数可以无参数,例如mainbegin13;宏定义shlextmacro shloprand,shlnumpush cxmov cl,shlnumshl shloprand,clpop cxendm;宏指令shlext ax,6;宏展开 1push cx 1mov cl,06 1shl ax,cl 1pop cx14;宏定
8、义14宏的参数 为了宏定义和引用的某些特殊需要,有时实参是由字符、空格等特殊符号组成的,因此汇编程序支持几个具有特定含义的运算符。 1连接运算符& 在宏定义中,如果形式参数与其它字符连接在一起,或形式参数出现在字符串之中,那么,就必须使用连接运算符(&)。在宏指令定义的具体使用时,连接操作符&可以在形参的前面,也可在形参的后面。在宏指令展开时,对应形参的实参就与它前面或后面的符号连接在一起构成一个新的符号。15宏的参数 为了宏定义和引用的某些特殊需;宏定义LEAP MACRO COND,LAB J&COND LABENDM;宏调用LEAP Z,THERELEAP NZ,HERE;宏展开JZ T
9、HEREJNZ HERE16;宏定义16宏的参数2. 文本操作符 文本操作符是一对尖括号,用它括起来的内容将作为一个字符串来进行形式参数的整体替换。 在宏引用时,如果实参内包含逗号、空格等间隔符,则必须使用该操作符,以保证实参的完整性。如果实参是某个具有特殊含义的字符,为了使它只表示该字符本身,也需要用该运算符括起来。17宏的参数2. 文本操作符17NUMBERMACROTHEDATADBTHEDATAENDM 假设在程序中调用此宏指令: DATA SEGMENT NUMBER DATA ENDS 则宏展开为: DATA SEGMENT DB 1,3,5 DATA ENDS 如果不加,则在宏展
10、开为: DB 1 ; 而3,5按规则被忽略18NUMBERMACROTHEDATA18宏的参数3 表达式操作符 进行宏调用时,如要在实参中使用“”,则在宏指令调用时宏汇编程序将获取“”后常数表达式的值作为参数,而非表达式本身。 19宏的参数3 表达式操作符19NUMBER MACRO X,Y,Z, DB X,Y,Z ENDM若宏调用为: I EQU 10 J EQU 50 NUMBER 16,I+J,J-I 则相应的宏展开为: DB 16,60,4020NUMBER MACRO X,Y,Z,20宏的参数4字符操作符! 字符操作符!的使用表明,“!”后的字符不是特殊字符,而是普通字符。这样对于包
11、含在“”、“!”、“%”之间的文本串,汇编程序将能以普通字符处理。如将“!”作为普通字符,则使用!。21宏的参数4字符操作符!21例如宏指令定义: DEFIN_ST MACRO STRING DB &String&S ENDM 则宏调用: DEFIN_ST 0):$ 其宏展开为: DB Please Input a Integer(0):$22例如宏指令定义:22宏嵌套 宏指令定义中还含有宏定义或者是宏指令的定义中含有宏调用,这两种情况都称为宏嵌套。 1. 宏定义中嵌套宏定义 ABCD_1MACRO ABCD_2MACRO ENDM ENDM23宏嵌套 宏指令定义中还含有宏定义或者是宏指令的定
12、义宏指令定义中嵌套宏定义实例 INIT_1MACRO X,Y,Z SHIFT_&Y MACRO MOV CL,X S&Z Y,CL ENDM ENDM 如采用下面的宏调用: INIT_1 2,BX,AR ;即将BX算术右移2位的宏指令 则相应的宏展开为: SHIFT_BXMACRO MOV CL,2 SAR BX,CL ENDM24宏指令定义中嵌套宏定义实例24宏嵌套 2 在宏定义中嵌套宏调用 在宏定义中嵌套宏调用的基本形式为:这种嵌套形式比较简单,只需在宏定义中(像在程序中一样)写出宏指令即可。但必须先定义,后调用。25宏嵌套 2 在宏定义中嵌套宏调用25宏嵌套ABCD_lMACRO ;定义
13、一个宏 ENDM ABCD_2MACRO ABCD_l ;在宏定义中调用宏 ENDM26宏嵌套ABCD_lMACRO ;定义一个宏26局部标号伪指令LOCAL 标号列表宏定义体采用了标号,应使用LOCAL加以说明它必须是宏定义MACRO语句之后的第一条语句与宏有关的伪指令27局部标号伪指令与宏有关的伪指令27与宏有关的伪指令-LOCAL 标号列表 某些宏定义中存在变量或标号,这些宏定义在同一程序中被多次调用且展开后,就会出现变量或标号重复定义的错误。 LOCAL伪指令的使用可以避免此类错误。在宏展开时,让宏汇编程序自动为其后的形参顺序生成特殊符号 (范围为?0000?FFFFH),并用这些特殊
14、符号来取代宏体中的形参,避免了符号重复定义的错误。 格式: LOCAL 形参1,形参228与宏有关的伪指令-LOCAL 标号列表 ;宏定义Absolmacro oprdlocal nextcmp oprd,0jge nextneg oprdnext:endm;宏调用absol word ptr bxabsol bx;宏展开 1cmp word ptr bx,0 1jge ?0000 1neg word ptr bx 1?0000: 1cmp bx,0 1jge ?0001 1neg bx 1?0001:29;宏定义;宏调用29与宏有关的伪指令宏定义删除伪指令PURGE 宏名表不需要某个宏定义时
15、,可以把它删除 格式: PURGE 宏指令名1 ,宏指令名2 取消宏定义的含义是使该宏定义成为空,程序中如果出现一个已被取消宏定义的宏调 用,则汇编程序将不会指示出错,但它将忽略该宏调用,当然也不会予以展开。30与宏有关的伪指令宏定义删除伪指令30与宏有关的伪指令 宏定义退出伪指令EXITM伪指令EXITM表示结束当前宏调用的展开31与宏有关的伪指令 宏定义退出伪指令31宏库的建立和调用 有些宏指令在应用过程中效果较好,因此在以后的汇编语言编程时就不必每次在源程序中重复编制一个宏指令定义,这样也可减少重复编写时的错误,可以把几个宏定义组成一个宏库,以文件形式供其它源程序调用。 当需要宏库文件中
16、的宏定义时,可在新编制的源程序中使用INCLUDE伪指令。宏汇编程序在汇编源程序时,如果遇到INCLUDE伪指令时,就把这伪指令的宏库文件扫描一遍,如同在这个程序中自己定义的宏一样,在后面的程序中就可以对宏库中的宏定义直接进行宏调用。32宏库的建立和调用 有些宏指令在应二、重复汇编重复汇编指在汇编过程中,重复展开一段(基本)相同的语句重复汇编没有名字,不能被调用重复汇编常用在宏定义体中,也可以在一般汇编语句中使用重复汇编伪指令有三个:REPEAT按参数值重复FOR按参数个数重复FORC按参数的字符个数重复最后,用ENDM结束33二、重复汇编重复汇编指在汇编过程中,重复展开一段(基本)相同按参数
17、值重复REPEAT 重复次数 重复体ENDMchar = AREPEAT 26 db char char = char +1ENDM 1db char;等效于db A 1char = char +1 1db char;等效于db B 1char = char +1. 1db char;等效于db Z 1char = char +134按参数值重复REPEAT 重复次数char = A 1按参数个数重复FOR 形参,实参表 重复体ENDMFOR regad, push regadENDM 1push ax 1push bx 1push cx 1push dx35按参数个数重复FOR 形参,实参表
18、FOR regad,按参数字符个数重复FOR 形参,字符串 重复体ENDMFOR regad,dcba pop ®ad&xENDM 1pop dx 1pop cx 1pop bx 1pop ax36按参数字符个数重复FOR 形参,字符串FOR regad,不定重复伪操作IRP伪操作 格式:IRP 形参, 重复语句序列 ENDM 每次重复汇编语句序列时,就用一个实参替代形参。第一次用第一个实参替代形参,第二次用第二个实参替代形参,直到所有实参用完为止。重复汇编次数由尖括号括起来的实参个数所决定。注意实参必须用尖括号括起来,各个实参之间用逗号分开,如果实参为空,汇编程序则约定跳过IRP与ENDM之间的语句,IRP伪指令的形参只能有一个。37不定重复伪操作IRP伪操作37不定重复伪操作IRP重复汇编结构举例 IRP REG
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五版企业清算注销及税务筹划合同3篇
- 二零二五版供配电设施安全风险评估与治理合同3篇
- 二零二五版锅炉安装与能源审计服务合同范本3篇
- 二零二五版阿拉尔经济技术开发区绿色建筑推广应用合同3篇
- 二零二五版高职高专土建专业校企合作项目合同3篇
- 二零二五版二手车买卖纠纷处理合同3篇
- 二零二五版公益项目合同担保法合规合同3篇
- 二零二五版专业打印设备升级与维护服务合同2篇
- 二零二五版电子商务平台食品农产品溯源合同3篇
- 二零二五版建筑材料租赁合同质量检测与验收标准合同3篇
- 2025年工程合作协议书
- 2025年山东省东营市东营区融媒体中心招聘全媒体采编播专业技术人员10人历年高频重点提升(共500题)附带答案详解
- 2025年宜宾人才限公司招聘高频重点提升(共500题)附带答案详解
- KAT1-2023井下探放水技术规范
- 驾驶证学法减分(学法免分)题库及答案200题完整版
- 竣工验收程序流程图
- 清华经管工商管理硕士研究生培养计划
- 口腔科诊断证明书模板
- 管沟挖槽土方计算公式
- 国网浙江省电力公司住宅工程配电设计技术规定
- 烟花爆竹零售应急预案
评论
0/150
提交评论