汇编语言程序的基本结构与组成
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本章主要介绍了汇编语言程序的基本结构与组成、伪指令及其使用方法、D O S功能调用和B I O S功能调用,以及汇编语言程序设计的基本技术。本章还给出了汇编语言程序上机和调试的实例。通过该实例,可以了解汇编语言程序设计与开发的全过程。本章中介绍的程序设计技术包括简单程序设计、分支程序设计、循环程序设计和子程序设计,每种程序设计均给出了多个具体实例,并对设计思想进行了分析,提供了有价值的程序设计技术和方法。使用这些技术和方法可以为PC机开发基于汇编语言的软件。
6.1汇编语言与汇编程序
6.1.1汇编语言的基本概念
1.机器语言与汇编语言(M a c h i n e L a n g u a g e a n d A s s e m b l y L a n g u a g e)
计算机程序由一系列指令序列组成。计算机通过对每条指令的译码和执行来完成相应的操作。指令必须以二进制代码的形式存放在内存中,才能够被计算机所识别和理解,并加以执行。由二进制代码表示的指令称为机器指令,相应的程序称为机器语言程序。
机器语言程序由0、1二进制代码组成,不便于编程和记忆。由此产生了用指令助记符表示的汇编语言指令,对应的程序称为汇编语言程序。
例6-1将4位二进制数转换为A S C I I码字符。当数在0000B-1001B时,对应的A S C I I 码为‘0’-‘9’;当数在1010B-1111B时,对应的A S C I I码为‘A’-‘F’。设待转换的数据已在累加器A L中(低4位)。8086汇编语言程序如下:
A N D A L,0F H
C M P A L,0A H
J B N U M
A D D A L,07H
N U M:A D D A L,30H
R E T
对例6-1程序进行汇编以后,得到8086汇编指令对应的机器代码(用十六进制数表示),如表6.1所示。在表6.1中,第一列表示机器代码存放的内存地址,该地址与机器所处的环境有关;第二列表示8086机器代码,每条指令的机器代码由一个或几个字节组成;第三列表示汇编指令,由指令助记符和操作数组成。指令前可能有标号,表示该指令第一个字节所在的地址。
表6.1汇编后的机器代码
地 址 机器代码 对应的汇编指令
E380:0000240F A N D A L,0F H
E380:00023C0A C M P A L,0A H
E380:00047202J B N U M
E380:00060407A D D A L,07H
E380:00080430N U M:A D D A L,30H
E380:000A C3R E T
2.汇编语言与高级语言(A s s e m b l y L a n g u a g e a n d C o m p u t e r-i n d e p e n d e n t L a n g u a g e)从例6-1可见,汇编语言程序的基本单位仍然是机器指令,只是采用助记符表示,便于人们记忆。因此汇编语言是一种依赖于计算机微处理器的语言,每种机器都有它专用的
汇编语言(如8086C P U与8031单片机的汇编语言即不相同),故汇编语言一般不具有通用性和可移植性。由于进行汇编语言程序设计必须熟悉机器的硬件资源和软件资源,因此具有较大的难度和复杂性。
高级语言,如B A S I C,F O R T R A N,C语言等是面向过程的语言,不依赖于机器,因而具有很好的通用性和可移植性,并且具有很高的程序设计效率,便于开发复杂庞大的软件系统。
既然高级语言有很多优点,为什么还要学习汇编语言呢?理由如下:
⑴ 汇编语言仍然是各种系统软件(如操作系统)设计的基本语言。利用汇编语言可以设计出效率极高的核心底层程序,如设备驱动程序。迄今在许多高级应用编程中,32位汇编语言编程仍然占有较大的市场。
⑵ 用汇编语言编写的程序一般比用高级语言编写的程序执行得快,且所占内存较少。
⑶ 汇编语言程序能够直接有效地利用机器硬件资源,在一些实时控制系统中更是不可缺少和代替。
⑷ 学习汇编语言对于理解和掌握计算机硬件组成及工作原理是十分重要的,也是进行计算机应用系统设计的先决条件。
6.1.2汇编语言源程序的组成
1.汇编语言源程序的结构(P r o g r a m S t r u c t u r e)
例6-2将一个8位二进制数分成高4位和低4位分别转换为两个A S C I I字符。设待转换的数据及转换好的A S C I I字符均存放在数据段中。完整的汇编语言源程序如下:
N A M E H E X T O A S C
;*********************************************************
D A T A S
E G M E N T;数据段定义开始
H E X D B5A H
A S C D B2D U P(?)
D A T A
E N D S;数据段定义结束
;*********************************************************
;*********************************************************
S T A C K S E G M E N T;堆栈段定义开始
D B256D U P('S')
T O P E Q U$-S T A C K
S T A C K E N D S;堆栈段定义结束
;*********************************************************
;*********************************************************
C O
D
E S E G M E N T;代码段定义开始
A S S U M E C S:C O D E,D S:D A T A,S S:S T A C K ;.........................................................
S T A R T:M O V A X,D A T A;主程序开始
M O V D S,A X
M O V A X,S T A C K
M O V S S,A X
M O V S P,T O P
M O V B X,O F F S E T A S C
M O V A L,H E X