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

98
微微微 微微微微微微微 微微微微微微 微微微微微微 微微微 微微微微微微微微微 微微微 微微微微微微微微微 8 8 微微 微微

Upload: miracle

Post on 19-Jan-2016

146 views

Category:

Documents


0 download

DESCRIPTION

第四章 宏汇编语言程序设计. 8 学时. 目 录. 4.1 汇编语言程序设计特点 4.2 8086 宏汇编源程序的组成 4.3 8086 宏汇编语言的基本语法 4.4 8086 宏汇编语言常用伪指令 4.5 8086 宏汇编语言程序设计技术. 程序是一组为完成某种功能而按一定顺序(由算法确定)编排的 指令序列 。 本章将首先介绍 8086 宏汇编语言的基本语法及常用伪指令,然后用实例说明 8086 宏汇编语言源程序的设计方法。. 4.1 汇编语言程序设计特点. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

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

8 8 学时学时

Page 2: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

目 录目 录 4.1 4.1 汇编语言程序设计特点汇编语言程序设计特点 4.2 80864.2 8086 宏汇编源程序的组成宏汇编源程序的组成 4.3 80864.3 8086 宏汇编语言的基本语法宏汇编语言的基本语法 4.4 80864.4 8086 宏汇编语言常用伪指令宏汇编语言常用伪指令 4.5 80864.5 8086 宏汇编语言程序设计技术宏汇编语言程序设计技术

Page 3: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

程序是一组为完成某种功能而按一定顺序程序是一组为完成某种功能而按一定顺序(由算法确定)编排的(由算法确定)编排的指令序列指令序列。。

本章将首先介绍本章将首先介绍 80868086 宏汇编语言的基本语宏汇编语言的基本语法及常用伪指令,然后用实例说明法及常用伪指令,然后用实例说明 80868086 宏宏汇编语言源程序的设计方法。汇编语言源程序的设计方法。

Page 4: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

4.1 4.1 汇编语言程序设计特点汇编语言程序设计特点 汇编语言是一种用符号表示的汇编语言是一种用符号表示的、面向、面向 CPUCPU

指令系统指令系统的程序设计语言。汇编语言具有的程序设计语言。汇编语言具有以下以下两个基本特点:两个基本特点:

程序设计人员能更充分地利用机器硬件的程序设计人员能更充分地利用机器硬件的全部全部功能,发挥机器的长处;功能,发挥机器的长处;

程序目标代码占用内存少,执行程序目标代码占用内存少,执行速度快速度快,,效率效率高高,具有,具有实时性实时性;;

Page 5: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

汇编语言与高级语言汇编语言与高级语言 由于汇编的特点,由于汇编的特点,汇编语言汇编语言常用于编写计常用于编写计

算机算机系统程序系统程序、、实时实时通信程序和通信程序和实时实时控制控制程序。但汇编语言程序依赖于机器硬件,程序。但汇编语言程序依赖于机器硬件,其其通用性和移植性都较差通用性和移植性都较差。。

相对于汇编语言,相对于汇编语言,高级语言高级语言的的编程方便快编程方便快捷,通用性和移植性都较好捷,通用性和移植性都较好,在一些涉及,在一些涉及大量数据处理、人机界面等设计任务的应大量数据处理、人机界面等设计任务的应用程序中,采用高级语言编程更为合适。用程序中,采用高级语言编程更为合适。

Page 6: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

汇编语言源程序 机器语言程序(目标代码)

汇编(可由汇编程序完成)

高级语言源程序 编译或解释(可由编译程序完成)

从源程序获得目标程序的过程从源程序获得目标程序的过程

为了能顺利完成汇编,用户必须为汇编程序提供为了能顺利完成汇编,用户必须为汇编程序提供一些额外的、与硬件有关的信息,如:程序使用一些额外的、与硬件有关的信息,如:程序使用的变量应分别存放在内存的哪个单元、堆栈应从的变量应分别存放在内存的哪个单元、堆栈应从内存的什么地址开始等等。内存的什么地址开始等等。

Page 7: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

4.2 80864.2 8086 宏汇编源程序的组成宏汇编源程序的组成

由 “由 “指令指令”和 “”和 “伪指令伪指令”共同构成的。”共同构成的。 ““ 指令”由指令”由 8086CPU8086CPU 规定的;规定的; ““ 伪指令”说明与硬件有关的信息;伪指令”说明与硬件有关的信息;

““ 段段”结构”结构 因为因为 80868086 系统的存储器采用分段管理系统的存储器采用分段管理

Page 8: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

段 段 (( 例例 4.1)4.1); ――――――――――――――――; ――――――――――――――――――――――――――――――――――――――――

段名 1 SEGMENTSEGMENT ; 一个段的开始

语句 1

语句 2

……

段名 1 ENDSENDS ; 一个段的结束; ――――――――――――――――――――――――――――; ―――――――――――――――――――――――――――― --

段名 2 SEGMENTSEGMENT ; 另一个段的开始……

段名 2 ENDSENDS ; 另一个段的结束; ―――――――――――――――――――――――――――――; ―――――――――――――――――――――――――――――

…… ; 其它段; ―――――――――――――――――――――――――――――; ―――――――――――――――――――――――――――――

ENDEND ; 源代码结束

Page 9: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

语 句语 句 语句是由各种符号(标记)及分隔符按照语句是由各种符号(标记)及分隔符按照

一定的规则组织起来的一个有序序列。一定的规则组织起来的一个有序序列。标识符 操作符操作符 操作数操作数 注释

有三种基本语句有三种基本语句 : : 指令性指令性语句(指令)、语句(指令)、指示性指示性语句(伪指令)和语句(伪指令)和宏指令宏指令。。

Page 10: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

指令性语句指令性语句::即执行性语句即执行性语句 (( 指令指令 ),), 与机器码一一对与机器码一一对应,表示某种确定操作,包括四部分:应,表示某种确定操作,包括四部分:[ [ 标号:标号: ]] 指令操作码指令操作码 [ [ 操作数 操作数 ]] [;[; 注释 注释 ]]

例: 例: AGANAGAN :: ADCADC SUMSUM ,, AXAX ;; 累加累加

指示性语句指示性语句::即说明性语句即说明性语句 (( 伪指令伪指令 ),), 不对应机器码,不对应机器码,只为汇编提供所需信息,由四部分组成:只为汇编提供所需信息,由四部分组成:[ [ 名字 名字 ]] 伪指令 伪指令 [ [ 操作数 操作数 ]] [;[; 注释 注释 ]]

例:例: SUMSUM DW 0DW 0 ;; 为结果保留一个为结果保留一个字字

宏指令宏指令::由伪指令定义的指令序列,包括宏定义、宏由伪指令定义的指令序列,包括宏定义、宏调用和宏扩展三部分调用和宏扩展三部分

Page 11: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

标识符字段标识符字段 标识符字段由各种有效字符组成,一般表标识符字段由各种有效字符组成,一般表

示符号地址,具有示符号地址,具有段基址段基址、、偏移量偏移量、、类型类型三种属性。三种属性。

很多情况下标识符字段是语句中的很多情况下标识符字段是语句中的可选部可选部分分,主要为便于程序的读写方便而使用。,主要为便于程序的读写方便而使用。

通常有通常有 :: 标号标号 名字名字

Page 12: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

操作符字段操作符字段 操作符字段:由保留字组成,是语句中操作符字段:由保留字组成,是语句中不不

可缺少可缺少的部分。的部分。

包括包括 ::

指令助记符指令助记符伪指令助记符伪指令助记符

Page 13: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

操作数字段操作数字段

操作数字段操作数字段:表示操作符:表示操作符操作的对象操作的对象。。

操作数可能为以下几种情况:操作数可能为以下几种情况: 常量操作数:常量操作数:如如 34 34 等等。。 寄存器操作数:寄存器操作数:如 如 AXAX 等等。。 存储器操作数:如存储器操作数:如 [0100H][0100H] 等。等。 表达式操作数:如表达式操作数:如 [AX+2][AX+2] 、、 SEG NUM1SEG NUM1 等。等。

Page 14: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

注释字段注释字段 注释字段:用于说明、解释程序使之便于注释字段:用于说明、解释程序使之便于阅读或检查的任何文字或字符,位于语句阅读或检查的任何文字或字符,位于语句行的末尾,用行的末尾,用分号分号 (( ; ; ) )引导。引导。

注释注释对汇编不起任何作用对汇编不起任何作用,不对应于任何,不对应于任何机器码,仅增强源程序的可读性。机器码,仅增强源程序的可读性。

Page 15: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

DATADATA SEGMENTSEGMENT ;; 定义数据段定义数据段D1D1 DB 5 DUPDB 5 DUP (?)(?) ;; 连续的字节单元连续的字节单元CCCC EQU $EQU $ -- D1D1 ;; 对单元计数对单元计数SUMSUM DW 0DW 0 ;; 为结果保留一个字为结果保留一个字DATADATA ENDSENDS ;; 数据段定义结束数据段定义结束STACK SEGMENT PARA STACK ‘STACK’STACK SEGMENT PARA STACK ‘STACK’ ;; 定义堆栈段定义堆栈段

DB 100 DUP DB 100 DUP (?)(?) ;100;100 字节的栈空间字节的栈空间STACKSTACK ENDSENDS ;; 堆栈段定义结束堆栈段定义结束CODECODE SEGMENTSEGMENT ;; 定义代码段定义代码段

ASSUMEASSUME DS:DATA DS:DATA ,, SS:STACKSS:STACK ,, CS:CODECS:CODE;; 对各段进行说明对各段进行说明BEGINBEGIN :: MOV AXMOV AX ,, DATADATA ;; DSDS 初始化为初始化为 DATADATA

MOV DSMOV DS ,, AXAX

LEA SILEA SI ,, D1D1 ;; 预置源数据的指针预置源数据的指针

例例 4.6: 4.6: 多个连续字节单元的累加多个连续字节单元的累加

定义存储单元的数据

伪指令

定义堆栈

段定义语句段定义语句

作堆栈用的存储单元

指令

Page 16: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

MOV CXMOV CX ,, CCCC ;预置次数;预置次数LODS BYTE PTR [SI]LODS BYTE PTR [SI] ;取一个数并修改指针;取一个数并修改指针MOV AHMOV AH ,, 00 ;清;清 AXAX 的高字的高字

节节CLCCLC ;清;清 CFCF位位

AGANAGAN :: ADC SUMADC SUM ,, AXAX ;累加;累加LODS BYTE PTR [SI]LODS BYTE PTR [SI] ;再取数并修改指针;再取数并修改指针LOOP AGANLOOP AGAN ;控制循环;控制循环MOV AHMOV AH ,, 4CH4CH ;;完成,返回完成,返回 DOSDOS

INT 21HINT 21H

CODECODE ENDSENDS ;;代码段结束代码段结束ENDEND BEGINBEGIN ;;整个程序结束整个程序结束

段定义

汇编程序结束

Page 17: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

4.3 80864.3 8086 宏汇编语言的基本语法宏汇编语言的基本语法

介绍介绍 80868086 宏汇编语言宏汇编语言 MASM5.0MASM5.0 规定的一规定的一些基本语法,包括各种可使用的助记符、些基本语法,包括各种可使用的助记符、保留字,以及各种数据类型及表达式。保留字,以及各种数据类型及表达式。

Page 18: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

4.3.1 4.3.1 字符集字符集 英文字母:包括大写字母英文字母:包括大写字母 AA ~~ ZZ 和小写字母和小写字母

aa ~~ zz 。宏汇编语言中的大小写字母的作用相同,。宏汇编语言中的大小写字母的作用相同,不予区分不予区分。 。

阿拉伯数字阿拉伯数字 ::00 ~~ 99 。。注:数字不用于标识符第一位注:数字不用于标识符第一位 特殊符号:包括可打印字符和不可打印字符。特殊符号:包括可打印字符和不可打印字符。

其中:其中: 可打印字符包括可打印字符包括+、-、+、-、、、 @@ 、、 $$ 、、 && 等等。等等。 不可打印字符包括空格符、制表符(不可打印字符包括空格符、制表符( TabTab键)、回键)、回车符、换行符。车符、换行符。

Page 19: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

4.3.2 4.3.2 常量常量 数字常量数字常量

二进制数:以“二进制数:以“ BB”” 结尾,如结尾,如 0000110100001101BB ;; 八进制数:以“八进制数:以“ OO”” 结尾,如结尾,如 725725OO ;; 十六进制数:以“十六进制数:以“ HH”” 结尾,并且必须以数字结尾,并且必须以数字打头,即若最高位为字母打头,即若最高位为字母 AA~~ FF ,前面应加,前面应加 00 ,,如如 00A12A12HH ;;

十进制数:以“十进制数:以“ DD”” 结尾或无任何字母作结尾,结尾或无任何字母作结尾,如如 1010DD 、、 1010 。。

Page 20: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

字符串常量字符串常量 字符串常量表示为包含在两个字符串常量表示为包含在两个单引号单引号之间的一之间的一连串连串 ASCIIASCII 字符。当单引号本身作为一个串元字符。当单引号本身作为一个串元素时,需连写两个单引号。每个串元素的值定素时,需连写两个单引号。每个串元素的值定义为该元素所对应的义为该元素所对应的 11 字节字节 ASCIIASCII 码值码值。。

Page 21: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

4.3.3 4.3.3 保留字保留字 汇编源程序中汇编源程序中标识符不能使用标识符不能使用的字符串的字符串

8086CPU8086CPU 规定的所有规定的所有指令助记符指令助记符:如:如 MOVMOV 、、ADDADD 等。等。

8086CPU8086CPU 中各中各寄存器名寄存器名:包括:包括 1616位和位和 88位寄位寄存器。如存器。如 ALAL 、、 DHDH 、、 AXAX 、、 CSCS 、、 TFTF 等。等。

宏汇编程序规定的所有宏汇编程序规定的所有伪指令助记符伪指令助记符:如:如 ASSASSUMEUME 、、 DBDB 、、 DWDW 、、 DDDD 等。等。

宏汇编程序规定的宏汇编程序规定的其他助记符其他助记符:: ABSABS 、、 BYTEBYTE 、、DUPDUP 、、 EQEQ 、、 GEGE 、、 SEGSEG 、、 SIZESIZE 等。等。

Page 22: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

4.3.4 4.3.4 符号符号 符号是由用户自行定义的、具有特殊意义符号是由用户自行定义的、具有特殊意义

的字符序列,最长不超过的字符序列,最长不超过 3131 个字符(多余个字符(多余字符将被忽略)。字符将被忽略)。

符号由字母、数字符号由字母、数字(不可打头)(不可打头)以及特殊以及特殊字符(字符( __ 、、 @@ 、、??)组成。)组成。

不能与任何保留字相同。不能与任何保留字相同。 包括包括 ::

变量名、标号、段名、过程名变量名、标号、段名、过程名

Page 23: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

4.3.5 4.3.5 表达式表达式 由若干操作数和运算符组成的有意义的组由若干操作数和运算符组成的有意义的组

合序列。合序列。

表达式可出现于源程序的任何地方,表达式可出现于源程序的任何地方,

在在汇编过程中汇编过程中((而不是程序执行过程中而不是程序执行过程中))即可产生确定的值。即可产生确定的值。

Page 24: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

表达式中的操作数表达式中的操作数

常量操作数常量操作数:直接写出的数或用常量名表:直接写出的数或用常量名表示的数。示的数。

存储器操作数存储器操作数:可以为变量名或标号。:可以为变量名或标号。

Page 25: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

表达式中的运算符表达式中的运算符 多。多。

包括包括算术运算符算术运算符、、逻辑运算符逻辑运算符、、关系运算关系运算符符、、分析运算符分析运算符以及以及合成运算符合成运算符五种。五种。

有优先级的区别。有优先级的区别。 ((refref ::表表 4.1,4.2)4.1,4.2)

Page 26: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

算术运算符:算术运算符: ++ 、、 -- 、、 ** 、、 // 、、 MODMOD 、、 SHLSHL 、、 SHRSHR

逻辑运算符:逻辑运算符: ANDAND 、、 OROR 、、 XORXOR 、、 NOTNOT

关系运算符:关系运算符: EQEQ 、、 NENE 、、 GTGT 、 、 LTLT 、 、 GE GE 、、 LELE

分析运算符:分析运算符: SEGSEG 、、 OFFSETOFFSET 、、 TYPETYPE 、、 SIZESIZE 、、LENGTH LENGTH 、、 HIGHHIGH 、、 LOWLOW

综合运算符:综合运算符: PTRPTR 、、 DS:DS: 、、 THISTHIS 、、 SHORTSHORT

Page 27: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

算术运算符算术运算符• 数值表达式数值表达式中可使用所有算术运算符中可使用所有算术运算符• 地址表达式地址表达式仅使用‘仅使用‘ ++ 、、 --’’ 算术运算符算术运算符• 算术运算符算术运算符不影响标志位不影响标志位

例:完成例:完成 80H+90H80H+90H解:解: MOV ALMOV AL ,, 80H+90H80H+90H ;; 使用使用数值表达式数值表达式 ;(AL)=10H;(AL)=10H 、、 CF=CF= 不变不变 MOV ALMOV AL ,, 80H80H ADD ALADD AL ,, 90H90H ; ; 使用使用加法指令加法指令 ;(AL) = 10H;(AL) = 10H 、、 CF = 1CF = 1

Page 28: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

逻辑运算符逻辑运算符 逻辑运算符在两个操作数之间逻辑运算符在两个操作数之间按位按位进行二进行二进制布尔运算,结果产生确定的数值。进制布尔运算,结果产生确定的数值。

逻辑运算符与逻辑指令助记符逻辑运算符与逻辑指令助记符形同意不同形同意不同

例例 :: ANDAND BL,BL, 46 46HH AND AND 0F 0FHH

; ; 汇编后得到 “ 汇编后得到 “ ANDAND BL,BL, 0606H H ” ” 的目标码的目标码

Page 29: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

关系运算符关系运算符 在两个无符号数操作数之间进行大小关系比较在两个无符号数操作数之间进行大小关系比较

若关系满足则返回若关系满足则返回全全 11 ,否则返回,否则返回全全 00 。。

例例 ::

MOV AX, MOV AX, 0A2H 0A2H NENE 02H 02H

; ; 汇编后得到 “ 汇编后得到 “ MOV AX, MOV AX, 0FFFF0FFFFH H ” ” 的目标码的目标码

Page 30: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

分析运算符分析运算符 对单个操作数进行属性分解,分别返回不同属对单个操作数进行属性分解,分别返回不同属

性的值性的值 SEGSEG 取变量或标号所在段的段寄存器值取变量或标号所在段的段寄存器值

作为段基址,结果为作为段基址,结果为 1616 位值位值 OFFSETOFFSET 取变量或标号的段内偏移量,结果取变量或标号的段内偏移量,结果

为为 1616 位值位值 TYPETYPE 取变量或标号的类型取变量或标号的类型 LENGTHLENGTH 取取 DUPDUP 重复次数重复次数 SIZESIZE 取分配给变量的字节个数取分配给变量的字节个数

Page 31: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

例 例 4.13 /4.144.13 /4.14CSEG SEGMENTCSEG SEGMENT

BUFFBUFF DW DW 10DUP10DUP (( 1234H1234H ),), 10H10H ,, 00H00H

COUNCOUN DD DD 12345678H12345678H

CSEG EDNSCSEG EDNS

则: SEG BUFF = CSEG ;段基址 OFFSET BUFF = 0 ;偏移量 TYPE BUFF = 2 (字) ;类型 SIZE BUFF = 10*2 = 20 ;字节数 LENGTH BUFF = 10 ; DUP次数 HIGH 12A0H = 12H ;高字节 LOW 12A0H = 0A0H ;低字节

SEG COUN = CSEG

OFFSET COUN = 22

TYPE COUN = 4 (双字) SIZE COUN = 4

LENGTH COUN = 1

Page 32: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

合成运算符合成运算符

合成运算符修改合成运算符修改已定义已定义的单个操作数,重的单个操作数,重新生成段基址、偏移量相同而新生成段基址、偏移量相同而类型不同类型不同的的新操作数新操作数。。

有有 : : PTRPTR 、、 THISTHIS 、、 SHORTSHORT

Page 33: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

PTRPTR :“新类型 :“新类型 PTRPTR 原操作数”,新操原操作数”,新操作数的类型为表达式中指定的“新类型”作数的类型为表达式中指定的“新类型” ,,新操作数的段基址和偏移量与“原操作数”新操作数的段基址和偏移量与“原操作数”相同。相同。

THISTHIS :“:“ THISTHIS 新类型”,类似新类型”,类似 PTRPTR ,,不不同的是同的是 ::新操作数的段基址和偏移量为汇编新操作数的段基址和偏移量为汇编过程中遇到过程中遇到 THISTHIS运算符时的当前值运算符时的当前值 ..

SHORTSHORT :“:“ SHORTSHORT Near-labelNear-label”” ,表达式,表达式代表的新标号的类型为代表的新标号的类型为 SHORTSHORT

Page 34: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

4.4 80864.4 8086 宏汇编语言常用伪指令宏汇编语言常用伪指令

80868086 宏汇编语言宏汇编语言 MASM5.0MASM5.0 规定的常用伪规定的常用伪指令,包括指令,包括数据定义语句、程序结构语句、数据定义语句、程序结构语句、模块链接语句、列表控制语句、结构性数模块链接语句、列表控制语句、结构性数据语句、有关宏的语句、条件汇编语句据语句、有关宏的语句、条件汇编语句等等。。

Page 35: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

4.4.14.4.1 数据定义伪指令数据定义伪指令 符号定义语句符号定义语句 EQUEQU

COUNT COUNT EQUEQU CX CX ; ; 用用 COUNTCOUNT 代替代替 CXCX 通用寄存器通用寄存器

MM EQUEQU MOV MOV ; ; 用用 MM 代替代替MOVMOV 指令助记符指令助记符

例例 4.204.20 “$” “$” 与与 EQUEQU 结合使用结合使用BUFBUF DWDW ?, ? ?, ? ; ; 定义两个字变量,共占用定义两个字变量,共占用 44 个字节的内存空间个字节的内存空间

SUMSUM DDDD ?? ; ; 定义一个双字变量,占用定义一个双字变量,占用 44 个字节的内存空间个字节的内存空间

NONO EQUEQU $$ -- BUFBUF ; NO; NO 表示当前内存单元与表示当前内存单元与 BUFBUF 单元之单元之间的“间的“距离距离”,”,

; NO; NO 等同于立即数“等同于立即数“ 8”8” ,不占内存空间,不占内存空间

Page 36: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

符号定义语句 符号定义语句 == ;赋值;赋值PP PP == 89FAH 89FAH

PP PP == PP+1 PP+1 ; PP = 89FBH; PP = 89FBH

等号语句等号语句与与 EQUEQU 语句语句的相同点在于的相同点在于 :: 符号符号而非变量,故用而非变量,故用 EQUEQU 、、 == 定义的符号定义的符号不占不占用存储器单元用存储器单元

区别在于区别在于 :: 等号语句等号语句可以在同一源程序中可以在同一源程序中重重复定义复定义符号而符号而无需解除无需解除

Page 37: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

数据定义语句数据定义语句 DBDB 、、 DWDW 、、 DDDD 等等 用于为数据项分配存储单元并预置初值。用于为数据项分配存储单元并预置初值。

DBDB —— —— 变量为变量为字节字节数据类型(数据类型( 88 位位))DWDW———— 变量为变量为字字数据类型(数据类型( 1616 位位))DD DD —— —— 变量为变量为双字双字数据类型(数据类型( 3232 位位))DQ DQ —— —— 变量为变量为 44 字字数据类型(数据类型( 6464 位位))DT DT ———— 变量为变量为 1010 字节字节数据类型(数据类型( 8080位位))

Page 38: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

ONEONE DBDB 8 8 ; ; 给变量给变量 ONEONE 分配一个字节分配一个字节,并,并预置初值为预置初值为 88

TWOTWO DBDB ? ? ; ; 字节变量字节变量 TWOTWO初值不定初值不定

ST ST DB DB 96, 20, ?, 96, 20, ?, -- 5757 ; ; 以以 STRSTR 为首址为首址连续分配连续分配44 个字节的存储单元个字节的存储单元

STR STR DBDB ‘How are you ? $ ’ ‘How are you ? $ ’ ; ; 定义定义字符串字符串

TWIN TWIN DBDB 5 5 DUPDUP( 0FFH )( 0FFH ) ;;连续分配连续分配 55 个字节个字节,,初值均为初值均为 0FFH0FFH

DBDB 100 100 DUPDUP( ? )( ? ) ;;连续分配连续分配 100100 个字节个字节单元,单元,初值不定初值不定

Page 39: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

DB DB 与与 DWDW 的应用的应用

DATA DATA SEGMENTSEGMENT

ARE1 ARE1 DBDB 20H20H ,, 30H 30H

ARE2 ARE2 DWDW 2030H 2030H

ARE3 ARE3 DBDB ‘A’‘A’ ,‘,‘ B’ B’

ARE4 ARE4 DWDW ‘AB’ ‘AB’

DATA DATA ENDSENDS41H41H

42H42H

42H42H

41H41H

20H20H

30H30H

30H30H

20H20HARE1ARE1

ARE2ARE2

ARE3ARE3

ARE4ARE4

Page 40: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

4.4.2 4.4.2 程序结构伪指令程序结构伪指令 段定义语句 段定义语句 SEGMENT SEGMENT / / ENDSENDS

用于对 用于对 DSDS 、、 ESES 、、 SSSS 、、 CSCS 段的定义段的定义 语句格式:语句格式:

段名段名 SEGMENT SEGMENT [ [ 定位选择 定位选择 ] [ ] [ 链接类型 链接类型 ] [‘] [‘ 类别标识类别标识符’符’ ]]

…………

段名段名 ENDSENDS

ENDSENDS 必须与必须与 SEGMENTSEGMENT 成对出现,且段名必须成对出现,且段名必须一致。一致。

Page 41: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

段定义的相关约定段定义的相关约定

组合类型组合类型:表示与其它段的关系,为连接程序提供:表示与其它段的关系,为连接程序提供信息,可以有信息,可以有 66 种选择:种选择:

定位类型定位类型:规定段的:规定段的起始边界起始边界,有,有 44 种选择:种选择:PAGEPAGE :段起始地址的:段起始地址的最低最低 88位位必须为必须为 00 。。PARAPARA :段起始地址的:段起始地址的最低最低 44位位必须为必须为 00 。。WORDWORD :段起始地址的:段起始地址的最低最低 11位位必须为必须为 00 ,即从偶地址开,即从偶地址开始。始。BYTEBYTE :段起始地址为:段起始地址为任意值任意值,即从任何地址开始都行。,即从任何地址开始都行。缺省类型为缺省类型为 PARAPARA 。。

NONENONE :本段与其它段逻辑上:本段与其它段逻辑上不发生关系不发生关系,每段都有自己,每段都有自己的基地址的基地址 (( 缺省选择缺省选择 )) 。。PUBLICPUBLIC :连接程序首先将本段与其它:连接程序首先将本段与其它同名同类别的段相同名同类别的段相邻地连接邻地连接在一起,然后为所有这些在一起,然后为所有这些 PUBLICPUBLIC 段指定一个段指定一个共同共同的段基址的段基址。连接的先后次序由连接命令指定。。连接的先后次序由连接命令指定。

Page 42: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

STACKSTACK :与:与 PUBLICPUBLIC 同样处理,但此段作为堆栈段,同样处理,但此段作为堆栈段, SSSS指向第一个指向第一个 STACKSTACK 段段。。COMMONCOMMON :本段与其它:本段与其它同名同类别段重叠同名同类别段重叠,段基址与最,段基址与最后定义的相同,长度为同名段中最大段的长度。后定义的相同,长度为同名段中最大段的长度。ATAT 表达式:连接程序把本段装在表达式值所表达式:连接程序把本段装在表达式值所指定的段地址指定的段地址(此方式不能指定代码段)。(此方式不能指定代码段)。MEMORYMEMORY :同:同 PUBLICPUBLIC连接程序将本段定位在被连接在连接程序将本段定位在被连接在一起的其它所有段之上。一起的其它所有段之上。

类别:给各段的名字信息,连接程序将类别名相同的段组成一个段组用它们共同的名字作为这个段组的名字。类别必须用单引号括起来。

段定义的相关约定段定义的相关约定

例:例: STACKSTACK SEGMENT PARA STACK ‘STACK’SEGMENT PARA STACK ‘STACK’

Page 43: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

段说明伪指令段说明伪指令 ASSUMEASSUMEASSUME ASSUME 伪指令伪指令仅用在仅用在代码段首行代码段首行

代码段名代码段名 SEGMENT [SEGMENT [ 相关约定相关约定 ]]

ASSUME ASSUME CS:CS: 段名,段名, DS:DS: 段名,…段名,…

〈代码段内定义,指令集合〉〈代码段内定义,指令集合〉

代码段名代码段名 ENDSENDS

例:例: ASSUMEASSUME DS DS::DATADATA ,, SSSS::STACKSTACK ,, CSCS::CODCODEE

Page 44: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

过程定义伪指令过程定义伪指令PROC FAR PROC FAR 、、 ENDP ENDP —— —— 远远过程定义伪指令过程定义伪指令PROC NEARPROC NEAR 、、 ENDP ENDP —— —— 近近过程定义伪指令过程定义伪指令

过程名过程名 PROC FARPROC FAR (( NEARNEAR )) 〈过程指令集合〉〈过程指令集合〉 RETRET

过程名 过程名 ENDPENDP

注:过程定义必须在代码段内注:过程定义必须在代码段内 PROC FAR PROC FAR 为定义远过程为定义远过程 PROC NEAR PROC NEAR 为定义近过程为定义近过程

Page 45: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

例 例 4.304.30COD1COD1 SEGMENTSEGMENT

ASSUMEASSUME CS: CS: COD1 COD1, ……, ……

………… ; ; 代码段中的其它语句(主程序)代码段中的其它语句(主程序)SUB1SUB1 PROCPROC FARFAR ; ; 名为名为 SUB1SUB1 的的 FARFAR 过程开过程开

始始 ……

RETRET ; ; 返回返回SUB1SUB1 ENDPENDP ; SUB1; SUB1 结束结束

SUB2SUB2 PROCPROC ; ; 名为名为 SUB2SUB2 的的 NEARNEAR 过程开始过程开始 ……

RETRET ; ; 返回返回……

SUB2SUB2 ENDPENDP ; SUB2; SUB2 结束结束………… ; ; 可能定义的其它过程可能定义的其它过程

COD1COD1 ENDSENDS ; ; 代码段结束代码段结束

Page 46: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

段内定位语句段内定位语句 ORGORG

语句格式:语句格式: ORGORG 表达式或常量表达式或常量

ORGORG 语句之后段内所有的数据或代码均以语句之后段内所有的数据或代码均以表达式或常量的值为表达式或常量的值为起始偏移量起始偏移量连续存放,连续存放,除非遇到另一个除非遇到另一个 ORGORG 语句。语句。

此语句本身并不占内存。此语句本身并不占内存。

Page 47: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

例例

DATADATA SEGMENTSEGMENT

ORGORG 0004H 0004H

AVR1 DW 2030HAVR1 DW 2030H

AVR2 DB 40HAVR2 DB 40H

DWVR DW OFFSET AVR1DWVR DW OFFSET AVR1

DDVR DD AVR2DDVR DD AVR2

DATADATA ENDSENDS00H00H

20H20H

00H00H

06H06H

00H00H04H04H

40H40H

20H20H

30H30HAVR1AVR1

AVR2AVR2

DWVRDWVR

DDVRDDVR

0004H0004H

0006H0006H

0007H0007H

0009H0009H

设设 DATADATA 的段首地址为的段首地址为 2000H2000H

Page 48: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

与宏有关的伪指令与宏有关的伪指令 为减少重复编写相同语句段的工作,我们为减少重复编写相同语句段的工作,我们

可以使用“可以使用“宏宏”功能”功能

宏定义是指宏定义是指用一个标识符用一个标识符((宏名宏名)来)来代替代替一组指令序列一组指令序列(可同时包含指令性语句和(可同时包含指令性语句和指示性语句)指示性语句)

宏功能的使用过程是:宏功能的使用过程是:宏定义、宏调用、宏定义、宏调用、宏展开宏展开。。

Page 49: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

宏定义语句 宏定义语句 MACRO MACRO / / ENDMENDM

宏取消语句宏取消语句 PURGEPURGE

宏标号定义语句宏标号定义语句 LOCALLOCAL

重复汇编语句重复汇编语句 RETPRETP 、、 IRPIRP 、、 IRPCIRPC

Page 50: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

条件汇编伪指令条件汇编伪指令 条件汇编是指按照给定的条件对某部分指条件汇编是指按照给定的条件对某部分指

定的源程序进行或不进行汇编。定的源程序进行或不进行汇编。 基本格式基本格式

IF IF 条件条件 ; ; 条件汇编开始条件汇编开始 …… …… ; ; 语句体语句体 11

[ ELSE [ ELSE

…… …… ]] ; ; 语句体语句体 22

ENDIFENDIF ; ; 结束结束

Page 51: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

结构定义伪指令结构定义伪指令 STRUCSTRUC 、、 ENDSENDS 结构定义 结构定义

结构名标识符结构名标识符 STRUCSTRUC ……………………

结构名标识符结构名标识符 ENDSENDS 注:结构定义注:结构定义在数在数 据段定义中完成据段定义中完成

结构变量定义并保留存储单元结构变量定义并保留存储单元 结构变量名 结构名 结构变量名 结构名 < >< > 结构变量定义并赋值结构变量定义并赋值 结构变量名 结构名 结构变量名 结构名 << 结构字段名值结构字段名值表表 >>

结构字段名的引用结构字段名的引用结构变量名结构变量名 . . 结构字段名结构字段名结构变量名指针结构变量名指针 . . 结构字段名结构字段名

Page 52: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

4.5 80864.5 8086 宏汇编语言程序设计技术宏汇编语言程序设计技术

与绝大多数高级语言与绝大多数高级语言相同相同的是的是 : : 汇编语言汇编语言是是结构化结构化的语言。一个大的汇编源程序可的语言。一个大的汇编源程序可以由多个“以由多个“模块模块”组成,而每个模块则由”组成,而每个模块则由一个或多个“一个或多个“段段”构成。”构成。

与高级语言与高级语言不同不同,使用汇编语言编程时设,使用汇编语言编程时设计者需同时使用计者需同时使用指令指令和和伪指令伪指令。。

Page 53: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

汇编源程序的基本结构形式汇编源程序的基本结构形式 模块模块和和段段

一个汇编“一个汇编“模块模块”可以包含一个或几个长度小于”可以包含一个或几个长度小于 664KB4KB 的“的“段段””

80868086 只有只有 44 个个段寄存器(段寄存器( CSCS 、、 DSDS 、、 SSSS 和和 EESS )) CS: CS: 程序段程序段 DS: DS: 数据段数据段 SS: SS: 堆栈段堆栈段 ES: ES: 附加段附加段 (( 可选可选 ))

Page 54: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

DATADATA SEGMENTSEGMENT ;; 定义数据段定义数据段D1D1 DB 5 DUPDB 5 DUP (?)(?) ;;连续的字节单元连续的字节单元CCCC EQU $EQU $ -- D1D1 ;; 对单元计数对单元计数SUMSUM DW 0DW 0 ;; 为结果保留一个字为结果保留一个字DATADATA ENDSENDS ;; 数据段定义结束数据段定义结束STACK SEGMENT PARA STACK ‘STACK’STACK SEGMENT PARA STACK ‘STACK’ ;; 定义堆栈段定义堆栈段

DB 100 DUP DB 100 DUP (?)(?) ;100;100 字节的栈空间字节的栈空间STACKSTACK ENDSENDS ;; 堆栈段定义结束堆栈段定义结束CODECODE SEGMENTSEGMENT ;; 定义代码段定义代码段

ASSUMEASSUME DS:DATA DS:DATA ,, SS:STACKSS:STACK ,, CS:CODE CS:CODE ;; 对各段进行说明对各段进行说明BEGINBEGIN :: MOV AXMOV AX ,, DATADATA ;;DSDS初始化初始化为为 DATADATA

MOV DSMOV DS ,, AXAX

LEA SILEA SI ,, D1D1 ;;预置源数据的指针预置源数据的指针

回顾 例回顾 例 4.64.6

定义存储单元的数据

伪指令

定义堆栈

段定义语句段定义语句

指令

Page 55: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

MOV CXMOV CX ,, CCCC ;预置次数;预置次数LODS BYTE PTR [SI]LODS BYTE PTR [SI] ;取一个数并修改指针;取一个数并修改指针MOV AHMOV AH ,, 00 ;清;清 AXAX 的高字节的高字节CLCCLC ;清;清 CFCF位位

AGANAGAN :: ADC SUMADC SUM ,, AXAX ;累加;累加LODS BYTE PTR [SI]LODS BYTE PTR [SI] ;再取数并修改指针;再取数并修改指针LOOP AGANLOOP AGAN ;控制循环;控制循环MOV AHMOV AH ,, 4CH4CH ;;完成,返回完成,返回 DOSDOS

INT 21HINT 21H

CODECODE ENDSENDS ;;代码段结束代码段结束ENDEND BEGINBEGIN ;;整个程序结束整个程序结束

段定义

汇编程序结束

Page 56: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

关于返回关于返回 DOSDOS

在在 DOSDOS环境下运行环境下运行 MASM-86MASM-86 汇编语言程汇编语言程序,如不能正确返回序,如不能正确返回 DOSDOS ,则会出现,则会出现死循死循环或死机环或死机。。

经典方法:经典方法: MOVMOV AH AH ,, 4C4CHHINTINT 21 21HH

Page 57: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

汇编源程序的设计步骤汇编源程序的设计步骤

分析问题,建立数学模型分析问题,建立数学模型 确定最佳算法确定最佳算法 合理分配存储单元和寄存器合理分配存储单元和寄存器 绘制流程图绘制流程图 编写程序编写程序 调试程序调试程序

Page 58: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

汇编语言程序上机调试过程汇编语言程序上机调试过程 源程序的源程序的编辑编辑

用 用 EDIT.COMEDIT.COM 产生源程序文件如: 产生源程序文件如: *.ASM*.ASM

目标程序的目标程序的汇编汇编 ( ( 编译编译 )) 用 用 MASM.EXEMASM.EXE 产生目标程序文件如: 产生目标程序文件如: *.OBJ*.OBJ

执行程序的执行程序的连接连接 用 用 LINK.EXELINK.EXE 产生执行程序文件如: 产生执行程序文件如: *.EXE*.EXE

程序的程序的调试调试 用用 DEBUG.EXEDEBUG.EXE

测试测试,若有问题返回第一步。,若有问题返回第一步。

Page 59: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

有关的文件类型有关的文件类型

11 ..源程序文件:源程序文件: 扩展名为扩展名为 .ASM.ASM

22 ..目标文件:目标文件: 扩展名为扩展名为 .OBJ.OBJ

33 ..列表文件:列表文件: 扩展名为扩展名为 .LST.LST

44 ..交叉参考文件:交叉参考文件: 扩展名为扩展名为 .CRF.CRF

55 ..可执行文件:可执行文件: 扩展名为扩展名为 .EXE.EXE

66 ..映像文件:映像文件: 扩展名为扩展名为 .MAP.MAP

77 ..库文件:库文件: 扩展名为扩展名为 .LIB.LIB

Page 60: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

4.5.3 4.5.3 模块化设计方法 模块化设计方法

模块化设计方法模块化设计方法 ““自顶向下,逐步细化自顶向下,逐步细化” ”

结构化编码方法 结构化编码方法 顺序顺序、、分支分支、、循环循环三种基本结构三种基本结构

Page 61: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

顺序程序设计顺序程序设计指令指针指令指针 IPIP 值值线性增加线性增加

条件程序设计条件程序设计IPIP 值受标志位的影响而值受标志位的影响而跳变跳变

循环程序设计循环程序设计IPIP 值受计数器值受计数器 CXCX 中的值不为零而中的值不为零而循循

环环

Page 62: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

顺序结构 (直线型结构 )顺序结构 (直线型结构 ) 例例 4. 514. 51 ::

编程计算表达式编程计算表达式 Z = XZ = X22-Y/5-Y/5 的值,其中的值,其中 AA 、、 BB为带符号字节整数,为带符号字节整数, ZZ 为带符号字整数。为带符号字整数。

(( BXBX )) <= X*X<= X*X

(( AXAX )) <= Y/5<= Y/5

Z <=Z <= (( BXBX )-()-( AXAX ))

开 始开 始

结束结束

PUSHPUSH DSDS

SUBSUB AX, AXAX, AX

PUSHPUSH AXAX

MOVMOV AX, AX, DATDAT

MOVMOV DS, AXDS, AXMOVMOV AL, XAL, X

IMULIMUL ALAL

MOVMOV BX, AXBX, AX MOVMOV AL, YAL, Y

CBWCBW

MOVMOV CL, 5CL, 5

IDIVIDIV CLCL

CBWCBWSUBSUB BX, AXBX, AX

MOVMOV Z, BXZ, BX

RETRET

Page 63: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

程 序程 序

;-- ;-- 数据段定义 数据段定义 --------------------------------------------------------------------

DATDAT SEGMENTSEGMENT

XX DBDB 1010

YY DBDB - 20- 20

ZZ DWDW ??

DATDAT ENDSENDS

Page 64: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

程序(续)程序(续);-- ;-- 代码段定义 代码段定义 --------------------------------------------------------------------

CODCOD SEGMENTSEGMENT

ASSUME DS: ASSUME DS: DATDAT, CS: , CS: CODCOD

MAINMAIN PROCPROC FARFAR

PUSHPUSH DSDS ; ; 保存返回地址保存返回地址SUBSUB AX, AXAX, AX

PUSHPUSH AXAX

MOVMOV AX, DAT AX, DAT

MOVMOV DS, AXDS, AX ; ; 初始化初始化 DSDS

Page 65: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

;----------------------------------------------------------------------------;----------------------------------------------------------------------------

MOVMOV AL, XAL, X

IMULIMUL ALAL

MOVMOV BX, AXBX, AX ; ; (( BXBX )) <= X*X<= X*X

;-----------------------------------------------;-----------------------------------------------

MOVMOV AL, YAL, Y

CBWCBW ; ; 将被除数扩展为字数据将被除数扩展为字数据MOVMOV CL, 5CL, 5

IDIVIDIV CLCL

CBWCBW ; ; (( AXAX )) <= Y/5<= Y/5

;------------------------------------------------;------------------------------------------------

SUBSUB BX, AXBX, AX

MOVMOV Z, BXZ, BX ; Z <= ; Z <= (( BXBX )-()-( AXAX ))

程序(续)程序(续)

Page 66: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

程序(续):过程的结束程序(续):过程的结束

;----------------------------------------------------;----------------------------------------------------

RETRET ; ; 返回返回 DOSDOS

MAINMAIN ENDPENDP

CODCOD ENDSENDS

ENDEND MAINMAIN

Page 67: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

分支结构 分支结构 例例 4. 52 4. 52 编程实现下列函数的功能,其中编程实现下列函数的功能,其中

XX 、、 YY 为无符号字节数为无符号字节数

YX

YX

YX

Z

1

0

1

Page 68: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

流程图流程图

(( ALAL )) <= X<= X

(( BLBL )) <= Y<= Y

开 始开 始

(AL)=(BL)?(AL)=(BL)?

Z <= 0Z <= 0

YY

Z <= 1Z <= 1

YY(AL)>(BL)?(AL)>(BL)?

NN

Z <= -1Z <= -1

NN

结束结束

PUSHPUSH DSDS

SUBSUB AX, AXAX, AX

PUSHPUSH AXAX

MOVMOV AX, AX, DATDAT

MOVMOV DS, AXDS, AX

CMPCMP AL, BLAL, BL

JEJE C1C1

JAJA C2C2

EXT:EXT: MOV Z, ALMOV Z, AL

RETRET

MOVMOV AL, XAL, X

MOVMOV BL, YBL, Y

C1:C1:

MOVMOV AL, 0AL, 0

JMPJMP EXTEXT

C2:C2:

MOVMOV AL, 1AL, 1

JMPJMP EXTEXT

MOV AL, -1MOV AL, -1

Page 69: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

程 序程 序;-- ;-- 数据段定义 数据段定义 --------------------------------------------------------------------

DATDAT SEGMENTSEGMENT

XX DBDB 242242

YY DBDB 6767

ZZ DBDB ??

DATDAT ENDSENDS

;-- ;-- 代码段定义 代码段定义 --------------------------------------------------------------------

CODCOD SEGMENTSEGMENT

ASSUMEASSUME DS: DS: DATDAT, CS: , CS: CODCOD

MAINMAIN PROCPROC FARFAR

PUSHPUSH DSDS ; ; 保存返回地址保存返回地址SUBSUB AX, AXAX, AX

PUSHPUSH AXAX

MOVMOV AX, DATAX, DAT

MOVMOV DS, AXDS, AX ; ; 初始化初始化 DSDS

Page 70: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

;---------------------------------------------------------------------------------------;---------------------------------------------------------------------------------------MOVMOV AL, XAL, XMOVMOV BL, YBL, YCMPCMP AL, BLAL, BLJEJE C1C1 ; (; (ALAL)) == ((BLBL) ) 则跳转至则跳转至 C1C1 ,否则继续执行,否则继续执行JAJA C2C2 ; (; (ALAL))>> ( (BLBL) ) 则跳转至则跳转至 C2C2 ,否则继续执行,否则继续执行MOVMOV AL, -1AL, -1

EXT:EXT: MOVMOV Z, ALZ, ALRETRET ; ; 返回返回 DOSDOS

C1:C1: MOVMOV AL, 0AL, 0JMPJMP EXTEXT

C2:C2: MOVMOV AL, 1AL, 1JMPJMP EXTEXT

;----------------------------------------------------------------------------------------;----------------------------------------------------------------------------------------MAINMAIN ENDPENDPCODCOD ENDSENDS

ENDEND MAINMAIN

Page 71: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

循环结构循环结构……

循环条件初始化

循环语句体

修改循环控制条件

N循环结束否?

Y后续程序段

图 4.2 循环结构示意图

Page 72: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

例例 4. 53 4. 53 统计一个字符串对应的统计一个字符串对应的 ASCIIASCII 码串码串中二进制“中二进制“ 11”” 的个数。的个数。

该程序具有该程序具有双重双重循环结构:循环结构: 内循环控制完成对一个字符的处理内循环控制完成对一个字符的处理,, 外循环控制完成字符串中外循环控制完成字符串中 CNTCNT 个字符的处理个字符的处理。。

Page 73: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

流流程程图图

外循环初始化:外循环初始化:计数结果清计数结果清 0;0;预置取字符指针预置取字符指针 ;; 预置外循环次数预置外循环次数

开 始开 始

外循环次数减外循环次数减 11 :: (CL) <(CL) < == (CL)(CL) -- 11

外循环条件判断外循环条件判断 ::(CL)(CL)≠≠0?0?

NN

NN

PUSHPUSH DSDSSUBSUB AX, AXAX, AXPUSHPUSH AXAXMOVMOV AX, AX, DATDAT MOVMOV DS, AXDS, AX

LOP2:LOP2: CMP AL, 0CMP AL, 0 JEJE LOP3LOP3

EXT:EXT: RETRET

MOV AL, 0MOV AL, 0MOV NUM, ALMOV NUM, ALMOV SI, OFFSET STR1MOV SI, OFFSET STR1MOV CL, CNTMOV CL, CNT

SHL SHL AL, 1AL, 1JNC JNC LOP2LOP2INC INC NUMNUMJMP JMP LOP2LOP2

LOP3:LOP3: DEC CL DEC CL

内循环初始化:内循环初始化:取一个字符送入取一个字符送入 AL AL

内循环条件判断内循环条件判断 ::(AL)(AL)≠≠0?0?

LOP1: LOP1: LODSBLODSB

(CF) (CF) = 1= 1??

累计“累计“ 1”1” 的个数:的个数: NUM <NUM < == NUM+1NUM+1YY

(CF) <(CF) < == (AL)(AL) 左移一位左移一位 YY

更新取字符指针:更新取字符指针: (SI)<(SI)< == (SI)+1(SI)+1YY 结束结束

NNJNZ JNZ LOP1LOP1

Page 74: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

;-- ;-- 数据段定义 数据段定义 --------------------------------------------------------------------------DATDAT SEGMENTSEGMENT

STR1STR1 DBDB ‘ABCDEFG’‘ABCDEFG’ ; ; 定义字符串定义字符串 (( 最长不超过最长不超过 3232 个个字符字符 ))

CNTCNT EQUEQU $ - STR1$ - STR1 ; ; 统计字符串中字符个数统计字符串中字符个数NUMNUM DBDB ?? ; ; 存放统计结果存放统计结果 ( ‘1’( ‘1’ 的总个数的总个数 <2<2

56 )56 )DATDAT ENDSENDS;------ ;------ 代码段定义 代码段定义 --------------------------------------------------------------------CODCOD SEGMENTSEGMENT

ASSUMEASSUME DS: DS: DATDAT, CS: , CS: CODCODMAINMAIN PROCPROC FARFAR

PUSHPUSH DSDS ; ; 保存返回地址保存返回地址SUBSUB AX, AXAX, AXPUSHPUSH AXAXMOVMOV AX, AX, DATDATMOVMOV DS, AXDS, AX ; ; 初始化初始化 DSDS;------;------ 外循环开始外循环开始 ----------------------------------------------------------------------------MOVMOV AL, 0AL, 0 ; ; 外循环初始化外循环初始化MOVMOV NUM, ALNUM, ALMOVMOV SI, SI, OFFSETOFFSET STR1 STR1MOVMOV CL, CNTCL, CNT

Page 75: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

;------;------ 内循环开始内循环开始 --------------------------------------------------LOP1:LOP1: LODSBLODSB ; ; 内循环初始化,取字符同时更新指针内循环初始化,取字符同时更新指针LOP2:LOP2: CMPCMP AL, 0AL, 0 ; ; 内循环控制内循环控制

JEJE LOP3LOP3 ; (; (ALAL)) == 00,, 不满足循环条件不满足循环条件 ,, 退出内循环退出内循环SHLSHL AL, 1AL, 1 ; ; 内循环体(同时修改循环控制条件)内循环体(同时修改循环控制条件)JNCJNC LOP2LOP2 ; ; 当前位当前位不为不为““ 11”” ,进入下一次内循环,进入下一次内循环INCINC NUMNUM ; ; 当前位当前位为为““ 11”” ,计数值,计数值加加 11 JMPJMP LOP2LOP2 ; ; 进入下一次内循环进入下一次内循环

;------;------ 内循环结束内循环结束 --------------------------------------------------LOP3:LOP3: DECDEC CLCL ; ; 外循环控制外循环控制

JNZJNZ LOP1LOP1 ; (; (CLCL))≠≠00,, 满足循环条件满足循环条件 ,, 进入下一次外循进入下一次外循环环

;------;------ 外循环结束外循环结束 --------------------------------------------------------EXT:EXT: RETRETMAINMAIN ENDPENDPCODCOD ENDSENDS

ENDEND MAINMAIN

Page 76: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

子程序设计方法 子程序设计方法 子程序子程序不是一种基本的程序结构不是一种基本的程序结构,但在程,但在程

序设计时合理使用子程序是序设计时合理使用子程序是实现模块化程实现模块化程序设计序设计的重要技巧。的重要技巧。

主过程 子过程 1

CALL 子过程 1断点 1

子过程嵌套示意图

子过程 2

① ② ③④⑤⑥

RET

RET

CALL 子过程 2断点 2

⑥⑦⑧⑨

Page 77: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

参数传递的实现参数传递的实现

使用使用约定寄存器约定寄存器传递参数传递参数

使用使用约定存储单元约定存储单元传递参数传递参数

使用使用堆栈堆栈传递参数传递参数

Page 78: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

现场保护与恢复 现场保护与恢复 ““ 现场”现场”,是指主过程转向子过程执行时,是指主过程转向子过程执行时

主过程的状态主过程的状态,主要包括当时,主要包括当时标志寄存器、标志寄存器、段寄存器、通用寄存器及指令指针的内容段寄存器、通用寄存器及指令指针的内容。。

为保证为保证主、子过程各自的数据信息和工作主、子过程各自的数据信息和工作状态状态不会互相干扰不会互相干扰,在设计程序时应尽量,在设计程序时应尽量使主、子过程有属于自己的工作空间 使主、子过程有属于自己的工作空间

PUSHPUSH & & POPPOP

Page 79: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

DOSDOS 及及 BIOSBIOS 功能调用 功能调用 DOSDOS 功能调用功能调用类型号类型号 中断功能中断功能 类型号类型号 中断功能中断功能

2020HH 程序结束程序结束 2121HH 请求请求 DOSDOS 功能调用功能调用2222HH 结束地址结束地址 2323HH 中止中止 (Ctrl-Break)(Ctrl-Break) 处处

理理2424HH 关键性错误处理关键性错误处理 2525HH 磁盘顺序读磁盘顺序读2626HH 磁盘顺序写磁盘顺序写 2727HH 程序结束且驻留内存程序结束且驻留内存2828HH DOSDOS 内部使用内部使用 29~2E29~2EHH DOSDOS 内部保留内部保留2F2FHH DOSDOS 内部使用内部使用 30~3F30~3FHH DOSDOS 内部保留内部保留

Page 80: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

使用使用 DOSDOS 功能调用时通常分功能调用时通常分三步三步进行进行 置入口参数置入口参数 置子功能调用编号置子功能调用编号,送入,送入 AHAH 中中 执行中断指令 执行中断指令 INT 21H INT 21H 。。

Page 81: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

例例;----- ;----- 调用调用 DOSDOS 功能输入以回车键结尾的字符串功能输入以回车键结尾的字符串 ----------------------------------------------

MOVMOV DX, DX, OFFSETOFFSET STRIN STRIN

MOVMOV AHAH, , 0AH0AHINTINT 21H21H

;---- ;---- 调用调用 DOSDOS 功能输出回车、换行符以显示加密后的字符串功能输出回车、换行符以显示加密后的字符串 ------------

MOVMOV DL, 0AHDL, 0AH ; ; 换行符换行符的的 ASCIIASCII 码为码为 0AH0AH

MOVMOV AHAH, , 02H02HINTINT 21H21H

MOVMOV DL, 0DHDL, 0DH ; ; 回车符回车符的的 ASCIIASCII 码为码为 0DH0DH

MOVMOV AHAH, , 02H02H

INTINT 21H21H

Page 82: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

BIOSBIOS 功能调用 功能调用 固化在固化在 PCPC 机内存较高地址机内存较高地址 ROMROM区中 区中

与使用与使用 DOSDOS 中断调用中断调用非常类似非常类似,用户也可以通过,用户也可以通过‘ ‘ INT N INT N ’’ 指令指令调用调用 BIOSBIOS 中断中断

不同不同的是的是 BIOSBIOS 中断调用占用的中断类型号为中断调用占用的中断类型号为 1010HH~~ 1FH1FH

与与 DOSDOS 相比,相比, BIOSBIOS 是在是在更低的层次更低的层次上为用户提上为用户提供系统服务 供系统服务

Page 83: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

类型号 中断功能 类型号 中断功能00 H 被零除 11 H 设备检测01 H 单步 12 H 存储容量02 H 不可屏蔽 13 H 磁盘 I/O03 H 断点 14 H 通信 I/O04 H 溢出 15 H 盒式磁带 I/O05 H 打印屏幕 16 H 键盘 I/O06 H 保留 17 H 打印机 I/O07 H 保留 18 H ROM BASIC08 H 日时钟 19 H 引导09 H 键盘 1A H 日时钟0A H 保留 1B H Ctrl-Break0B H 串口 2 1C H 定时器报时0C H 串口 1 1D H 显示器参数0D H 硬盘 1E H 软盘参数0E H 软盘 1F H 图形字符扩展0F H 打印机 40 H 保留给软盘10 H 显示器 41 H 硬盘参数

Page 84: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

实用程序设计例程 实用程序设计例程 【例【例 4. 564. 56 】设】设

有两长为有两长为 88字节字节无符号无符号数分别存在数分别存在以以 NUM1NUM1 、、NUM2NUM2 为首为首址的连续内址的连续内存单元中,存单元中,将两数相加,将两数相加,结果存入结果存入 SUSUMM 内存单元。内存单元。

循环初始化: 令 BX 指向无符号数 NUM1 的最低单元; 令 SI 指向无符号数 NUM2 的最低单元; 令 DI 指向结果单元 SUM 的最低单元; 循环次数寄存器 (CX)< =运算数据的字长度;

(CX) =0?

N

Y

开 始

结 束

无符号字加法 :((DI)) < = ((BX))+((SI))

循环次数减 :(CX) < = (CX) -1

修改指针 :(BX),(SI),(DI) 加 2

Page 85: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

程 序程 序;-- ;-- 数据段定义 数据段定义 --------------------------------------------------------------------

DATADATA SEGMENTSEGMENT

NUM1NUM1 DQDQ 00120030FC218B4AH00120030FC218B4AH ; ; 数数 11

NUM2NUM2 DQDQ 3E8144E96D701155H3E8144E96D701155H ; ; 数数 22

SUMSUM DQ DQ ?? ; ; 结果单元结果单元DATADATA ENDSENDS

;-- ;-- 代码段定义 代码段定义 --------------------------------------------------------------------

CODECODE SEGMENTSEGMENT ASSUMEASSUME CS: CS: CODECODE, DS: , DS: DATADATA

START:START: MOVMOV AX, AX, DATADATAMOVMOV DS, AXDS, AX

;-- ;-- 循环初始化 循环初始化 --------------------------------------------------------------------

LEALEA BX, NUM1BX, NUM1 ; BX; BX 指向数指向数 11 的最低一个字的最低一个字LEA LEA SI, NUM2SI, NUM2 ; SI; SI 指向数指向数 22 的最低一个字的最低一个字LEALEA DI, SUMDI, SUM ; DI; DI 指向结果单元的最低一个字指向结果单元的最低一个字MOV MOV CX, 4CX, 4 ; ; 循环次数(循环次数( 44 个字相加)个字相加)CLCCLC ; ; 清进位位清进位位

Page 86: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

程 序程 序AGAIN:AGAIN: MOV MOV AX, [BX]AX, [BX] ; ; 字相加字相加

ADC ADC AX, [SI]AX, [SI]

MOV MOV [DI], AX[DI], AX ; ; 存和存和INC INC BXBX ; ; 指针调整指针调整INC INC BXBX

INC INC SISI

INC INC SISI

INC INC DIDI

INC INC DIDI

LOOP LOOP AGAINAGAIN ; ; 循环控制循环控制;--------------------------------------------------;--------------------------------------------------

MOV MOV AH, 4CHAH, 4CH ; ; 返回返回 DOSDOS

INT INT 21H21H

CODECODE ENDSENDS

END END START START

Page 87: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

逻辑运算程序 逻辑运算程序

【【例例 4. 594. 59 】】用软件模拟下图所示的逻辑电用软件模拟下图所示的逻辑电路的功能。路的功能。

A⊕+

BCD

E

NOTNOT AA

MOV MOV AL, BAL, BOROR AL, AAL, A

MOV MOV BL, CBL, CANDAND BL, DBL, D

XORXOR AL, BLAL, BLNOTNOT ALALMOV MOV E, ALE, AL

Page 88: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

程 序程 序;-- ;-- 数据段定义 数据段定义 --------------------------------------------------------------------

DD1DD1 SEGMENTSEGMENT

AA DB DB 82H82H

BB DB DB 0FH0FH

CC DB DB 0C5H0C5H

DD DB DB 17H17H

EE DB DB ??

DD1DD1 ENDSENDS

;-- ;-- 堆栈段定义 堆栈段定义 --------------------------------------------------------------------

ST1ST1 SEGMENTSEGMENT PARA STACK ‘STACK’PARA STACK ‘STACK’

DB DB 100 DUP(?)100 DUP(?)

TOPTOP EQUEQU $$-ST1-ST1

ST1ST1 ENDSENDS

;-- ;-- 代码段定义 代码段定义 --------------------------------------------------------------------

CCCC SEGMENTSEGMENT

ASSUME ASSUME CS: CS: CCCC, DS:, DS: DD1 DD1, SS: , SS: ST1ST1

Page 89: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

BEGIN:BEGIN: MOVMOV AX, AX, DD1DD1 ; ; 内务操作内务操作MOV MOV DS, AXDS, AXMOVMOV AX, AX, ST1ST1MOVMOV SS, AXSS, AXMOVMOV SP, TOPSP, TOP

;------------------------ ;------------------------ 逻辑运算 逻辑运算 ------------------------------------------------------------

NOT NOT AAMOV MOV AL, BAL, BOR OR AL, AAL, A ; ; (( ALAL ) ) = A + B= A + BMOV MOV BL, CBL, CAND AND BL, DBL, D ; ; (( BLBL ) ) = C · D= C · DXOR XOR AL, BLAL, BLNOT NOT ALALMOV MOV E, ALE, AL ; ; 结果在结果在 EE 中(中( 8585

HH ));--------------------------------------------------------------------;--------------------------------------------------------------------

MOV MOV AH, 4CHAH, 4CH ; ; 返回返回 DOSDOSINT INT 21H21H

CCCC ENDSENDSENDEND BEGINBEGIN

程 序程 序

Page 90: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

举例:将一个组合举例:将一个组合 BCDBCD 码转换成二进制数。码转换成二进制数。二进制数值 二进制数值 = [= [ (千位(千位 ×1000×1000 )) ++ (百位(百位 ×100×100 )) ++ (十位(十位 ×10×10 )) ]]+个位+个位

DSEGDSEG SEGMENTSEGMENT

BCD BCD DW 2016HDW 2016H ; ; 组 合 组 合 BCD BCD 码码BIN BIN DW 0DW 0 ; ; 二 进 制 结 果 单 元二 进 制 结 果 单 元BUF BUF DW 4 DUP(?)DW 4 DUP(?) ; ; 暂 存 中 间 结 果暂 存 中 间 结 果

DSEG DSEG ENDSENDS

;; ----------------------------------------------------------------------------------------------------------------------------------------------------------------

SSEGSSEG SEGMENTSEGMENT PARA STACK ‘STACK’PARA STACK ‘STACK’

DB 100 DUPDB 100 DUP (?)(?)SSEGSSEG ENDSENDS

;; ----------------------------------------------------------------------------------------------------------------------------------------------------------------

CSEGCSEG SEGMENTSEGMENT ‘CODE’‘CODE’

ASSUME ASSUME CS CS :: CSEGCSEG ,, SSSS :: SSEGSSEG ,, DSDS :: DSEGDSEG ,, ESES :: DSEGDSEG

STARTSTART :: MOV MOV AXAX ,, DSEGDSEG

MOV MOV DSDS ,, AXAX

MOV MOV ES, AXES, AX

MOV MOV AXAX ,, BCDBCD

Page 91: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

AND AND AXAX ,, 0F000H0F000H ;; 取 取 BCDBCD 码 的 最 高 位码 的 最 高 位((千千位位 ))

MOV MOV CLCL ,, 1212

SHR SHR AXAX ,, CLCL ;;左 移 左 移 12 12 位位 ,,千千 位 在 位 在 AX AX 中中MOV MOV BXBX ,, 10001000

MUL MUL BXBX ;( ;( 千千位 位 × 1000 ) × 1000 ) 在 在 AX AX 中中LEALEA DIDI ,, BUFBUF

CLDCLD

STOS STOS WORD PTRWORD PTR BUF BUF

MOV MOV AXAX ,, BCDBCD

AND AND AXAX ,, 0F00H0F00H ;;取 取 BCDBCD 码 码 百百 位 位MOV MOV CLCL ,, 88

SHR SHR AXAX ,, CLCL ;;左 移 左 移 8 8 位,位,百百 位 在 位 在 AL AL 中中MOV MOV BLBL ,, 100100

MUL MUL BLBL ;( ;( 百百 位 位 × 100 ) × 100 ) 在 在 AX AX 中中

Page 92: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

STOS STOS WORD PTRWORD PTR BUF BUF

MOV MOV AXAX ,, BCDBCD

AND AND AXAX ,, 0F0H0F0H ;; BCD BCD 码 码 十十 位 位MOV MOV CLCL ,, 44

SHR SHR ALAL ,, CLCL ; ; 左 移 左 移 4 4 位位 ,,十十 位 在 位 在 AL AL 中中MOV MOV BLBL ,, 1010

MUL MUL BLBL ; ( ; ( 十十位 位 × 10 ) × 10 ) 在 在 AX AX 中中STOS STOS WORD PTRWORD PTR BUF BUF

MOV MOV AXAX ,, BCDBCD

AND AND AXAX ,, 000FH000FH ;取 ;取 BCDBCD 码 的 码 的 个个 位 位STOS STOS WORD PTRWORD PTR BUF BUF

Page 93: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

MOV MOV CXCX ,, 44 ;循环次数;循环次数CLDCLD ;; DF = 0DF = 0 ,自动增量,自动增量CLCCLC

LEALEA SISI ,, BUFBUF

CYLCYL :: LODS WORD PTR BUFLODS WORD PTR BUF ;取中间结果至;取中间结果至 AXAX

ADD ADD BINBIN ,, AXAX ;中间结果加,和在;中间结果加,和在 BINBIN 中中LOOP CYLLOOP CYL

MOV AHMOV AH ,, 4CH4CH ;返回;返回 DOSDOS

INT INT 21H21H

CSEGCSEG ENDSENDS

ENDEND STARTSTART

Page 94: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

七段共阴七段共阴 LEDLED 数码管显示数码管显示

1111001111111199111111111111118800000000111111771111111111001166111100111100115511110000111100441100001111111133110011110011112200000000111100110011111111111100ggffeeddccbbaa

七段数码输出(共阴极)七段数码输出(共阴极)

ssssssssssssssssssss

dpdp

b

c

f

eg

a

d dp

Page 95: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

七段共阴七段共阴 LEDLED 数码管显示数码管显示 数据段定义数据段定义DATA SEGMENTDATA SEGMENT

VALVAL DB ’47.531’ DB ’47.531’ ;待显示的数值,带小数点;待显示的数值,带小数点DISPDISP EQU 6000H EQU 6000H ;第一个数的显示端口地址;第一个数的显示端口地址TABTAB DB 0FCH,60H,0DAH,0F2H,66HDB 0FCH,60H,0DAH,0F2H,66H ;; 00~~ 44

DB 0B6H,0BEH,0E0H,0FEH,0F6HDB 0B6H,0BEH,0E0H,0FEH,0F6H ;; 55~~ 99

TAB1 DB 0FDH,61H,0DBH,0F3H,67HTAB1 DB 0FDH,61H,0DBH,0F3H,67H ;; 0.~4.0.~4.

DB 0B7H,0BFH,0E1H,0FFH,0F7HDB 0B7H,0BFH,0E1H,0FFH,0F7H ;; 5.~9.5.~9.

DATADATA ENDS ENDS

Page 96: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

七段共阴七段共阴 LEDLED 数码管显示数码管显示;; 堆栈段定义堆栈段定义STACKSTACK SEGMENT PARA STACK ‘STACK’SEGMENT PARA STACK ‘STACK’

DW 80 DUPDW 80 DUP (?)(?)STACKSTACK ENDSENDS

;; 代码段定义代码段定义CODECODE SEGMENT ‘CODE’SEGMENT ‘CODE’ASSUME CSASSUME CS :: CDOECDOE ,, SSSS :: STACKSTACK ,, DSDS :: DATADATASTABSTAB :: MOV AXMOV AX ,, DATADATA

MOV DSMOV DS ,, AXAX ;标准写法;标准写法LEA SI,VAL LEA SI,VAL ;; SISI 指向测试结果首址指向测试结果首址CLD CLD ;; DF = 0DF = 0 ,自动增量,自动增量LODS BYTE PTR VAL LODS BYTE PTR VAL ;取第一个数至;取第一个数至 ALAL 中中AND ALAND AL ,, 0FH 0FH ;转换成十进制数;转换成十进制数

Page 97: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

七段共阴七段共阴 LEDLED 数码管显示数码管显示LEA BXLEA BX ,, TABTAB ;表首址;表首址 TABTAB

XLAT TABXLAT TAB ;查表;查表MOV DXMOV DX ,, DISPDISP ;; DXDX 为显示端口地址为显示端口地址OUT DXOUT DX ,, ALAL ;第一个端口;第一个端口INC DXINC DX ;下一个端口地址;下一个端口地址LODS BYTE PTR VALLODS BYTE PTR VAL ;取带小数点的第二个数;取带小数点的第二个数AND ALAND AL ,, 0FH0FH

LEA BXLEA BX ,, TAB1TAB1 ;指向;指向 TAB1TAB1

XLAT TAB1XLAT TAB1

OUT DXOUT DX ,, ALAL ;至第二个端口;至第二个端口INC DXINC DX

INC SIINC SI ;小数点已送显;小数点已送显

Page 98: 第四章  宏汇编语言程序设计

微机系统原理及接口技术微机系统原理及接口技术

电子科技大学电子科技大学

七段共阴七段共阴 LEDLED 数码管显示数码管显示MOV CXMOV CX ,, 33 ;余下;余下 33 个数未转换个数未转换LEA BXLEA BX ,, TABTAB;; 不带小数点不带小数点

AGNAGN :: LODS BYTE PTR VALLODS BYTE PTR VALAND ALAND AL ,, 0FH0FHXLAT TABXLAT TABOUT DXOUT DX ,, ALALINC DXINC DXLOOP AGNLOOP AGNMOV AHMOV AH ,, 4CH4CH ;完毕,返回;完毕,返回 DOSDOSINT 21HINT 21H

CODECODE ENDS ENDSEND STABEND STAB