PC汇编语言程序设计 本科 教学课件 ppt 作者 王闵 第8-11章 第10章

上传人:E**** 文档编号:89350115 上传时间:2019-05-23 格式:PPT 页数:67 大小:916KB
返回 下载 相关 举报
PC汇编语言程序设计 本科 教学课件 ppt 作者 王闵 第8-11章 第10章_第1页
第1页 / 共67页
PC汇编语言程序设计 本科 教学课件 ppt 作者 王闵 第8-11章 第10章_第2页
第2页 / 共67页
PC汇编语言程序设计 本科 教学课件 ppt 作者 王闵 第8-11章 第10章_第3页
第3页 / 共67页
PC汇编语言程序设计 本科 教学课件 ppt 作者 王闵 第8-11章 第10章_第4页
第4页 / 共67页
PC汇编语言程序设计 本科 教学课件 ppt 作者 王闵 第8-11章 第10章_第5页
第5页 / 共67页
点击查看更多>>
资源描述

《PC汇编语言程序设计 本科 教学课件 ppt 作者 王闵 第8-11章 第10章》由会员分享,可在线阅读,更多相关《PC汇编语言程序设计 本科 教学课件 ppt 作者 王闵 第8-11章 第10章(67页珍藏版)》请在金锄头文库上搜索。

1、,第十章 MASM宏汇编语言,10.1 宏伪操作 10.2 重复汇编操作伪指令 10.3 条件汇编伪指令 习题十,10.1 宏伪操作,宏伪操作通常又称为宏指令,是源程序中一段具有独立功能的程序段,它只需要在源程序中定义一次就可以多次被调用,因此使用宏指令可以: 简化程序设计、 减少重复编程的工作量。 减少由于重复编程所带来的错误。 进一步增强程序的可读性。 ,1011 宏定义 宏定义是由一对伪操作来实现的, 其一般格式为: 宏名 MACRO 哑参数1 , 哑参数2,其中,宏名是用户自定义的符号,也就是宏指令。MACRO是定义宏的伪指令,ENDM是定义宏结束的伪指令,二者必须成对出现。 MACR

2、O与ENDM之间是一组汇编语言语句。哑参数1、 哑参数2也称为形式参数,是可选项,不需要时可以省略。如果使用多个参数,各参数之间必须用逗号隔开。汇编程序在展开宏时, 将用实际的参数来替代这些形式参数。,一个简单的不带参数的宏指令如下, 它可以实现程序结束时返回DOS的功能:,FIFISH MACRO MOV AX, 4C00H INT 21H ENDM,10.1.2 宏调用伪指令 在汇编语言源程序的操作码字段写上宏名, 这就是宏调用。宏调用的一般格式如下: 宏名 参数 1 , 参数 2 其中,宏名是已定义的宏指令的名字。参数 1、 参数 2 是宏指令要求的实际参数,它们在宏调用的意义及其出现次

3、序必须与宏定义中的形式参数完全一致。 汇编程序在进行宏扩展时, 将用实在参数顺序替换形式参数。,10.1.3 宏扩展 宏汇编程序在对汇编语言源程序进行汇编的过程中,如果在操作码字段遇到一个宏指令的名字,它就自动用相应的宏体来代替宏指令,并且用宏调用中的实际参数替代宏定义中的哑参数。这一过程称为宏扩展。在宏扩展的过程中, 实参和形参一一对应,依次替换。一般来说,实参个数应该和形参相同。 宏汇编规定:如果实际参数的个数多于形式参数的个数,则多余参数将被忽略;如果形式参数的个数多于实际参数的个数, 则多余的形参将用“0”来代替。,例 10.1 下面给出了一个定义和使用FINISH宏指令的简单宏汇编语

4、言源程序和经宏汇编后产生的列表文件清单。 在宏扩展后的语句中间有一个数字 1,可以清楚地看出哪些是宏扩展的语句。 例 10.1 的宏汇编语言源程序如下:,FINISH MACRO MOV AX, 4C00H INT 21H ENDM,DATASEG SEGMENT MESSAGE DB THIS IS A SIMPLE PROGRAM TO TEST MACRO, 13, 10, $DATASEG ENDS STACK1 SEGMENT PARA STACK DW 32 DUP(0) STACK1 ENDS CODESEG SEGMENT ASSUME CS:CODESEG,DS:DATASE

5、G,ES:DATASEG, SS:STACK1 START: MOV AX, DATASEG MOV DS, AX MOV ES, AX,MOV AH, 09H LEA DX, MESSAGE INT 21H FINISH CODESEG ENDS END START FINISH MACRO MOV AX, 4C00H INT 21H ENDM,例 10.1 的源程序经宏汇编后产生的列表文件清单如下: 0000 DATASEG SEGMENT 0000 54 48 49 53 20 49 MESSAGE DB THIS IS A SIMPLE PROGRAM TO TEST MACRO, 1

6、3, 10, $ 53 20 41 20 53 49 4D 50 4C 45 20 50 52 4F 47 52 41 4D 20 54 4F 20 54 45 53 54 20 4D 49 43 52 4F 0D 0A 24,0029 DATASEG ENDS 0000 STACK1 SEGMENT PARA STACK 0000 0020 DW 32 DUP(0) 0000 0040 STACK1 ENDS 0000 CODESEG SEGMENT ASSUME CS: CODESEG, DS: DATASEG, ES: DATASEG, SS: STACK1 0000 B8 - - -

7、- R START: MOV AX, DATASEG 0003 8E D8 MOV DS, AX,0005 8E C0 MOV ES, AX 0007 B4 09 MOV AH, 09H 0009 8D 16 0000 R LEA DX, MESSAGE 000D CD 21 INT 21H FINISH 000F B8 4C00 1 MOV AX, 4C00H 0012 CD 21 1 INT 21H 0014 CODESEG ENDS END START,10.1.4 在宏中使用参数 在宏定义和宏调用中使用参数可以增加宏指令的灵活性。 宏定义中的形式参数可以是操作码、操作对象的全部或一部分

8、、 用户自定义的变量或标号、 寄存器号、 数值、 字符串等。 下面通过一些例子说明宏定义中各种参数的使用方法。 例 102 用参数代表用户自定义的变量和数值,定义任两个操作数相加并将和送往目的地址的宏指令如下:,0000 DATASEG SEGMENT 0000 54 48 49 53 20 49 MESSAGE DB THIS IS A SIMPLE PROGRAM TO TEST MACRO, 13, 10, $ 53 20 41 20 53 49 4D 50 4C 45 20 50 52 4F 47 52 41 4D 20 54 4F 20 54 45 53 54 20 4D 49 43

9、 52 4F 0D 0A 24 0029 DATASEG ENDS,0000 STACK1 SEGMENT PARA STACK 0000 0020 DW 32 DUP(0) 0000 0040 STACK1 ENDS 0000 CODESEG SEGMENT ASSUME CS: CODESEG, DS: DATASEG, ES: DATASEG, SS: STACK1,0000 B8- R START: MOV AX, DATASEG 0003 8E D8 MOV DS, AX 0005 8E C0 MOV ES, AX 0007 B4 09 MOV AH, 09H 0009 8D 16

10、0000 R LEA DX, MESSAGE 000D CD 21 INT 21H FINISH 000F B8 4C00 1 MOV AX, 4C00H 0012 CD 21 1 INT 21H 0014 CODESEG ENDS END START,10.1.4 在宏中使用参数 在宏定义和宏调用中使用参数可以增加宏指令的灵活性。宏定义中的形式参数可以是操作码、操作对象的全部或一部分、 用户自定义的变量或标号、 寄存器号、数值、字符串等。下面通过一些例子说明宏定义中各种参数的使用方法。 例 10.2 用参数代表用户自定义的变量和数值,定义任两个操作数相加并将和送往目的地址的宏指令如下:,AD

11、DM MACRO MEM1, MEM2, DSTM MOV AX, MEM1 ADD AX, MEM2 MOV DSTM, AX ENDM,宏调用为: ADDM ADR1, ADR2, ADR3 经汇编后扩展为: MOV AX, ADR1 ADD AX, ADR2 MOV ADR3, AX,例 10.3 用参数代表操作码。 将上述宏指令稍做修改,即可编写一个完成两个操作数相加或相减的宏指令。 COMPUM MACRO INSTR, MEM1, MEM2, DSTM MOV AX, MEM1 INSTR AX, MEM2 MOV DSTM, AX ENDM 若宏调用为: COMPUM ADD,

12、ADR1, ADR2, ADR3,则经汇编后宏扩展与上例相同。 若宏调用为: COMPUM SUB, ADR1, ADR2, ADR3 则经汇编后宏扩展为: MOV AX, ADR1 SUB AX, ADR2 MOV ADR3, AX,例 10.4 用参数代表操作码或寄存器名字的一部分, 定义将任一个寄存器左移或右移N位的宏指令如下:,RLS MACRO DIR, REG, CNT MOV CL, CNT RO&DIR REG, CL ENDM 宏调用为: RLS L, AX, 4,则经汇编后宏扩展为: MOV CL, 4 ROL AX, CL 宏调用为: RLS R, BX, 3 则经汇编后

13、宏扩展为: MOV CL, 3 ROR BX, CL,例10.5 用参数代替一个字符串,定义两个多精度数求和的宏指令如下:,MADDM MACRO LABEL, SRC, DST, LEN, SUM LEA SI, SRC LEA DI, DST MOV CX, LEN LEA BX, SUM CLC,LABEL: MOV AL, SI ADC AL, DI MOV BX, AL INC SI INC DI INC BX LOOP LABEL ENDM 宏调用为: MADDM1 LOOP1, ADR1, ADR2, 7, ADR3,经汇编后宏扩展为: LEASI, ADR1 LEADI, AD

14、R2 MOV CX, 7 LEA BX, ADR3 CLC LOOP1: MOV AL, SI ADC AL, DI MOV BX, AL INC SI INC DI INC BX LOOP LOOP1,10.1.5 标号的处理 在宏定义中,标号的处理方法有两种:一种是将标号作为参数来处理,在宏调用时给出实际使用的标号名称; 另一种是像高级语言一样, 在宏定义中使用局部标号。 前面例 10.5 使用的是第一种方法。下面将例 10.5 稍做修改来说明第二种处理标号的方法。,例 10.6 使用局部标号。,MADDM MACRO SRC, DST, LEN, SUM LOCAL LABEL LEA SI, SRC LEA

展开阅读全文
相关资源
相关搜索

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

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