ch5汇编语言程序设计复习课程

上传人:youn****329 文档编号:143144682 上传时间:2020-08-26 格式:PPT 页数:275 大小:1.19MB
返回 下载 相关 举报
ch5汇编语言程序设计复习课程_第1页
第1页 / 共275页
ch5汇编语言程序设计复习课程_第2页
第2页 / 共275页
ch5汇编语言程序设计复习课程_第3页
第3页 / 共275页
ch5汇编语言程序设计复习课程_第4页
第4页 / 共275页
ch5汇编语言程序设计复习课程_第5页
第5页 / 共275页
点击查看更多>>
资源描述

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

1、第5章 汇编语言程序设计,5.1 汇编语言的基本概念 5.2 汇编语言源程序的格式 5.3 伪指令语句 5.4 宏指令语句 5.5 汇编语言程序的上机过程 5.6 汇编语言程序设计的基本方法 5.7 发挥80386及其后继机型的优势,5.1 汇编语言的基本概念,1机器语言(Machine Language) 机器语言是一种用二进制表示指令和数据,能被机器直接识别的计算机语言。 缺点:不直观,不易理解和记忆,因此编写、阅读和修改机器语言程序都比较繁琐。 优点:机器语言程序是计算机惟一能够直接理解和执行的程序,具有执行速度快、占用内存少等特点。,任何计算机实际上只能直接识别设计微处理器时所规定好的

2、, 一整套用“0”、 “1”数字代码表示的机器指令。这些机器指令的全体是指令系统。不同类型的CPU,其机器语言必然是不同的。这种直接用机器指令来编制计算机程序的方法就称为机器语言程序设计。 微机原理及应用课程实验教学用的单板计算机就是直接采用机器语言编程的机器。 这种直接用机器语言编程的方法难度大,阅读、查错和修改程序也很不方便。通常,只有当编程者对CPU指令系统比较熟悉, 编写的程序较短时,才有可能直接用机器语言来编写计算机程序。但是,单板计算机对硬件操作很直观,可以帮助大家了解和理解计算机在实际中的应用。,图5.1 编译程序的功能示意图,由于高级语言程序是在未考虑机器的结构特点的条件下编写

3、的,因而它就不能充分利用某种具体CPU所具有的某些特性,而通过编译或解释程序生成的目标程序往往比较冗长,占有较多的内存空间,执行时间也比较长,这就限制了它在某些场合下的运用。 例如,实时的数据采集、检测和在线的实时控制等,往往要求程序的目标代码尽可能少占内存并有尽可能快的执行速度,在这些场合下,使用高级语言编写的程序常常不能满足要求。,3汇编语言(Assembly Language) 人们为了摆脱机器语言编程中原始而低级的状态,就设法采用一组字母、数字或字符来代替机器指令,这样就产生了汇编语言的概念和方法。 汇编语言是一种采用助记符表示的程序设计语言,即用助记符来表示指令的操作码和操作数,用标

4、号或符号代表地址、常量或变量。助记符一般都是英文字的缩写,以方便人们书写、阅读和检查。实际上,用汇编语言编写的汇编语言源程序就是机器语言程序的符号表示,汇编语言源程序与其经过汇编所产生的目标代码程序之间有明显的一一对应关系,故也称汇编语言为符号语言。,用汇编语言编写程序能够直接利用硬件系统的特性(如寄存器、标志、中断系统等)直接对位、字节、字寄存器或存储单元、I/O端口进行处理,同时也能直接使用CPU 指令系统和指令系统提供的各种寻址方式,编制出高质量的程序,这样的程序不但占用内存空间少,而且执行速度快。当然,由于源程序和所要解决的问题的数学模型之间的关系不够直观,使得汇编语言程序设计需要较多

5、的软件开发时间,也增加了程序设计过程中出错的可能性。 用汇编语言编写的源程序也需要翻译成目标程序才能被机器执行。这个翻译过程称为汇编,完成汇编任务的程序称为汇编程序,如图5.2所示。,图5.2 汇编程序的功能示意图,由于这种符号化的语言使用了用英文字母缩写表示的助记符,因此便于识别与记忆。,汇编程序是最早也是最成熟的一种系统软件。它除了能够将汇编语言源程序翻译成机器语言程序这一主要功能外,还能够根据用户的要求自动分配存储区域(包括程序区、数据区、暂存区等);自动地把各种进位制数转换成二进制数,把字符转换成ASCII码,计算表达式的值等;自动对源程序进行检查,给出错误信息(如非法格式,未定义的助

6、记符、标号,漏掉操作数等)等。具有这些功能的汇编程序又称为基本汇编(或小汇编ASM)。 在基本汇编的基础上,进一步允许在源程序中把一个指令序列定义为一条宏指令的汇编程序,就叫做宏汇编(MASM)。它包含全部ASM功能,还增加了宏指令、结构、记录等高级汇编语言功能。,问题:有高级语言,为什么还要学习和使用汇编语言? 原因: (1) 汇编语言非常接近机器语言程序,通过编制汇编语言程序,可以更清楚地了解计算机的工作过程。 (2) 现在的微机系统中,底层的一些功能仍然靠汇编语言程序来实现。 (3) 汇编语言程序的效率通常高于高级语言程序。,5.2 汇编语言源程序的格式,例5.1 要求将两个5字节十六进

7、制数相加。 解: 为实现上述功能,可以编写出以下汇编语言源程序。,DATASEGMENT ;定义数据段 DATA1 DB 0F8H,60H,0ACH,74H,3BH ;被加数 DATA2 DB 0C1H,36H,9EH,0D5H,20H ;加数 DATAENDS ;数据段结束 CODE SEGMENT ;定义代码段 ASSUME CS:CODE,DS:DATA,START:MOV AX,DATA MOV DS,AX ;初始化DS MOV CX,5 ;循环次数送CX MOV SI,0 ;置SI初值为0 CLC ;清CF标志 LOOPER:MOV AL,DATA2SI ;取一个字节加数 ADC D

8、ATA1SI,AL ;与被加数相加,INC SI ;SI加1 DEC CX ;CX减1 JNZ LOOPER ;若不等于0,转LOOPER MOV AH,4CH INT 21H;返回DOS CODE ENDS ;代码段结束 END START ;源程序结束,程序结构 程序由数条语句构成,每条语句占一行。 指令性语句(指令语句) 指示性语句(伪指令语句) 分段结构 程序按段编写, 与8086内存分段编址相对应。 每段由伪操作SEGMENT开始、由ENDS结束。 程序最后为END结束语句,后跟启动地址。 启动地址指示程序开始执行的第一条语句。 程序中设有返回DOS的功能。 使程序执行完后返回DOS

9、系统的命令接受状态。 程序中用到内存操作数时,应按操作数的 寻址方式,给相应的段寄存器赋值,汇编语言程序结构: movs.asm aa SEGMENT ;数据段1 str1 DB Hello! aa ENDS bb SEGMENT ;数据段2 str2 DB 6 dup (?) bb ENDS cc SEGMENT ;代码段 ASSUME CS:cc, DS:aa, ES:bb start: CLD MOV AX , aa MOV DS , AX LEA SI , str1 MOV AX , SEG str2 MOV ES , AX MOV DI ,OFFSET str2 MOV CX , 6

10、 REP MOVSB MOV AH , 4CH INT 21H ;返回DOS cc ENDS END start ;指示程序结束,5.2.1 分段结构 由例5.1可以看出,汇编语言源程序的结构是分段结构形式,一个汇编语言源程序由若干段(SEGMENT)组成,每个段以SEGMENT语句开始,以ENDS语句结束。整个源程序的结尾是END语句。 这里所说的汇编语言源程序中的段与前面讨论的CPU管理的存储器的段,既有联系,又在概念上有所区别。我们已经知道,微处理器对存储器的管理是分段的,因此,在汇编语言程序中也要求分段组织指令、数据和堆栈,以便将源程序汇编成为目标程序后,可以分别装入存储器的相应段中。

11、,但是,以8086/8088 CPU为例,它有四个段寄存器(CS,ES,SS和DS),因此CPU对存储器按照四个物理段进行管理,即数据段、附加段、堆栈段和代码段。任何时侯CPU只能访问四个物理段。而在汇编语言源程序中,设置段的自由度比较大。例如,一个源程序中可以有多个数据段或多个代码段等等。一般来说,汇编语言源程序中段的数目可以根据实际需要而设定。为了和CPU管理的存储器物理段相区别,我们将汇编语言程序中的段称为逻辑段。在不致发生混淆的地方,有时简称为段。,在例5.1的简单源程序中只有两个逻辑段,一个逻辑段的名字是DATA,其中存放着与程序有关的数据,称为逻辑数据段;另一个逻辑段的名字是COD

12、E,其中包含着程序的指令,称为逻辑代码段。每个段内均有若干行语句(STATEMENT),因此,可以说一个汇编源程序是由一行一行的语句组成的。下面我们来讨论汇编语言语句的类型和组成。,5.2.2 汇编语言语句的类型和格式 1语句的类型 汇编语言源程序中的语句可以分为两种类型:指令语句和伪指令语句。 (1) 指令语句:它是能产生目标代码,CPU 可以执行的能完成特定功能的语句。 (2) 伪指令语句:它是一种不产生目标代码的语句,它仅仅在汇编过程中告诉汇编程序应如何汇编。例如,告诉汇编程序已写出的汇编语言源程序有几个段,段的名字是什么;定义变量,定义过程,给变量分配存储单元,给数字或表达式命名等。显

13、然,伪指令语句是汇编程序在汇编时使用的。,2. 语句的格式 指令语句与伪指令语句的格式是类似的。一般情况下,汇编语言的语句可以由部分构成: 名字 助记符 操作数 ;注释 其中带方括号的部分表示任选项,可以有,也可以没有。 例5.1中有如下语句: LOOPER:MOV AL,DATA2SI ;取一个字节加数 这是一条指令语句,其中: “LOOPER:”是名字, “MOV”是指令助记符, “AL,DATA2SI”是操作数, “;”后面是注释部分。,例. DATA1 DB 0F8H,60H,0ACH,74H,3BH ;定义被加数 这是一条伪指令语句,其中: “DATA1”是名字, “DB”是伪指令定

14、义符, “0F8H,60H,0ACH,74H,3BH”是操作数, “;”后面是注释部分。 下面,对汇编语言中的各个组成部分进行讨论。,语句结构,1) 名字 汇编语言语句的第一个组成部分是名字(Name)。 在指令语句中,这个名字是一个标号。指令语句中的标号实质上是指令的符号地址。并非每条指令语句必须有标号,但如果一条指令前面有一标号,则程序中其他地方就可以引用这个标号。在例5.1中,START、LOOPER就是标号。标号后面通常有一个冒号。 标号有三种属性:段、偏移量和类型。, 标号的段属性是定义标号在程序段的段地址。当程序中引用一个标号时,该标号的段值应在CS寄存器中。 标号的偏移量属性表示

15、标号所在段的起始地址到定义该标号的地址之间的字节数。偏移量是一个16位无符号数。 标号的类型属性有两种:NEAR和FAR。 NEAR标号可以在段内被引用,地址指针为2字节; FAR标号可以在其他段被引用,地址指针为4字节。如果定义一个标号时后面跟着冒号,则汇编程序确认其类型为NEAR。,伪指令语句中的名字可以是变量名、段名、过程名。与指令语句中的标号不同,这些伪指令语句中的名字并不总是任选的,有些伪指令规定前面必须有名字,有些则不允许有名字,也有一些伪指令的名字是任选的。即不同的伪指令对于是否有名字有不同的规定。伪指令语句的名字后面通常不跟冒号,这是它和标号的一个明显区别。 很多情况下伪指令语

16、句中的名字是变量名。变量名代表存储器中一个数据区的名字。 例如,例5.1中的DATA1、DATA2就是变量名。,名字项用一个符号表示。 对符号的规定: 由字符A-Z ,a-z ,0-9及符号、$、下划线_ 等组成,最长31个字符,超出部分忽略。 不能用数字打头,以免与十六进制数相混。 不使用汇编程序中的保留字 (如指令的助记符等)。 对定义的符号不区分大小写。,变量也有三种属性:段、偏移量和类型。 变量的段属性是变量所代表的数据区所在段的段地址。由于数据区一般在存储器的数据段中,因此变量的段地址常常在DS和ES寄存器中。 变量的偏移量属性是该变量所在段的起始地址与变量的地址之间的字节数。 变量的类型属性有BYTE

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

最新文档


当前位置:首页 > 中学教育 > 教学课件 > 高中课件

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