文档介绍:第5章宏汇编语言
宏汇编语言的开发过程
宏汇编语言基本语句
编辑程序
. ASM
文件
汇编程序
. OBJ
文件
连接程序
. EXE
文件
Edit 等
TMASM
TLINK
宏汇编语言的开发过程
源程序的结构
一个完整的源程序在结构上必须做到:
用方式选择伪指令说明执行该程序的微处理
器类型;
用段定义语句定义每一个逻辑段;
用过程定义语句定义每一个子程序;
用ASSUME语句说明段约定;
用汇编结束语句说明源程序结束;
程序在完成预定功能之后,应能安全返回DOS。
宏汇编语言基本语句
.486 ;方式定义
DATA SEGMENT USE16 ;定义数据段
MESG DB ‘HELLO’,0DH,0AH,’$’
DATA ENDS
CODE SEGMENT USE16 ;定义代码段
ASSUME CS:CODE,DS:DATA ;说明段约定
BEG: MOV AX,DATA ;BEG为启动地址
MOV DS,AX
MOV CX,10
LAST: MOV AH,9
MOV DX,OFFSET MESG
INT 21H
LOOP LAST
MOV AH,4CH
INT 21H ;返回DOS
CODE ENDS
END BEG ;汇编结束
‘H’
‘E’
‘L’
‘L’
‘O’
0D
0A
‘$’
MESG
DS
CS
1. 方式选择伪指令
2. 段定义语句
3. 段约定语句
4. 过程定义语句
5. 汇编结束语句
这类语句是与程序结构密切相关的基本语句,用来说明MPU类型、段结构与寻址方式的段约定、目标块的定位和源程序结束。
1. 方式选择伪指令
功能:
通知汇编程序,当前的源程序指令是哪一种CPU指令,经过汇编链接之后生成的目标程序在哪一种CPU机型上运行。
不属于选定CPU的指令均为非法指令。80486指令集是在8086、8088、80286、80386基础上逐步发展起来的,很显然,80486的某些指令在早期的80X86系列是没有的,为了使汇编程序能够识别,在高版本的汇编程序中,对应于每一种CPU的指令系统,都有一个目标指令的集合。
指令以句号开头, 格式和功能如下:
· 8086 ;只汇编8086、8088指令。
· 286或·286C ;只汇编8086、8088及80286实模式指令
· 286P ;只汇编8086、8088及80286全部指令
· 386或·386C ;同·286,且汇编80386实模式指令
· 386P ;同·286P,且汇编80386全部指令
· 486或·486C ;同·386,且汇编80486实模式指令
· 486P ;同·386P,且汇编80486全部指令
通常,方式选择伪指令放在程序的头部,做为源程序的第一条语句。不设置方式选择伪指令与设置·8086是等价的。
2. 段定义语句
功能:
是逻辑段的定界语句,源程序中每一个逻辑段都必须用段定义语句定界。
段定义语句格式如下:
段名 SEGMENT 定位参数链接参数‘分类名’段长度
段体
段名 ENDS
SEGMENT/ENDS
是一对段定义语句,一个逻辑段从SEGMENT语句开始,到ENDS语句结束。
段名命名规则和变量名及标号名一样,它不能代表段体的性质,但为了阅读方便,习惯上总是根据段体的性质起一个适当的段名。通常用DATA做为数据段的段名,用STACK做为堆栈段的段名,CODE为代码段的段名。
定位参数,链接参数,‘分类名’
为段定义语句的3个属性参数,可以选用1~3个,也可以全部省略。
属性参数的功能:
为源程序的汇编、链接提供必要的信息。
(1) 定位参数
定位参数通知链接程序,逻辑段的目标代码在存储器中如何存放。
① BYTE字节地址:表明该逻辑段的目标代码可以从任意地址开始依次存放;
② WORD 字地址:表示该逻辑段的目标代码,从偶地址开始依次存放;
③ PARA (或者缺省) 节地址:表示该逻辑段的目标代码,从一个能被16整除的地址开始依次存放;
④ PAGE 页地址:表示该逻辑段的目标代码,从一个能被256整除的地址开始依次存放。
注意:
链接程序对于不同模块中的同名段进行链接时,对于有BYTE属性的段,总是紧接着前一段存放,不留空闲单元。对于有WORD属性的段,也是紧接前一段存放,最多留出一个空闲单元。