《计算机组成原理与汇编语言》课程电子教案(PPT课件讲稿)第十三章 高级宏汇编语言

第十三章高级宏汇编语言
第十三章 高级宏汇编语言

第L节宏指令 131宏定义与宏结束指令1定义宏 80868088宏汇编提供宏定义伪指令 MACRO.ENDM来定义宏。其格 参数的宏定义 MNAME MACRO 宏体ENDM (2)带参数的宏定 MNAME MACRO [DUMPAR1, DUMPAR2] 宏体ENDM MNAME是宏指令名字(下称宏名),代表所定义的宏。宏名是以字 母 数字和下划线组成的 MACRO是宏定义伤指令,ENDM是宏结束伪指令。在 MACRO和 ENDM 组有独立功能的程序代码,称为宏体。带参数的宏 义中, DUMPAR1、 DUMPAR2、是形式参数(下称形参),也称 参数,多个形参之间用逗号分隔 编 参数的宏由宏体原样取代宏名;带参数的宏,则还要 由实在参数(下称实参)取代形参
第1节 宏指令 13.1.1宏定义与宏结束指令1.定义宏 8086.8088宏汇编提供宏定义伪指令MACRO.ENDM来定义宏。其格 式有两种: (1)不带参数的宏定义 MNAME MACRO … }宏体ENDM (2)带参数的宏定义 MNAME MACRO [DUMPAR1][,DUMPAR2]… … }宏体ENDM MNAME是宏指令名字(下称宏名),代表所定义的宏。宏名是以字 母开头,由字母、数字和下划线组成的字符串。 MACRO是宏定义伪指令,ENDM是宏结束伪指令。在MACRO和 ENDM之间是一组有独立功能的程序代码,称为宏体。带参数的宏定 义中,DUMPAR1、DUMPAR2、…是形式参数(下称形参),也称哑 参数,多个形参之间用逗号分隔。 经汇编后,不带参数的宏由宏体原样取代宏名;带参数的宏,则还要 由实在参数(下称实参)取代形参

2宏调用与宏展开 具有独立功能的程序段被定义为宏以后,就可以在源 程屏中调用了。在操作码段写上宏名,也就是使用宏指令, 称为左调用。“先定义,后使用”是宏指令调用的原则,调 用格式为 MNAME或 MNAME PAR1,PAR2, MNAME是之 定义过的宏名 对于带参数的宏调用,PAR1,PAR2,是实参。实参与 形参的意义和出现次序必须一致,但参数的个数不一定相等 竹实参多于形参时,多余的实参被忽略。当实参少于形参时, 则多余的形参被忽略 源程序被汇编时,每当在操作码段遇到宏调用,宏汇编 程序就用宏体取代宏名,对于带参数的宏,则同时用实参取 代宏体中对应形参的位置,生成宏体目标代码,这个过程称 为宏展开。应该注意,宏展开后,所得到的语句应该是有效 的,否则宏汇编程序将会提示出错
2.宏调用与宏展开 一个具有独立功能的程序段被定义为宏以后,就可以在源 程序中调用了。在操作码段写上宏名,也就是使用宏指令, 称为宏调用。“先定义,后使用”是宏指令调用的原则,调 用格式为MNAME或 MNAME PAR1,PAR2,…MNAME是之前 定义过的宏名。 对于带参数的宏调用,PAR1,PAR2,…是实参。实参与 形参的意义和出现次序必须一致,但参数的个数不一定相等。 当实参多于形参时,多余的实参被忽略。当实参少于形参时, 则多余的形参被忽略。 当源程序被汇编时,每当在操作码段遇到宏调用,宏汇编 程序就用宏体取代宏名,对于带参数的宏,则同时用实参取 代宏体中对应形参的位置,生成宏体目标代码,这个过程称 为宏展开。应该注意,宏展开后,所得到的语句应该是有效 的,否则宏汇编程序将会提示出错

例13,1字变量加法 DSEG SEGMENT VI DW 1234H V2 1111H V3 DW? DSEG ENDS SSEG SEGMENT STACK STK DB 20 DUP(0) SSEG ENDS CSEG SEGMENT ASSUME DS: DSEG, SS: SSEG, CS: CSEG DADD MACRO X,Y,z;宏定义 PUSH AX MOVAX, X ADDAX, Y MOV Z, AX POPAX ENDM
例13.1字变量加法 DSEG SEGMENT V1 DW 1234H V2 DW 1111H V3 DW ? DSEG ENDS SSEG SEGMENT STACK STK DB 20 DUP(0) SSEG ENDS CSEG SEGMENT ASSUME DS:DSEG,SS:SSEG,CS:CSEG DADD MACRO X,Y,Z;宏定义 PUSH AX MOVAX,X ADDAX,Y MOV Z,AX POPAX ENDM

START MOVAX, DSEG MO∨DS,AX MOV AX, SSEG MOV SS, AX MOV SP, LENGTH STK DADDⅥL,V2,V3;宏调用 MOV AH, 4CH INT 21H CSEG ENDS END START 宏展开: 三 PUSH AX MO∨AX,V1 ADD AX, V2 MOV V3, AX POP AX 从宏展开的结果可以看出,宏调用时的实参取代了宏定义时的形参。 程序清单中语句左侧的“+”号是汇编程序在清单文件中加的记号,以表 一示这是宏展开后的语句。请注意,这些“+”号实际上并不存在
START:MOVAX,DSEG MOV DS,AX MOV AX,SSEG MOV SS,AX MOV SP,LENGTH STK DADD V1,V2,V3 ;宏调用 MOV AH,4CH INT 21H CSEG ENDS END START 宏展开: + PUSH AX + MOV AX,V1 + ADD AX,V2 + MOV V3,AX + POP AX 从宏展开的结果可以看出,宏调用时的实参取代了宏定义时的形参。 程序清单中语句左侧的“+”号是汇编程序在清单文件中加的记号,以表 示这是宏展开后的语句。请注意,这些“+”号实际上并不存在

3,宏指令的有效范围 宏指令的优先级最高。可以定义与指令助记符、伪操作同名的宏,此 时,同名机器指令或伪操作失效。只有用 PURGE伪操作取消宏定义, 能恢复同名机器指令或伪操作的原始含义。 PURGE伪操作可同时取消多 个宏定义,被取消的宏名之间用逗号分隔。格式为: PURGE MNAME1 MNAME2][, MNAMB31 中 MNAME1, MNAME2, MNAME3,,是宏定义名,多个将被取消 的宏定义名用逗号分开。 4,宏厍 如果希望某些宏定义能被多个程序调用,可以将这些宏定义放在一起 库文件的形式存放起来,这个库文件就是宏库。当一个源程序需要使 用这些宏定义时,可以在程序中使用 INCLUDE伪指令,其语句格式 为: INCLUDE HNAME HNAME是库文件名,其扩展名为LIB。 宏汇编程序在汇编源程序时,如遇到 INCLUDE伪指令,就将它指定的库 文件的内容扫描一遍,如同在源程序中进行库中的宏定义一样,因而其 后的程序可以直接调用库中的宏定义
3.宏指令的有效范围 宏指令的优先级最高。可以定义与指令助记符、伪操作同名的宏,此 时,同名机器指令或伪操作失效。只有用PURGE伪操作取消宏定义,才 能恢复同名机器指令或伪操作的原始含义。PURGE伪操作可同时取消多 个宏定义,被取消的宏名之间用逗号分隔。 格式为:PURGE MNAME1 [, MNAME2][,MNAME3]… 其中:MNAME1,MNAME2,MNAME3,…是宏定义名,多个将被取消 的宏定义名用逗号分开。 4.宏库 如果希望某些宏定义能被多个程序调用,可以将这些宏定义放在一起 以库文件的形式存放起来,这个库文件就是宏库。当一个源程序需要使 用这些宏定义时,可以在程序中使用INCLUDE伪指令,其语句格式 为:INCLUDE HNAME HNAME是库文件名,其扩展名为.LIB。 宏汇编程序在汇编源程序时,如遇到INCLUDE伪指令,就将它指定的库 文件的内容扫描一遍,如同在源程序中进行库中的宏定义一样,因而其 后的程序可以直接调用库中的宏定义

1312参数的使用 (1)在宏定义、宏调用的参数中,经常使用的宏操作符有4个: ①连接操作符& 8操作符在宏定义体中可以作为形参的前级,宏展开时将&前后两个符 号连接形成一个符号。这个连接后的符号可以是指令助记符、操作数或 符串 ②文本操作符<> 在宏调用时,有的实参含空格或逗号,这时就必须使用文本操作符< 把一个完整的实参括起来,作为一个单一的实参 表达式操作符% %操作符在宏调用时用在实参的前面,格式是:%表达式 编语言用%后表达式的值而不是表达式文本来取代对应的形参。 ④字符操作符! !操作符用在宏调用中,格式是∷!宏操作符 !操作符告诉宏汇编程序,其后的字符不作操作符使用,而是以字符本身 的意义进行处理。如“!9%”表示“%”不是表达式操作符,而是一个百分
13.1.2参数的使用 (1)在宏定义、宏调用的参数中,经常使用的宏操作符有4个: ①连接操作符& &操作符在宏定义体中可以作为形参的前缀,宏展开时将&前后两个符 号连接形成一个符号。这个连接后的符号可以是指令助记符、操作数或 是一个字符串。 ②文本操作符<> 在宏调用时,有的实参含空格或逗号,这时就必须使用文本操作符<> 把一个完整的实参括起来,作为一个单一的实参。 ③表达式操作符% %操作符在宏调用时用在实参的前面,格式是:%表达式 汇编语言用%后表达式的值而不是表达式文本来取代对应的形参。 ④字符操作符! !操作符用在宏调用中,格式是:!宏操作符 !操作符告诉宏汇编程序,其后的字符不作操作符使用,而是以字符本身 的意义进行处理。如“!%”表示“%”不是表达式操作符,而是一个百分 号

(2)-与宏中形参字符串对应的实参可以是数值、指令、寄存器名、存储 单元名以及用寻址方式能找到的地址或表达式等 如例131中的、V2可能是存储数值的内存单元地址,也可能是用等 价定义伪指令定义的数值;3可能是内存单元地址 例132加减法运算。参数OP代表指令 宏定义 MOP MACRO OP,Ⅹ,Y,Z PUSH AX MOV AX,Ⅹ OP AX, Y MOV Z AX POP AX ENDM
(2)与宏中形参字符串对应的实参可以是数值、指令、寄存器名、存储 单元名以及用寻址方式能找到的地址或表达式等。 如例13.1中的V1、V2可能是存储数值的内存单元地址,也可能是用等 价定义伪指令定义的数值;V3可能是内存单元地址。 例13.2加减法运算。参数OP代表指令。 宏定义: MOP MACRO OP,X,Y,Z PUSH AX MOV AX, X OP AX,Y MOV Z, AX POP AX ENDM

宏调用及宏展开: MOP ADD, DA1, DA2, PUSH AX MO∨AX,DA1 ADD AX, DA2 MO√ WORD PTR RES,AX ++++ POP AX MOP SUB, DA1+2, DA2 +2, <WORD PTR RES+2 PUSH AX MOV AX DA1+2 SUB AX, DA2+2 MOV WORD PTR RES+2, AX POP AX
宏调用及宏展开: MOP ADD,DA1,DA2, + PUSH AX + MOV AX,DA1 + ADD AX,DA2 + MOV WORD PTR RES,AX + POP AX MOP SUB,DA1+2,DA2+2, + PUSH AX + MOV AX,DA1+2 + SUB AX,DA2+2 + MOV WORD PTR RES+2,AX + POP AX

例13.3寄存器循环移位。参数DIR代表指令的一部分,参数 REG代表寄存器。 宏定义 REGROL MACRO DIR, REG, CNT MOV CL, CNT RO&dIR REG, Cl ENDM 宏调用及宏展开 REGROL L, AX, 8 MOV L, 8 ROL AX, CL REGROL R, BL MO∨CL,4 ROR BL, CL
例13.3寄存器循环移位。参数DIR代表指令的一部分,参数 REG代表寄存器。 宏定义: REGROL MACRO DIR,REG,CNT MOV CL,CNT RO&DIR REG,CL ENDM 宏调用及宏展开: REGROL L,AX,8 + MOV CL,8 + ROL AX,CL REGROL R,BL,4 + MOV CL,4 + ROR BL,CL
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
- 《计算机组成原理与汇编语言》课程电子教案(PPT课件讲稿)第十二章 子程序设计.ppt
- 《计算机组成原理与汇编语言》课程电子教案(PPT课件讲稿)第三章 指令系统.ppt
- 《计算机组成原理与汇编语言》课程电子教案(PPT课件讲稿)第七章 学习机简介.ppt
- 《计算机组成原理与汇编语言》课程电子教案(PPT课件讲稿)第六章 外部设备.ppt
- 《计算机组成原理与汇编语言》课程电子教案(PPT课件讲稿)第九章 顺序程序设计.ppt
- 《计算机组成原理与汇编语言》课程电子教案(PPT课件讲稿)第二章 运算器.ppt
- 《计算机组成原理与汇编语言》课程电子教案(PPT课件讲稿)第八章 汇编语言基础.ppt
- 《C语言(C++)程序设计》第9章 文件.ppt
- 《C语言(C++)程序设计》第8章 位运算.ppt
- 《C语言(C++)程序设计》第7章 结构体、联合体和枚举类型.ppt
- 《C语言(C++)程序设计》第6章 指针和引用.ppt
- 《C语言(C++)程序设计》第5章 函数与预处理.ppt
- 《C语言(C++)程序设计》第4章 数组.ppt
- 《C语言(C++)程序设计》第3章 结构化程序设计.ppt
- 《C语言(C++)程序设计》第2章 数据类型及表达式.ppt
- 《C语言(C++)程序设计》第1章 C语言绪论第1章.ppt
- 《C语言(C++)程序设计》第10章 C++面向对象程序设计.ppt
- 《微机原理与接口技术》课程教学资源(PPT课件)目录二.ppt
- 《微机原理与接口技术》课程教学资源(PPT课件)目录一.pps
- 《微机原理与接口技术》课程教学资源(PPT课件)第四章 半导体存储器.ppt
- 《计算机组成原理与汇编语言》课程电子教案(PPT课件讲稿)第十四章 现代计算机技术.ppt
- 《计算机组成原理与汇编语言》课程电子教案(PPT课件讲稿)第十一章 循环程序设计.ppt
- 《计算机组成原理与汇编语言》课程电子教案(PPT课件讲稿)第十章 分支程序设计.ppt
- 《计算机组成原理与汇编语言》课程电子教案(PPT课件讲稿)第四章 控制器.ppt
- 《计算机组成原理与汇编语言》课程电子教案(PPT课件讲稿)第五章 存储体系结构.ppt
- 《计算机组成原理与汇编语言》课程电子教案(PPT课件讲稿)第一章 计算机系统概论.ppt
- 《AUTOCAD 2007教程》课程教学课件(PPT讲稿,共十章).ppt
- 湖南省第二届“软考杯”大学生程序设计大赛试题.pdf
- 湖南省首届“湘邮科技杯”大学生程序设计大赛试题.pdf
- 21世纪高等院校规划教材:《数据库基础―Access2003 应用教程》第三章 查询.ppt
- 21世纪高等院校规划教材:《数据库基础―Access2003 应用教程》第二章 建立数据库.ppt
- 21世纪高等院校规划教材:《数据库基础―Access2003 应用教程》第九章 数据库的安全.ppt
- 21世纪高等院校规划教材:《数据库基础―Access2003 应用教程》第六章 数据访问页.ppt
- 21世纪高等院校规划教材:《数据库基础―Access2003 应用教程》第七章 宏的设计与应用.ppt
- 21世纪高等院校规划教材:《数据库基础―Access2003 应用教程》第八章 VBA的设计与应用.ppt
- 21世纪高等院校规划教材:《数据库基础―Access2003 应用教程》第十一章 计算机等级考试指南.ppt
- 21世纪高等院校规划教材:《数据库基础―Access2003 应用教程》第十章 数据库综合应用实例.ppt
- 21世纪高等院校规划教材:《数据库基础―Access2003 应用教程》第四章 报表.ppt
- 21世纪高等院校规划教材:《数据库基础―Access2003 应用教程》第五章 窗体.ppt
- 21世纪高等院校规划教材:《数据库基础―Access2003 应用教程》第一章 数据库基础知识.ppt