第13章宏处理上课讲义

上传人:yulij****0329 文档编号:138585872 上传时间:2020-07-16 格式:PPT 页数:77 大小:313KB
返回 下载 相关 举报
第13章宏处理上课讲义_第1页
第1页 / 共77页
第13章宏处理上课讲义_第2页
第2页 / 共77页
第13章宏处理上课讲义_第3页
第3页 / 共77页
第13章宏处理上课讲义_第4页
第4页 / 共77页
第13章宏处理上课讲义_第5页
第5页 / 共77页
点击查看更多>>
资源描述

《第13章宏处理上课讲义》由会员分享,可在线阅读,更多相关《第13章宏处理上课讲义(77页珍藏版)》请在金锄头文库上搜索。

1、第13章 宏处理,13.1 不带参数的宏定义 13.2 带参数的宏定义 13.3 LOCAL伪指令 13.4 宏库的建立与注销 13.5 重复类伪指令 REPT、IRP及IRPC 13.6 条件伪指令,13.1 不带参数的宏定义,宏定义一定要放在所有的段定义之前。例13.1就是一个名称为INIT1的宏定义,此宏定义中的多条指令是EXE格式程序的初始化部分,即为各段寄存器赋初值。 例13.1 不带参数的宏定义。,INIT1 MACRO ;宏定义 ASSUME CS:CSEG,DS:DSEG,SS:STACK,ES:DSEG ; PUSH DS ; SUB AX,AX ; PUSH AX ; 宏体

2、 MOV AX,DSEG ; MOV DS,AX ; MOV ES,AX ; ENDM ;宏结束,伪指令MACRO的功能是在汇编过程中告诉汇编程序:此行以下一直到ENDM为止的所有指令都是宏定义,而宏的名称是INIT1;也可以使用其他任何有效的汇编语言的名称作为宏定义名。ENDM代表一个宏定义的结束,在MACRO和ENDM之间的7行指令,就构成了宏定义的主体,称为宏体。 在宏定义中所用到的名称,CSEG、DSEG和STACK都必须在程序的某个地方定义过才可以(即一定存在和有意义)。当汇编过程中遇到INIT1时,汇编程序会先将它当作是一条普通指令来处理,当然这是行不通的;所以,它接着会检查这是否

3、是一条宏定义指令。,例13.1的程序清单如下: ; filename:L131.ASM ; INIT1 MACRO ;宏定义 ASSUME CS:CSEG,DS:DSEG,SS:STACK,ES:DSEG PUSH DS SUB AX,AX PUSH AX,MOV AX,DSEG MOV DS,AX MOV ES,AX ENDM ;宏定义结束 ; STACK SEGMENT PARA STACK STACK DW 32 DUP(?) STACK ENDS ; ,DSEG SEGMENT PARA Data MESSGE DB Test of macro-instruction,13 DSEG

4、ENDS ; CSEG SEGMENT PARA Code BEGIN PROC FAR INIT1 ;宏指令(宏调用),MOV AH,40H MOV BX,01 MOV CX,26 LEA DX,MESSGE INT 21H RET BEGIN ENDP CSEG ENDS END BEGIN,图13-1是例13.1的汇编语言源程序汇编后的列表文件(L131.LST),其中在指令的左边标有“1”的指令,就是由宏指令展开出来的部分。同时,宏展开不会列出ASSUME伪指令,因为它不会产生目的机器指令码。例13.1是一个采用高级DOS功能调用,显示字符串的程序。,;Filename:L131.AS

5、M ; INIT1 MACRO ASSUME CS:CSEG,DS:DSEG,SS:STACK,ES:DSEG PUSH DS SUB AX,AX PUSH AX MOV AX,DSEG MOV DS,AX MOV ES,AX ENDM,; 0000STACK SEGMENT PARA STACK STACK 0000 0020 DW 32 DUP(?) ? 0040STACK ENDS ; 0000DSEG SEGMENT PARA Data 0000 54 65 73 74 20 20 6FMESSGE DB Test of macro-instruction,13,66 20 20 6D

6、 61 63 72 6F 2D 69 6E 73 74 72 75 63 74 69 6F 6E 0D 001C DSEG ENDS ; 0000 CSEG SEGMENT PARA Code 0000 BEGIN PROC FAR,INIT1 0000 1E 1 PUSH DS 0001 2B C0 1 SUB AX,AX 0003 50 1 PUSH AX 0004 B8 - R 1 MOV AX,DSEG 0007 8E D8 1 MOV DS,AX 0009 8E C0 1 MOV ES,AX 000B B4 40 MOV AH,40H 00D BB 0001 MOV BX,01,00

7、10 B9 001A MOV CX,26 0013 8D 16 0000 R LEA DX,MESSGE 0017 CD 21 INT 21H 0019 CB RET 001A BEGIN ENDP CSEG ENDS END BEGIN,图13-1 宏指令的使用与宏扩展,13.2 带参数的宏定义,在例13.1的宏定义里用到了一些固定的段名:CSEG、DSEG和STACK。为了使宏定义更具有弹性,可以接受任何的段名,就必须将这些段名定义成宏的形式参数。例如:,INIT2 MACRO CSNAME,DSNAME,SSNAME ;宏定义中的形式参数 ASSUME CS:CSNAME,DS:DSNA

8、ME,SS:SSNAME,ES:DSNAME PUSH DS SUB AX,AX PUSH AX MOV AX,DSNAME MOV DS,AX MOV ES,AX ENDM,宏定义指令中的形式参数的功能是:在宏展开时,告诉汇编程序用宏指令的实际参数代替宏体内的形式参数。INIT2中的三个形式参数CSNAME、DSNAME和SSNAME,都是使用在ASSUME伪指令中的,而DSNAME还用在后面的MOV指令中。形式参数的命名原则应符合汇编语言的命名规则。,当用到宏指令INIT2时,你必须依照宏定义指令中所指定的顺序,将三个段的实际名称作为宏定义的实际参数。例如: 宏定义: INIT2 MACR

9、O CSNAME,DSNAME,SSNAME (形式参数) 宏指令: INIT2 CSEG, DSEG, STACK (实际参数),例13.2 带有形式参数的宏定义使用方法。 程序清单如下: ; filename:L132.ASM ; INIT2 MACRO CSNAME,DSNAME,SSNAME ;宏定义,ASSUME CS:CSNAME,DS:DSNAME,SS:SSNAME,ES:DSNAME PUSH DS SUB AX,AX PUSH AX MOV AX,DSNAME MOV DS,AX MOV ES,AX ENDM,; STACK SEGMENT PARA STACK STACK

10、 DW 32 DUP(?) STACK ENDS ; DSEG SEGMENT PARA Data MESSGE DB Test of macro, $ DSEG ENDS ; CSEG SEGMENT PARA Code,BEGIN PROC FAR INIT2 CSEG,DSEG,STACK MOV AH,09 LEA DX,MESSGE INT 21H RET BEGIN ENDP CSEG ENDS END BEGIN,图13-2是例13.2的列表文件。 ; INIT2 MACRO CSNAME,DSNAME,SSNAME ASSUME CS:CSNAME,DS:DSNAME,SS:S

11、SNAME,ES:DSNAME PUSH DS SUB AX,AX PUSH AX MOV AX,DSEG MOV DS,AX MOV ES,AX,ENDM ; 0000STACK SEGMENT PARA STACK STACK 0000 0020? DW 32 DUP(?) 0040 STACK ENDS ; 0000DSEG SEGMENT PARA Data 0000 54 65 73 74 20 20 6FMESSGE DB Test of macro, $,66 20 20 6D 61 63 72 6F 24 0010DSEG ENDS ; 0000CSEG SEGMENT PAR

12、A Code 0000BEGIN PROC FAR INIT2 CSEG,DSEG,STACK,0000 1E 1 PUSH DS 0001 2B C0 1 SUB AX,AX 0003 50 1 PUSH AX 0004 B8 - R 1 MOV AX,DSEG 0007 8E D8 1 MOV DS,AX 0009 8E C0 1 MOV ES,AX 000B B4 09 MOV AH,09,000D 8D 16 0000 RLEA DX,MESSGE 0011 CD 21 INT 21H 0013 CBRET 0014 BEGIN ENDP 0014CSEG ENDS END BEGIN

13、,图13-2 宏定义参数的使用方法,下面通过一些例子说明形式参数的使用。 (1) 形式参数作为宏体中指令语句的操作数,将AX寄存器内容左移X位的宏定义。 SHIFT MACRO X MOV CL,X SAL AX,CL ENDM 若要左移5位,可用宏指令SHIFT 5实现,宏展开后将以下两条指令插入即可。 1 MOV CL,5 1 SAL AX,CL,(2) 形式参数作为宏体中汇编语言指令语句的操作码。设有以下宏: X MACRO X1,X2,X3,X4 MOV AX,X1 X2 AX,X3 MOV CL,4 X4 AX,CL ENDM,若有宏指令: X1111H,MOV,BX,SHR,则宏展

14、开为: 1MOV AX,1111H 1MOV AX,BX 1MOV CL,4 1SHR AX,CL,(3) 形式参数作为宏体中指令语句的操作码的一部分。设有以下宏: MMACRO X,Y,Z,W MOV AX,X C filename:L133.ASM ; DIVIDE MACRO DIVIDEND,DIVISOR,QUOTIENT LOCAL COMP LOCAL OUT,;AX=divd, BX=divisor,CX=quotient MOV AX,DIVIDEND ;置被除数 MOV BX,DIVISOR ;置除数 SUB CX,CX ;清商 COMP: CMP AX,BX ;被除数小于除数? JB OUT ;YES,则转OUT SUB AX,BX ;NO则被除数除数,INC CX ;商加1 JMP COMP OUT:

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 教学课件 > 高中课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号