第四章宏汇编语言程序设计课件

上传人:我*** 文档编号:139028445 上传时间:2020-07-19 格式:PPT 页数:98 大小:648.50KB
返回 下载 相关 举报
第四章宏汇编语言程序设计课件_第1页
第1页 / 共98页
第四章宏汇编语言程序设计课件_第2页
第2页 / 共98页
第四章宏汇编语言程序设计课件_第3页
第3页 / 共98页
第四章宏汇编语言程序设计课件_第4页
第4页 / 共98页
第四章宏汇编语言程序设计课件_第5页
第5页 / 共98页
点击查看更多>>
资源描述

《第四章宏汇编语言程序设计课件》由会员分享,可在线阅读,更多相关《第四章宏汇编语言程序设计课件(98页珍藏版)》请在金锄头文库上搜索。

1、第四章 宏汇编语言程序设计,8 学时,目 录,4.1 汇编语言程序设计特点 4.2 8086宏汇编源程序的组成 4.3 8086宏汇编语言的基本语法 4.4 8086宏汇编语言常用伪指令 4.5 8086宏汇编语言程序设计技术,程序是一组为完成某种功能而按一定顺序(由算法确定)编排的指令序列。 本章将首先介绍8086宏汇编语言的基本语法及常用伪指令,然后用实例说明8086宏汇编语言源程序的设计方法。,4.1 汇编语言程序设计特点,汇编语言是一种用符号表示的、面向CPU指令系统的程序设计语言。汇编语言具有以下两个基本特点: 程序设计人员能更充分地利用机器硬件的全部功能,发挥机器的长处; 程序目标

2、代码占用内存少,执行速度快,效率高,具有实时性;,汇编语言与高级语言,由于汇编的特点,汇编语言常用于编写计算机系统程序、实时通信程序和实时控制程序。但汇编语言程序依赖于机器硬件,其通用性和移植性都较差。 相对于汇编语言,高级语言的编程方便快捷,通用性和移植性都较好,在一些涉及大量数据处理、人机界面等设计任务的应用程序中,采用高级语言编程更为合适。,从源程序获得目标程序的过程,为了能顺利完成汇编,用户必须为汇编程序提供一些额外的、与硬件有关的信息,如:程序使用的变量应分别存放在内存的哪个单元、堆栈应从内存的什么地址开始等等。,4.2 8086宏汇编源程序的组成,由 “指令”和 “伪指令”共同构成

3、的。 “指令”由8086CPU规定的; “伪指令”说明与硬件有关的信息; “段”结构 因为8086系统的存储器采用分段管理,段 (例4.1),; 段名1SEGMENT; 一个段的开始 语句1 语句2 段名1ENDS; 一个段的结束 ; 段名2SEGMENT; 另一个段的开始 段名2ENDS; 另一个段的结束 ; ; 其它段 ; END; 源代码结束,语 句,语句是由各种符号(标记)及分隔符按照一定的规则组织起来的一个有序序列。 标识符 操作符 操作数 注释 有三种基本语句: 指令性语句(指令)、指示性语句(伪指令)和宏指令。,指令性语句:即执行性语句(指令),与机器码一一对应,表示某种确定操作

4、,包括四部分: 标号: 指令操作码 操作数 ;注释 例: AGAN:ADC SUM,AX;累加 指示性语句:即说明性语句(伪指令),不对应机器码,只为汇编提供所需信息,由四部分组成: 名字 伪指令 操作数 ;注释 例:SUMDW 0;为结果保留一个字 宏指令:由伪指令定义的指令序列,包括宏定义、宏调用和宏扩展三部分,标识符字段,标识符字段由各种有效字符组成,一般表示符号地址,具有段基址、偏移量、类型三种属性。 很多情况下标识符字段是语句中的可选部分,主要为便于程序的读写方便而使用。 通常有: 标号 名字,操作符字段,操作符字段:由保留字组成,是语句中不可缺少的部分。 包括: 指令助记符 伪指令

5、助记符,操作数字段,操作数字段:表示操作符操作的对象。 操作数可能为以下几种情况: 常量操作数:如 34 等。 寄存器操作数:如 AX 等。 存储器操作数:如0100H 等。 表达式操作数:如AX+2、SEG NUM1等。,注释字段,注释字段:用于说明、解释程序使之便于阅读或检查的任何文字或字符,位于语句行的末尾,用分号( ; )引导。 注释对汇编不起任何作用,不对应于任何机器码,仅增强源程序的可读性。,DATASEGMENT;定义数据段 D1DB 5 DUP(?);连续的字节单元 CCEQU $D1;对单元计数 SUMDW 0;为结果保留一个字 DATAENDS;数据段定义结束 STACK

6、SEGMENT PARA STACK STACK;定义堆栈段 DB 100 DUP (?);100字节的栈空间 STACKENDS;堆栈段定义结束 CODESEGMENT;定义代码段 ASSUME DS:DATA,SS:STACK,CS:CODE;对各段进行说明 BEGIN:MOV AX,DATA; DS初始化为DATA MOV DS,AX LEA SI,D1;预置源数据的指针,例4.6: 多个连续字节单元的累加,MOV CX,CC;预置次数 LODS BYTE PTR SI;取一个数并修改指针 MOV AH,0;清AX的高字节 CLC;清CF位 AGAN:ADC SUM,AX;累加 LODS

7、 BYTE PTR SI;再取数并修改指针 LOOP AGAN;控制循环 MOV AH,4CH;完成,返回DOS INT 21H CODEENDS;代码段结束 ENDBEGIN;整个程序结束,4.3 8086宏汇编语言的基本语法,介绍8086宏汇编语言MASM5.0规定的一些基本语法,包括各种可使用的助记符、保留字,以及各种数据类型及表达式。,4.3.1 字符集,英文字母:包括大写字母AZ和小写字母az。宏汇编语言中的大小写字母的作用相同,不予区分。 阿拉伯数字:09。注:数字不用于标识符第一位 特殊符号:包括可打印字符和不可打印字符。其中: 可打印字符包括、$、使用数值表达式 ;(AL)=1

8、0H、CF=不变 MOV AL,80H ADD AL,90H ;使用加法指令 ;(AL) = 10H、CF = 1,逻辑运算符,逻辑运算符在两个操作数之间按位进行二进制布尔运算,结果产生确定的数值。 逻辑运算符与逻辑指令助记符形同意不同 例:AND BL, 46H AND 0FH ; 汇编后得到 “ AND BL, 06H ” 的目标码,关系运算符,在两个无符号数操作数之间进行大小关系比较 若关系满足则返回全1,否则返回全0。 例: MOV AX, 0A2H NE 02H ; 汇编后得到 “ MOV AX, 0FFFFH ” 的目标码,分析运算符,对单个操作数进行属性分解,分别返回不同属性的值

9、 SEG取变量或标号所在段的段寄存器值作为段基址,结果为16位值 OFFSET取变量或标号的段内偏移量,结果为16位值 TYPE取变量或标号的类型 LENGTH取DUP重复次数 SIZE取分配给变量的字节个数,例 4.13 /4.14,CSEG SEGMENT BUFF DW 10DUP(1234H),10H,00H COUN DD 12345678H CSEG EDNS,则:SEG BUFF = CSEG ;段基址 OFFSET BUFF = 0 ;偏移量 TYPE BUFF = 2(字) ;类型 SIZE BUFF = 10*2 = 20 ;字节数 LENGTH BUFF = 10 ;DU

10、P次数 HIGH 12A0H = 12H ;高字节 LOW 12A0H = 0A0H ;低字节,SEG COUN = CSEG OFFSET COUN = 22 TYPE COUN = 4(双字) SIZE COUN = 4 LENGTH COUN = 1,合成运算符,合成运算符修改已定义的单个操作数,重新生成段基址、偏移量相同而类型不同的新操作数。 有: PTR、THIS、SHORT,PTR:“新类型 PTR 原操作数”,新操作数的类型为表达式中指定的“新类型”,新操作数的段基址和偏移量与“原操作数”相同。 THIS:“THIS 新类型”,类似PTR,不同的是:新操作数的段基址和偏移量为汇编

11、过程中遇到THIS运算符时的当前值. SHORT:“SHORT Near-label”,表达式代表的新标号的类型为SHORT,4.4 8086宏汇编语言常用伪指令,8086宏汇编语言MASM5.0规定的常用伪指令,包括数据定义语句、程序结构语句、模块链接语句、列表控制语句、结构性数据语句、有关宏的语句、条件汇编语句等。,4.4.1数据定义伪指令,符号定义语句EQU COUNT EQU CX; 用COUNT代替CX通用寄存器 MEQU MOV; 用M代替MOV指令助记符 例 4.20 “$” 与EQU结合使用 BUFDW?, ? ; 定义两个字变量,共占用4个字节的内存空间 SUMDD?; 定义

12、一个双字变量,占用4个字节的内存空间 NO EQU$BUF; NO表示当前内存单元与BUF单元之间的“距离”, ; NO等同于立即数“8”,不占内存空间,符号定义语句 ;赋值 PP = 89FAH PP = PP+1; PP = 89FBH 等号语句与EQU语句的相同点在于:符号而非变量,故用EQU、= 定义的符号不占用存储器单元 区别在于:等号语句可以在同一源程序中重复定义符号而无需解除,数据定义语句DB、DW、DD等,用于为数据项分配存储单元并预置初值。 DB 变量为字节数据类型(8位) DW 变量为字数据类型(16位) DD 变量为双字数据类型(32位) DQ 变量为4字数据类型(64位

13、) DT 变量为10字节数据类型(80位),ONEDB 8; 给变量ONE分配一个字节,并预置初值为8 TWODB ?; 字节变量TWO初值不定 ST DB 96, 20, ?, 57; 以STR为首址连续分配4个字节的存储单元 STR DB How are you ? $ ; 定义字符串 TWIN DB 5 DUP( 0FFH );连续分配5个字节,初值均为0FFH DB 100 DUP( ? );连续分配100个字节单元,初值不定,DB 与DW的应用,DATA SEGMENT ARE1 DB 20H,30H ARE2 DW 2030H ARE3 DB A,B ARE4 DW AB DATA

14、 ENDS,ARE1,ARE2,ARE3,ARE4,4.4.2 程序结构伪指令,段定义语句 SEGMENT / ENDS 用于对 DS、ES、SS、CS 段的定义 语句格式: 段名 SEGMENT 定位选择 链接类型 类别标识符 段名 ENDS ENDS必须与SEGMENT成对出现,且段名必须一致。,段定义的相关约定,组合类型:表示与其它段的关系,为连接程序提供信息,可以有6种选择:,定位类型:规定段的起始边界,有4种选择: PAGE:段起始地址的最低8位必须为0。 PARA:段起始地址的最低4位必须为0。 WORD:段起始地址的最低1位必须为0,即从偶地址开始。 BYTE:段起始地址为任意值

15、,即从任何地址开始都行。 缺省类型为PARA。,NONE:本段与其它段逻辑上不发生关系,每段都有自己的基地址(缺省选择)。 PUBLIC:连接程序首先将本段与其它同名同类别的段相邻地连接在一起,然后为所有这些PUBLIC段指定一个共同的段基址。连接的先后次序由连接命令指定。,STACK:与PUBLIC同样处理,但此段作为堆栈段,SS指向第一个STACK段。 COMMON:本段与其它同名同类别段重叠,段基址与最后定义的相同,长度为同名段中最大段的长度。 AT表达式:连接程序把本段装在表达式值所指定的段地址(此方式不能指定代码段)。 MEMORY:同PUBLIC连接程序将本段定位在被连接在一起的其

16、它所有段之上。,类别:给各段的名字信息,连接程序将类别名相同的段组成一个段组用它们共同的名字作为这个段组的名字。类别必须用单引号括起来。,段定义的相关约定,例:STACKSEGMENT PARA STACK STACK,段说明伪指令ASSUME,ASSUME 伪指令仅用在代码段首行,代码段名 SEGMENT 相关约定 ASSUME CS:段名,DS:段名, 代码段内定义,指令集合 代码段名 ENDS 例:ASSUME DS:DATA,SS:STACK,CS:CODE,过程定义伪指令,PROC FAR 、ENDP 远过程定义伪指令 PROC NEAR、ENDP 近过程定义伪指令,过程名 PROC FAR(NEAR) 过程指令集合 RET 过程名 ENDP 注:过程定义必须在代码段内 PROC FAR 为定义远过程 PROC NEAR 为定义近过程,例 4.30,COD1SEGMENT ASSUME CS: COD1, ; 代码段中的其它语句(主

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

最新文档


当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

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