当前位置:高等教育资讯网  >  中国高校课件下载中心  >  大学文库  >  浏览文档

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

资源类别:文库,文档格式:PPT,文档页数:34,文件大小:176KB,团购合买
8086.8088宏汇编提供宏定义伪指令MACRO.ENDM来定义宏。其格式有两种: (1)不带参数的宏定义MNAME MACRO… }宏体ENDM (2)带参数的宏定义MNAME MACRO [DUMPAR1][,DUMPAR2]…… }宏体ENDM
点击下载完整版文档(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

点击下载完整版文档(PPT)VIP每日下载上限内不扣除下载券和下载次数;
按次数下载不扣除下载券;
24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
共34页,可试读12页,点击继续阅读 ↓↓
相关文档

关于我们|帮助中心|下载说明|相关软件|意见反馈|联系我们

Copyright © 2008-现在 cucdc.com 高等教育资讯网 版权所有