微机汇编语言程序设计.ppt
《微机汇编语言程序设计.ppt》由会员分享,可在线阅读,更多相关《微机汇编语言程序设计.ppt(164页珍藏版)》请在三一办公上搜索。
1、第4章 8086/8088汇编语言程序设计,汇编语言程序设计是开发微机系统软件的基本功,在程序设计中占有十分重要的地位。,由于汇编语言具有执行速度快和易于实现对硬件的控制等独特的优点,所以至今它仍然是用户使用得较多的程序设计语言。特别是在对于程序的空间和时间要求很高的场合,以及需要直接控制设备的应用场合,汇编语言更是必不可少了。由于汇编语言本身的特点,本章将选择目前国内广泛使用的IBM PC机作为基础机型,着重讨论8086/8088汇编语言的基本语法规则和程序设计的基本方法,以掌握一般汇编语言程序设计的初步技术。,4.1 程序设计语言概述,4.2 8086/8088汇编语言的基本语法,4.3
2、汇编语言程序设计基本方法,4.4 软件调试技术,目录,4.1 程序设计语言概述,程序设计语言是专门为计算机编程所配置的语言。它们按照形式与功能的不同可分为3种,即:机器语言汇编语言高级语言,目录,一、机器语言(Machine Language),机器语言是由0、1二进制代码书写和存储的指令与数据。特点:能为机器直接识别与执行;程序所占内存空间较少。缺点:难认、难记、难编写、易出错。,二、汇编语言(Assembly Language),汇编语言是用指令的助记符、符号地址、标号等书写程序的语言,简称符号语言。特点:易读、易写、易记。缺点:不能像机器语言那样为计算机所直接识别,也不如高级语言那样具有
3、很好的通用性和可移植性。,三、高级语言(High Level Language),高级语言是脱离具体机器(即独立于机器),面向用户的通用语言,不依赖于特定计算机的结构与指令系统。用同一种高级语言编写的源程序,一般可以在不同计算机上运行而获得同一结果。由于高级语言的通用性特点,对于高级语言程序员来说,不必熟悉计算机内部具体结构和机器指令,而只需要把主要精力放在程序结构和算法描述上面。所以,高级语言具有更广泛的领域。,汇编语言程序的上机与处理过程,图中,椭圆表示系统软件及其操作,方框表示磁盘文件。椭圆中横线上部是系统软件的名称,横线下部是软件所作的操作。首先,用户编写汇编语言源文件;再经过汇编程序
4、进行汇编,产生属性为 OBJ的以二进制代码表示的目标程序并存盘。然后通过连接程序(LINK)把目标文件与库文件以及其他目标文件连接在一起,形成可执行文件,才能在DOS环境下在机器上执行之。,4.2 8086/8088汇编语言的基本语法,各种机器的汇编语言其语法规则不尽相同,但基本语法结构形式类似。现以8086/8088汇编语言为例加以具体讨论。,目录,一、8086/8088汇编源程序实例,在具体讨论8086/8088汇编语言的繁琐语法规则之前,下面先举一个具有完整段定义格式的汇编源程序(即MASM程序)实例,以便对汇编语言的有关规定和格式有个初步了解。例:求从1开始连续50个奇数之和,并将结果
5、存放在名字为SUM的字存储单元中。,例:求从1开始连续50个奇数之和,并将结果存放在名字为SUM的字存储单元中。,段,汇编源程序一般由若干段组成,每个段都有一个名字(叫段名),以SEGMENT作为段的开始,以ENDS作为段的结束,这两者(伪指令)前面都要冠以相同的名字。,段可以从性质上分为代码段、堆栈段、数据段和附加段4种,但代码段与堆栈段是不可少的,数据段与附加段可根据需要设置。在上面这个例子中,一共定义了3个段:1个数据段1个堆栈段1个代码段,NOTE,每一行只有一条语句且不能超过128个字符(从MASM 6.0开始可以是512个字符)但一条语句允许有后续行,最后均以回车作结束。,NOTE
6、,整个源程序必须以END语句来结束,它通知汇编程序停止汇编。END后面的标号START表示该程序执行时的起始地址。每一条汇编语句最多由4个字段组成,它们均按照一定的规则分别写在一个语句的4个区域内,各区域之间用空格或制表符(TAB键)隔开。,二、8086/8088汇编语言语句,(一)汇编语言语句的种类和格式1 语句的种类 在8086/8088汇编语言中,有3种基本语句:指令语句 伪指令语句 宏指令语句,指令语句,是一种执行性语句,它在汇编时,汇编程序将为之产生一一对应的机器目标代码。,汇编指令,机器码,MOV DS,AX ADD AX,BX,8E D803 C3,伪指令语句,是一种说明性语句,
7、它在汇编时只为汇编程序提供进行汇编所需要的有关信息,如定义符号,分配存储单元,初始化存储器等,而本身并不代表生成目标代码 DATA SEGMENT AA DW 20H,-30H DATA ENDS内存位置:,FF,20,00,D0,宏指令,是以某个宏名字定义的一段指令序列,在汇编时,凡有宏指令出现的地方都将用相应的指令序列的目标代码插入。宏指令语句是一般性指令语句的扩展,2 语句格式8086/8088的汇编语句一般由4个字段组成如下:,(1)指令语句的格式标号:前缀指令助记符操作数表;注释其中,表示可以任选的部分;操作数表是由逗号分隔开的多个操作数。1)标号 标号代表“:”后面的指令所在的存储
8、地址(这里是逻辑地址),供JMP、CALL和LOOP等指令作操作数使用,以寻找转移目标地址。除此之外,它还具有一些其他“属性”。2)前缀 8086/8088中有些特殊指令,它们常作为前缀同其他指令配合使用,例如和“串操作指令”(MOVS、CMPS、SCAS、LODS与STOS)连用的5条“重复指令”(REP、REPE/REPZ、REPNE/REPNZ),以及总线封锁指令LOOK等,都是前缀。,3)指令助记符包括8086/8088的指令助记符,以及用宏定义语句定义过的宏指令名。4)操作数表对8086/8088的一般性执行指令来说,操作数表可以是一个或两个操作数,若是两个操作数,则称左边的操作数为
9、目标操作数,右边的操作数为源操作数;对宏指令来说,可能有多个操作数。操作数之间用逗号分隔。5)注释以“;”开始,用来简要说明该指令在程序中的作用(不是重复解释指令本身的功能),以提高程序的可读性。,(2)伪指令语句的格式 名字伪指令参数表;注释其中,“名字”可以是标识符定义的常量名、变量名、过程名、段名以及宏名等。所谓标识符是由字母开头,由字母、数字、特殊字符(如?、下划线、等)组成的字符串。默认情况下,汇编程序是不区分大、小写字母的。注意,名字的后面没有冒号,这是伪指令语句同指令语句在格式上的主要区别。,MASM 中伪操作命令,在伪指令语句的参数表中,包含有用逗号分隔的多个参数,它们可以是常
10、数、变量名、表达式等。例:SUMDB12H,23H,34H,45H,56H,67H,78H,89H,(二)指令语句的各个部分:指令语句主要由8086/8088指令系统中的指令组成,一条指令必须包括一个指令助记符,以及充分的寻址信息,以使汇编程序能将其转换成一条机器指令的操作码字段及由操作数寻址方式指定的操作数字段。,1 标号(Label)(1)标号及其属性标号是为一组机器指令所起的名字,用来作为汇编语言源程序中转移、调用以及循环等指令 的操作数程序转移的转向地址(目标地址)。标号表示指令地址,是指令的符号地址,它具有3种属性段地址、段内偏移量(或相对地址)以及类型。1)段地址(Segment
11、Base)标号所在段的段地址(16位数),是标号所在段的20位起始地址的前16位。,2)段内偏移量(Offset)它是标号与段起始地址之间相距的字节数,为一16位无符号数。3)类型(Type)类型表示该标号所代表的指令的转移范围,分(近)与(远)两种。类型的标号仅在同一段内使用,用字节指针给出转移的偏移量属性(即只改变IP值,不改变CS值);而类型的标号无此限制,必须用字节指针指出转移的段地址与段内偏移量。当标号用作或等指令的目标操作数时,若为段内转移或调用则采用类型;若为段间转移或调用则应当采用类型。JMP FAR PTR LINE,()标号的定义)标号的组成标号用一标识符定义,即以字母开头
12、,由字母、数字、特殊字符(如?、下划线、等)组成的字符串表示。标号的最大长度一般不超过个字符,除宏指令名外,标号不能与保留字相同。保留字看上去类似标识符,但它们在语言中有被机 器赋于的特殊意义。,寄存器名;指令系统的全部指令助记符;汇编语言的伪指令;其他名字标号最好用具有一定含义的英文单词或单词缩写表示,以便于阅读。,)在指令的助记符之前,使用标号并紧跟一个冒号“:”,表示该标号被定义为一个类型为的标号。当然,标号也可单列一行例如:subrout:mov ax,3000h)标号的使用,通常“标号”只在循环、转移和调用指令中 使用。,例如:JMP SHORT SUBOUT 1字节立即数 JMP
13、SUBOUT 2字节立即数 JMP FAR PTR SUBOUT 4字节立即数 表4.1,指令助记符(Instruction Mnemonics)执行性指令中的指令助记符主要为指令系统中指令助记符。操作数(Operand)操作数的汇编语言表示法及规则比较复杂,这是因为操作数的表示既要能充分体现出汇编语言中使用符号操作数和指令助记符的优越性,使程序员能尽可能地减少在存储分配和地址计算方面的工作,又要能被汇编程序有效地翻译成对应的特定处理器所具有的各种寻址方式。,()立即操作数立即操作数在指令中直接给出,不需要使用寄存器,也不涉及访问数据区的操作,只能作为源操作数。立即操作数是整数,可以是字节或字
14、节。在汇编语言中,立即操作数用常量(包括数值常量和符号常量)以及由常量与有关运算符组成的数值表达式表示。如:MOV BX,1000+5*3()寄存器操作数通用寄存器、以及段寄存器、都可以作为操作数。如:MOV BX,AX,()存储器操作数以指定的存储单元中的内容作为指令的处理对象,汇编指令中的存储器操作数实际上是存储单元的逻辑地址。例 4.3 MOV WORD PTR 0A00H,12ABH 例 4.4 MOV AX,BX 例 4.5 DEC BYTE PTR BP+12H 例 4.6 DEC WORD PTR SI+66 例 4.7 DEC WORD PTR BX+DI+50,存储器操作数的
15、段超越:INC BYTE PTRBX+20H 与 INC BYTE PTRBP+20HINC BYTE PTR ES:BX+20H 与 INC BYTE PTR DS:BP+20H INC BYTE PTR DATA:BP+20H,各种寻址方式下操作数的表达式,()常量与数值表达式)常量是指那些在汇编过程中已经有确定数值的量,它主要用作指令语句中的立即操作数、变址寻址和基址加变址寻址中的(位移量)或在伪指令语句中用于给变量赋初值。)常量分“数值常量”(也称字面常数)与“符号常量”两种。数值常量:以各种进位制数值形式表示,以后缀字符区分各种进位制,后缀字符表示十六进制,或表示八进制,表示二进制,
16、表示十进制,十进制常省略后缀。,符号常量:预先给常量定义一个“名字”,然后在汇编语句中用该“名字”表示该常量。采用符号常量的优点是改善程序的可读性;如果将符号常量作为程序的参数,则 可方便地实现参数的修改,增强程序的通用性。其定义需用伪操作命令(伪指令)“”或“”。例:*,即把送。常量是没有属性的纯数据,其值是在汇编时确定的。,)各种形式的常量格式,4)数值表达式一个能被计算并产生数值的表达式称为数值表达式(Constant Expression)。一个数值表达式可由常量、字符常量以及代表常量或串常量的名字等以算术、逻辑和关系运算符(Operator)连接而成。,1.算数运算符:+,-,*,/
17、,MOD,SHR,SHLMOVAL,18MOD7;AL中为余数MOVBL,00111111BMOVAL,BLSHR3;00000111B2.逻辑运算符:AND,OR,XOR,NOTMOVAX,3456HAND1234H3.关系运算符:EQ,NE,LT,GT,LE,GE 条件真,结果为:0FFFFH;否则为0000H。MOV BX,PORT LT 5;当PORT小于5,BX=FFFFH,否则BX=0000H。,例4.12:AND AX,(NUMB LT 5)AND 30)OR(NUMB GE 5)AND 20)当时,指令含意为,;当时,指令含意为,。此例中,操作符与操作数表达式中的具有不同的含意
18、,前者是助记符,后者是伪运算。,()变量与地址表达式)变量及其属性汇编语言中,“变量”()是内存中的一个数据区的名字,即数据所存放地址的符号地址,它可以作为指令中的存储器操作数来引用。由于存储器是分段使用的,因而对源程序中所定义的变量有多种属性。,变量的三种属性:段属性:代表该变量对应数据区所在段的段地址。偏移值属性:代表该变量与段起始地址的距离。类型属性:代表存取单位,到底是字节还是字 或者是双字等。,)变量的定义变量一般都是在数据段或附加段中使用伪指令(即伪操作命令)、和 来进行定义的,这些伪指令称为数据区定义伪指令,其格式为:变量名 数据区定义伪指令 表达式例:DATA SEGMENT
19、SUMDB 12H,23H,34H,45H COUNTDW 22H,33H,44AEH,55H DATA1DD 9876H,ABCDH DATAENDS 在内存的位置:,DATA段:,34,45,22,00,33,00,AE,44,55,00,76,98,00,00,CD,AB,00,00,23,12,SUM,COUNT,DATA1,MOVAX,COUNTAX=0022MOVBX,SUM错数据区大小及初值确定:A.数字表达式:DATA1 DB 3*5+2B.ASCII字符串(DB)STRING DB HELLOW48H,45H,4CH,4CH,4FH,57H,C.地址表达式:(DW,DD)AD
20、DR DW 1234H,3456H,4567H DISP DW ADDR;取ADDR在数据段的偏移量 DISP1 DD ADDR;取偏移量和段地址D.?无确定初值 ADDR DW?E.DUP 重复因子 DATA2 DB 20 DUP(?)DATA3 DW 2 DUP(11),3 DUP(22)注意:地址位置及属性 MOVAX,DATA3+2 MOVAL,DATA3+2 错 MOVAL,BYTE PTRDATA3+2,)变量的使用变量是存储器数据区的符号表示,因此指令中的存储器操作数可以用变量形式给出。程序中必须明确该指令是字节操作还是字操作:a、指令中至少一个操作数能说明是字节还是字操作。例如
21、:MOV AX,BX MOV AL,BX 目的操作数说明了操作类型。b、当使用变量进行存储器寻址时,变量的类型必须与指令的要求相符。,例如:DATA2 DB 20 DUP(2A)DATA3 DW 2 DUP(11),3 DUP(22)MOVAX,DATA3+2 MOVAL,DATA3+2 错 MOV BX,DATA2 错 c、若要在该存储器数据段进行操作,可用类型运算符PTR明确指出变量的类型。MOVAL,BYTE PTRDATA3+2,d、变量仅对应数据区的第一个数据,当对其他数据项进行操作时,必须使用地址表达式指出该数据项。例如:DATA DB 12,23,45 COUNT DW 1234
22、H,0AB55H,45FEH MOV AL,DATA;AL=12 MOV BL,DATA+1;错 MOV BL,DATA+1 MOV CX,COUNT;CX=1234H MOV SI,COUNT+2;SI=0AB55H,e、可以用PRT属性运算符改变存储器数据区的类型:例如:DATA-W DW 10DUP(0EEH)说明DATA-W段的数据属性为字;用PTR及EQU伪指令建立一个与DATA-W同一数 据段而类型不同的变量方法如下:DATA-B1 EQU BYTE PTR DATA-W DATA-D EQU DWORD PTR DATA-W DATA-B2 EQU BYTE PTR DATA-W
23、+1 DATA-B1为20个字节的数据组 DATA-D为5个双字的数据组 DATA-B2为19个字节的数据组,NOTE,使用变量作为存储器操作数时要注意几个问题。必须在程序中明确一条指令是完成位数据操作还是 1位数据操作。变量作为指令中的存储器操作数使用时,其段属性(段基址)与该指令使用的缺省段寄存器内容必须相符,若不相符则必须使用“跨段前缀”(或称段超越),否则指令无法从存储器中取得正确的操作数进行操作。,)地址表达式汇编语言中表达式有两类数值表达式:在汇编时产生一数值,仅具有大小而无其他属性,可作为执行性指令中的立即操作数和数据区中的初值使用。地址表达式:它表示存储器地址,其值一般都是段内
24、的偏移地址,因此它具有段属性、偏移值属性、类型属性。地址表达式主要用来表示执行性指令中的多种形式的操作数。地址表达式由变量、标号、常量、寄存器,的内容(用寄存器名以及方括号表示)以及一些运算符组成。,地址表达式中可以使用的运算符及使用规则:、数字表达式的三种运算符:变量或标号可以加上或减去某个结果为整数的数值表达式,其结果仍为变量或标号,类型及段地址属性不变,仅修改偏移值属性。由于数值表达式可以出现在地址表达式中,因此,一切数值表达式的运算符都可在地址表达式中出现。同一段内的两个变量或标号可以相减,但结果不是地址,而是一个数值,表示两者间相距的字节数。MOV AX,1000+50*4,、方括号
25、及寄存器BX,BP,SI,DI如这几个寄存器不用方括号括起来,表示寄存器本身或操作数。例:,表示将中的内容送中如这几个寄存器用方括号括起来,则表示地址表达式。例:,表示将所指的存储单元中的字数据送中,c、运算符是类型运算符,它用来说明某个变量、标号或地址表达式的类型属性,或者使它们临时兼有与原定义所不同的类型属性,但保持它们原来的段属性和偏移地址属性不变。格式为:数据类型 PTR 地址表达式根据地址表达式的不同值,数据类型可以是BYTE、WORD、DWORD、NEAR、FAR等。例:ADD BYTE PTRDI,23H PRT指定地址表达式DI的类型为字节,此句表示将23H与内存字节单元DI中
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 汇编语言 程序设计
链接地址:https://www.31ppt.com/p-5975803.html