《微机原理与接口技术(80386-Pentium)》-艾德才-电子教案 11第11章 汇编语言程序设计

上传人:E**** 文档编号:89403857 上传时间:2019-05-24 格式:PPT 页数:65 大小:467.50KB
返回 下载 相关 举报
《微机原理与接口技术(80386-Pentium)》-艾德才-电子教案 11第11章   汇编语言程序设计_第1页
第1页 / 共65页
《微机原理与接口技术(80386-Pentium)》-艾德才-电子教案 11第11章   汇编语言程序设计_第2页
第2页 / 共65页
《微机原理与接口技术(80386-Pentium)》-艾德才-电子教案 11第11章   汇编语言程序设计_第3页
第3页 / 共65页
《微机原理与接口技术(80386-Pentium)》-艾德才-电子教案 11第11章   汇编语言程序设计_第4页
第4页 / 共65页
《微机原理与接口技术(80386-Pentium)》-艾德才-电子教案 11第11章   汇编语言程序设计_第5页
第5页 / 共65页
点击查看更多>>
资源描述

《《微机原理与接口技术(80386-Pentium)》-艾德才-电子教案 11第11章 汇编语言程序设计》由会员分享,可在线阅读,更多相关《《微机原理与接口技术(80386-Pentium)》-艾德才-电子教案 11第11章 汇编语言程序设计(65页珍藏版)》请在金锄头文库上搜索。

1、1,第11章 汇编语言 程序设计,2,11.1 汇编语言基础,11.1.1 汇编语言概述 汇编语言是一种介于机器语言和高级语言之间的计算机编程语言,它既不像机器语言那样直接使用计算机所认识和理解的二进制代码来构成,也不像高级语言那样独立于机器之外直接面向用户。 用汇编语言编写的程序叫汇编语言程序,汇编语言的源代码是用很像英文缩写的助记符编写而成。还要用汇编程序(Assembler)把这些助记符翻译成二进制的0和1,就变成了微处理机可以直接执行的机器语言机器代码。 汇编程序实际上是一种翻译程序,与高级语言的编译程序所完成的任务相类似。它是用汇编程序去读句法上已经程式化的用汇编语言编写的源代码的文

2、本文件,将用汇编语言编写的源代码转换成机器代码,直接由微处理机执行。,3,汇编程序的主要功能是: (1)检查源程序。 (2)检测出源程序中的语法错误,并给出出错的信息。 (3)产生源程序的目标程序,并可给出列表文件(同时列出汇编语言和机器语言的文件,称为LST文件。 (4)将宏指令展开。,4,11.1.2 语句格式 一个用汇编语言编写的程序实际上就是一个可执行的语句序列,由语句序列告诉汇编程序要完成的操作。语句是构成汇编程序的最基本的单位,下面就来介绍汇编语言所使用的语句。 每个汇编语言语句是由四部分(又称四个字段)组成。它们分别是名字字段(Name Field)、操作字段(Operation

3、 Field)、操作数字段(Operand Field)和注释字段(Comment Field),其格式如下: 指令语句:标号:操作符操作数 ;注释,5,11.1.2.1 名字字段 名字字段也叫标号字段。把一个符号名赋给汇编程序指令实际开始的地址。这样程序设计人员就可以通过名字来引用这条指令。用符号名字进行访问,程序设计人员就可使连接程序去选择汇编语言程序应装到存储器的什么地方,于是在访问所有指令时,可以随代码在存储器内存放的地址而自动改变。虽然任何一条指令都可以给出一个名字,但名字字段通常是给数据、常量、段、循环、转移和子程序准备的,以备用名字调用它们。 名字必须以字母开始,至多包含31个字

4、符,这些字符是: (1)AZ共26个英文字母。 (2)从09共10个阿拉伯数字。 (3)4个专用符号:-、?、.。,6,(1)变量 变量名表示程序可访问的存储单元,而且这个存储单元的内容在程序执行期间是可以改变的。变量必须包含存储单元地址、数据类型和大小信息。变量可以作为简单类型、变址类型或结构类型中的操作数。 (2)标号 标号是应用程序可执行指令的名字,作为一个相对编码。名字或标号有三个属性:段地址、段偏移量和可访问性描述符NEAR或FAR。 CPU用两种访问对特定的标号寻址。如果在同一个代码段内访问这个标号,只需把所需的段偏移量放置在指令内就可以。这种情况下,标号类型就是近的(NEAR)。

5、在定义NEAR型的标号时,在标号后紧接一个冒号“:”,或者是一个可用的NEAR伪操作。,7,(3)常数 还可以给一个存储单元起一个名字,在这个存储单元内保存着一个已经初始化了的值,并且在程序的执行过程中不再改变。这个经初始化的值就叫常数。常数可以是以下八种的任一种: (1)二进制常数 二进制常数是由0和1所构成的字符序列,且其后应紧跟一个字母B。 (2)十进制常数 十进制常数是由从09十个数字组成的数字序列,且其后可随字母D,也可不随字母D。 (3)十六进制常数 十六进制常数是由09和由AF组成的数字序列,且其后紧跟字母H。,8,(4)八进制常数 八进制常数是由07这八个数构成的数字序列,且其

6、后要紧随字母O或Q。 (5)字符常数 字符常数包括保存在单引号或双号之内的任一ASCII码字符。 (6)浮点常数 用十进制数科学记数法表示数值的一种数据类型, (7)十六进制实常数 这是一种含有从09数字和从AF字母的常数,且其后紧随字母R。 (8)相等 使用EQU伪操作或者使用符号“”,可以把操作数字段表达式的值赋给名字字段中的标号。,9,11.1.2.2 操作字段 操作字段内含有实际指令的助记符。助记符用于规定指令语句的具体操作,助记符含有26个字符。助记符很像英语缩写,而不是机器指令的二进制或十六进制值。操作助记符使得代码在读或理解时都变得非常容易,而且是离开实际二进制机器码的一个惟一内

7、部转换表。一个操作,或者说是助记符可表示一条机器指令、宏指令或伪操作。例如: INITIAL: MOV AX,0H INITIAL是一个标号,而MOV是一个指令。随其后的操作字段是操作数字段。每次操作不仅要告诉汇编程序执行哪条指令,而且还告诉汇编程序所需操作数的个数及其类型。,10,11.1.2.3 操作数字段 操作数字段应该拥有存储单元,或指令要对它进行操作的数据的存储单元。如果指令需要一个或两个操作数,最少要用一个空格把指令和操作数分隔开来。如果有两个操作数,就用逗号“,”把两者隔开。但是,也有不需要操作数的操作。 当一个操作需要两个操作数时,把第一个操作数叫做目的操作数,把第二个操作数叫

8、做源操作数。像数据传送、寄存器、立即数和存储器寄存器等操作,就是指令需要两个操作数的例子。例如: MOV AX,8 是一个立即操作数的例子。在这里,被控制的数据当做源操作数,并且把它传送到AX寄存器,或者说传送到目的操作数。 操作数也叫做参数。操作符都可后跟一个或多个操作数,作为操作处理的对象;根据寻址方式等因素的不同,操作数可以有四类:常量、寄存器、存储器和表达式。,11,常量、存储器和表达式三种操作数还要做如下说明: 1常量操作数 常量操作数可以是二、八、十和十六进制的整型常数、十六进制实数、字符串(必须用单引号括起来,其值为字符的ASCII码值)和已赋值的常数标识符,也可以是寄存器名和I

9、/O端口地址。 2存储器操作数 存储器操作数分为标号和变量两种。标号是某条指令所存放单元的符号化地址,这个地址一定在代码段中,它是转移/调用指令的目标操作数。变量则是数据存放单元的符号化地址,它一般位于数据段和堆栈段中,不可能、也绝对不能在代码段中。可用各种寻址方式对变量进行存取。 作为存储器操作数的标号和变量有三种共同的属性: 段属性段的基地址,可用SEG运算符求得。 偏移属性段内偏移地址,可用OFFSET运算符求得。 类型属性对变量,有字节,字,双字,四字,十字等五种类型; 3表达式操作数 它由各种操作数、界限符(如圆括号“(、)”、方括号“、”等)和运算符组成。汇编时,每个表达式都能产生

10、一个确定的值。,12,11.1.2.4 注释字段 注释部分以分号开始,其作用与注释语句相同,用于对语句的功能(注释语句是对后跟程序段的功能)加以说明,增加程序的可读性。注释部分不被汇编程序汇编,也不被执行,只对源程序起说明作用。 注释字段是4个字段中的最后一个,也可能是最有用的一个。注释字段用来作汇编程序源代码的内部文献。汇编程序通常是不管注释的,只有在为源代码开列清单时才有用。如果一条指令内含有注释,则必须最少用一个空格把它和最后一个字段分开,然后再用分号“;”开始注释。应该把注释用在那些不能立即理解的源代码行上。例如: MOV AH,45H ;读一个字符参数 这条注释为什么把45装入AH寄

11、存器。在这种情况下,当调用中断时,用45H启动相应的动作。,13,11.2 汇编语言程序结构,11.2.1 源程序结构 鉴于Intel 80X86系列微处理器都是采用分段存储器管理,其汇编语言都是以逻辑段为基础,按段的概念来组织代码和数据的,因此作为用汇编语言编写的源程序,其结构上具有以下特点: (1)由若干逻辑段组成,各逻辑段由伪指令语句定义和说明。 (2)整个源程序以END伪指令结束。 (3)每个逻辑段由语句序列组成,各语句可以是:,14, 宏指令语句: 对应于CPU指令系列中的一条指令,因此为可执行语句。汇编时译成目标码。 伪指令语句: CPU不执行的语句,只是汇编时给汇编程序提供汇编语

12、言,并不产生目标代码。 指令语句: 实际上是一个指令序列,汇编时产生对应的目标代码序列。 注释语句: 以分号“;”开始的说明性语句,汇编程序不予处理,只起注释作用,使程序易于理解。 空行语句: 为保持程序书写清晰,仅包含回车换行符的语句行。,15,每个源程序在其他代码段中都必须含有返回到DOS操作系统的指令语句(因为目前还没有Windows下的汇编程序,所以仍需在DOS下执行),以保证程序执行完后能自动返回DOS状态,可继续向计算机键入命令或程序。终止当前程序,使其正确返回DOS状态的方法通常有以下4种。 采用DOS 4CH号功能调用: 这种方法的特点是,在代码段结束前加调用语句: MOV A

13、H,4CH ;功能号4CH AH INT 21H ;中断调用 这种方法在上述的源程序结构中已使用过。这是返回DOS最有效且兼容性最好的一种方法。,16, 将主程序定义为远过程 这种方法的特点是,在代码段开始处按下述方式定义主程序: CODE SEGMENT ASSUME 主过程名 PROC DS PUSH DS MOV AX ,0 标准序 PUSH AX RET 主过程名 ENDP END 主过程名 一般也将这种方法称为“标准序”方法。,17, 利用20号软中断调用: 调用方式:INT 20H 这种方法在产生扩展名为.EXE的可执行文件中是不能使用的,但可用于小模式的扩展名为.COM的可执行文

14、件中,作为返回DOS的一种方法。但是任何一个汇编语言源程序经汇编、连接之后产生的可执行文件都是扩展名为EXE类型的,这时如果源程序是按小模式形式编写的,则在连接之后可用DOS提供的“EXE 2BIN”转换程序将.EXE文件转换成.COM文件。这样程序中的INT 20H指令就可使控制权返回到DOS。,18, 利用DOS的0号功能调用: 调用方式:MOV AH,0 INT 21H 该方式也是只有在.COM格式的可执行文件中才可使用。,19,11.2.2 伪操作语句 汇编语言程序的语句除指令以外还可以由伪操作和宏操作组成。伪操作又称伪指令,它不像机器指令那样是在程序运行期间由微处理机来执行的,它是在

15、汇编程序对源程序汇编期间由汇编程序处理的操作,它们可以完成诸如数据定义、存储器的分配、指示程序结束等功能。 伪操作是汇编语言程序的一个非常重要的组成部分。它又与汇编语言中的指令语句有所不同,汇编语言中的指令语句是微处理机执行的一条命令。而汇编语言中的伪操作则是规定的一种操作方式,在汇编时由汇编程序按照规定的这种操作方式再形成目标代码。下面说明的也仅仅是一些常用的伪操作。,20,11.2.2.1 方式选择伪指令 由于Intel系列机的汇编语言是在8086/8088汇编语言的基础上逐步发展而来并向上兼容的,因此汇编程序为区分当前的源程序是针对Intel系列机的哪种微处理机而执行的,提供了微处理机方

16、式选择伪指令。又因为MASM中对应每种微处理机的指令系统都有一个汇编执行语句集合,简称指令集,因此微处理机方式选择伪指令,其实质也就是指令集选择伪指令。,21,11.2.2.2 逻辑段定义伪指令 有两种逻辑段定义:完整的段定义和简化的段定义。在MASM 5.0以上的汇编语言版本中,既可使用完整的段定义伪指令,又可使用简化的段定义伪指令;在低于MASM 5.0的版本中,只能使用完整的段定义伪指令。 1. 完整的段定义伪指令 2简化的段定义伪指令,22,11.2.2.3 指定地址伪指令(ORG) 格式:ORG 偏移地址 ORG $ + 偏移地址 功能:该伪指令以其制定的偏移地址或由$给出的当前地址加上指定的偏移地址作为当前开始分配和使用的偏移地址。 11.2.2.4 模块定义伪指令 一个可执行的汇编语言源程序可由多个模块组成,每个模块是一个独立的汇编单位。在操作系统中,汇编语言源程序

展开阅读全文
相关资源
相关搜索

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

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