文档详情

第6章 高级汇编语言程序设计.ppt

发布:2017-05-21约4.09千字共18页下载文档
文本预览下载声明
* * 第6章 高级汇编语言程序设计 6.1 高级汇编技术 6.1.3 宏 * * 6.1.3 宏 1、宏定义 2、宏调用和宏展开 3、宏与子程序的区别 课本P166 * * 宏的概述 宏是自定义的汇编指令; 宏指令可代替一段汇编指令序列出现在源程序中; 使用目的是简化源程序。 start: mov ax,data mov ds,ax mov dx,offset string mov ah,9 int 21h mov ax,4c00h int 21h end start mainbegin dispmsg string mainend 0 start: end start * * 宏的相关概念 宏指令 可以代替一段汇编指令序列的自定义指令; 宏定义 将一段汇编指令序列定义成为宏的过程; 宏调用 在汇编语言程序中使用宏指令; 宏展开 宏汇编语言程序在汇编期间,自动用宏体中的指令序列代替宏指令的过程; 可在源程序的列表文件中查看 汇编时加参数“/L”即可生成列表文件; 例如:masm /L hong.asm * * 1、宏定义 宏的定义伪指令: 宏名 MACRO [形参1,形参2,……] …… ;宏定义体 ENDM 宏定义的说明 宏名:合法标识符,只出现一次; 宏定义体中可以包含指令、伪指令、其他宏等; 宏中可以没有参数,也可以包含若干参数。 宏定义的位置 在程序的开始(所有的代码之前); * * 宏定义举例 为DS赋值 显示字符串 汇编程序返回 mainbegin MACRO mov ax , 数据段名 mov ds , ax ENDM mainend MACRO mov ax ,4c00h int 21h ENDM dispmsg MACRO mess mov dx,offset mess mov ah,9 int 21h ENDM * * 2、宏调用和宏展开 不带参数的宏调用: 宏名 直接使用宏名,相当于无操作数的汇编指令; 汇编后,宏指令被展开; 包含参数的宏调用: 宏名 [实参1 , 实参2 , ……] 使用宏名的同时,要给出与形参相对应的实参; 汇编后,宏指令被展开,同时使用实参对应地取代形参; 宏调用时的实参应使展开后的汇编指令为合法指令; 实参的个数可以与形参的个数不相等; 实参过多——忽略多于参数;实参过少——采用默认值。 在不影响宏体中指令正确性的前提下,也可以默认为空! * * 例1. 定义一个将通用寄存器AX、BX、CX、DX入栈的宏。 宏定义: 宏调用: 宏展开: PUSHR MACRO PUSH AX PUSH BX PUSH CX PUSH DX ENDM PUSHR 1 PUSH AX 1 PUSH BX 1 PUSH CX 1 PUSH DX 数字1,表示宏的嵌套层数! * * MOV AX , DATA ADD [BX] , AX MOV AX , SI ADD BX , AX 例2. 定义一个将两个字变量相加的宏。 宏定义: 宏调用: 宏展开: 宏展开应用到程序中将会影响上下文的AX内容 MADD MACRO OPR1,OPR2 PUSH AX MOV AX , OPR1 ADD OPR2 , AX POP AX ENDM MADD SI , BX MADD DATA , [BX] MOV AX , OPR1 ADD OPR2 , AX PUSH AX PUSH AX POP AX POP AX * * 例3. 定义一个移位操作的宏。 移位指令: OPRD REG/MEM , 1/CL 宏定义 宏调用 宏展开 SHIFT MACRO OPR , OPRD , COUNT PUSH CX MOV CL , COUNT OPRD OPR , CL POP CX ENDM PUSH CX MOV CL , 1 ROR byte prt [BX] , CL POP CX PUSH CX MOV CL , 4 SHL AX , CL POP CX SHIFT AX , SHL , 4 SHIFT byte prt [BX] , ROR , 1 * * 例4. 从键盘读入两个字符串(长度80),合并后输出。 该程序中多次使用字符串的输入和输出的DOS功能调用,可定义为宏指
显示全部
相似文档