第 5 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院教学重点在掌握基本的汇编语言程序设计方法之后,了解提高编程效率的各种实用方法:
高级语言特性
宏结构
模块化第 5 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院
5.1 高级语言特性
MASM 6.0引入高级语言的程序设计特性
条件控制伪指令
.IF,ELSE,ENDIF
循环控制伪指令
.WHILE,ENDW,REPEAT,UNTIL
过程声明和过程调用伪指令
.PROTO,INVOKE
第 5 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院
5.2 宏结构程序设计宏汇编重复汇编条件汇编
—— 统称宏结构宏( Macro)是汇编语言的一个特点,它是与子程序类似又独具特色的另一种简化源程序的方法第 5 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院宏 —— 具有宏名的一段汇编语句序列
—— 宏定义 时书写宏指令 —— 这段汇编语句序列的缩写
—— 宏调用 时书写宏展开 —— 宏指令处用这段宏代替的过程
—— 宏汇编 时实现宏的参数 功能强大,颇具特色配合宏,还有 宏操作符 和有关伪指令
5.2.1 宏汇编宏定义 宏名 macro [形参表 ]
宏定义体
endm
mainbegin MACRO ;;定义名为 mainbegin的宏,无参数
mov ax,@data ;;宏定义体
mov ds,ax
ENDM ;;宏定义结束
mainend MACRO retnum ;;带有形参 retnum
mov al,retnum ;;宏定义中使用参数
mov ah,4ch
int 21h
ENDM
宏注释符宏调用 宏名 [实参表 ]
start,mainbegin ;宏调用,建立 DS内容
dispmsg string ;宏调用,显示字符串
mainend 0 ;宏调用,返回 DOS
end start
宏调用的实质是在汇编过程中进行宏展开
宏展开的具体过程是:当汇编程序扫描源程序遇到已有定义的宏调用时,即用相应的宏定义体取代源程序的宏指令,同时用位置匹配的实参对形参进行取代宏展开 宏展开 —— 在汇编时,用宏定义体的代码序列替代宏指令的过程 。
start,mainbegin ;宏指令
1 mov ax,@data ;宏展开
1 mov ds,ax
mainend 0 ;宏指令
1 mov al,0 ;宏展开
1 mov ah,4ch
1 int 21h
比较
仅是 源程序级 的 简化,
宏调用 在汇编时 进行程序语句的展开,不需要返回;不减小目标程序,执行速度没有改变
通过形参,实参结合实现参数传递,简捷直观,灵活多变
还是 目标程序级 的 简化,子程序调用 在执行时 由 CALL指令转向,
RET指令返回;形成的目标代码较短,执行速度减慢
需要利用寄存器,存储单元或堆栈等传递参数宏 子程序
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院
宏与子程序具有各自的特点,程序员应该根据具体问题选择使用那种方法
通常,当程序段较短或要求较快执行时,
应选用宏;当程序段较长或为减小目标代码时,要选用子程序比较结论宏 子程序
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院第 5 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院
5.2.2 重复汇编
重复汇编 指在汇编过程中,重复展开一段
( 基本 ) 相同的语句
重复汇编没有名字,不能被调用
重复汇编常用在宏定义体中,也可以在一般汇编语句中使用
重复汇编伪指令有三个:
REPEAT—— 按参数值重复
FOR—— 按参数个数重复
FORC—— 按参数的字符个数重复
最后,用 ENDM结束第 5 章
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院
5.2.3 条件汇编
条件汇编伪指令在汇编过程中,根据条件决定汇编的语句
IFxx 表达式 ;满足,汇编分支语句体 1
分支语句体 1
[ ELSE ;不满足,汇编分支语句体 2
分支语句体 2 ]
ENDIF ;条件汇编结束将程序分段,采用子程序或宏结构都是进行模块化程序设计介绍开发大型程序时采用的方法:
源程序文件的包含
目标模块连接
子程序库
5.3 模块化程序设计
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院
把源程序分放在几个文本文件中,在汇编时通过包含伪指令 INCLUDE结合成一体
INCLUDE 文件名
可将常用的子程序形成,ASM汇编语言源文件
可将常用的宏定义存放在,MAC宏库文件中
可将常量定义,声明语句组织在,INC包含文件中
源文件包含的操作步骤:
① 分别编辑生成各个文件
② 汇编,连接主程序文件
5.3.1 源程序文件的包含
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院
把常用子程序写成独立的源程序文件,单独汇编,形成子程序的目标文件,OBJ
主程序也经过独立汇编之后形成目标文件
连接程序将所有目标文件连接起来,最终产生可执行文件
模块连接的操作步骤:
① 分别编辑生成各个文件
② 分别汇编各个文件
③ 连接各个目标文件,形成可执行文件
5.3.2 目标代码文件的连接
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院
把常用子程序写成独立的源文件,单独汇编形成 OBJ文件后,存入 子程序库
主程序也单独汇编形成 OBJ文件
主程序连接时,调入子程序库中的子程序模块,产生最终的可执行文件
库文件调入的操作步骤:
① 分别编辑生成各个文件
② 分别汇编各个文件
③ 用库管理文件,将子程序模块添加到库文件中
④ 连接主程序,提供库文件,形成可执行文件
5.3.3 子程序库的调入
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院
HTTP://DLS.ZZU.EDU.CN 郑州大学远程教育学院第 5章 教学要求
本章要求学生了解如下内容:
MASM的高级语言程序设计特性
宏汇编
源程序包含,代码连接和子程序库程序设计方法