第-4-章-汇编语言程序设计基本方法-微型计算机原理与应用-教学课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《第-4-章-汇编语言程序设计基本方法-微型计算机原理与应用-教学课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 程序设计 基本 方法 微型计算机 原理 应用 教学 课件
- 资源描述:
-
1、4.1 汇编语言基本概念汇编语言基本概念4.2 8086/8088 指令系统指令系统4.3 汇编语言程序设计的基本方法汇编语言程序设计的基本方法4.4 汇编语言程序的编辑、汇编语言程序的编辑、汇编与连接汇编与连接4.5 程序的调试程序的调试第第 4 章章 汇编语言程序设计基本方法汇编语言程序设计基本方法返回主目录第第 4 章汇编语言程序设计基本方法章汇编语言程序设计基本方法 4.1汇编语言基本概念汇编语言基本概念 4.1.1汇编语言与机器语言汇编语言与机器语言 我们已经学过高级语言,例如BASIC语言或FORTRAN语言,无论哪种语言,它都规定了一系列用于编写程序的语句和应该遵循的语法规则。人
2、们根据一种语言给定的语句及其语法规则就可以写出程序,计算机则通过执行已编好的程序来完成人们要求它完成的各种复杂功能。汇编语言也一样,根据汇编语言的语句及其语法规则可以写出汇编语言程序。但汇编语言与高级语言有较大的区别,汇编语言中的语句与机器的种类和型号密切相关。在高级语言中,完成某个加法功能,我们可采用语句X=A+B,只要给变量A和B赋一确定值,此加法就可以实现了。在汇编语言中则不同,程序必须指出A,B存放在何处,相加后的结果又存放在何处,然后才能实现这一加法运算。显然,汇编语言在通过程序告诉计算机做什么和如何做时,显得更加具体。正是这种具体,使得该语言与计算机(处理器)紧密相关,从而也要求学
3、习和使用汇编语言的人对处理器的结构有更加深入的了解。那么,什么是机器语言,汇编语言与机器语言之间又有什么关系呢?我们说,机器语言是这样一种语言,它的每条语句就是计算机可以直接执行的一条指令,这些指令以二进制码的形式表示。例如我们要将累加器AX中加上一个常数 02,其二进制码表示的指令为:000001010000001000000000。也就是说,当处理器中取得了这样一组指令代码时,它将自动地完成(AX)+2(AX)中的操作。处理器所以能这样是因为处理器在设计时,就考虑了这样一组代码应完成的功能。自然,不同的处理器,指令的机器码将各不相同,完成的具体功能也将各不相同。采用机器语言编写程序的一个最
4、大好处是,程序送入计算机后,可以直接执行,但是,我们很快会感觉到,采用机器语言编写程序是多么困难,既不易书写,也不易检查。汇编语言正是为了克服这一缺点而形成的一种与机器语言直接相关的语言。汇编语言的基本思想是采用一组字母、数字或符号来代替一条二进制码表示的指令,例如上面所述的指令可采用字符ADD AX,02 来代替,它表示将累加器AX中的内容加上一个常数 02。显然,这要比一串二进制码清晰多了,既容易书写,也容易记忆 表示一条指令的这些字符常称为助记符。我们必须指出,采用助记符写出的程序,机器是不能直接执行的,因为上面我们已经指出,处理器在设计时是按二进制指令码考虑的。所以,采用汇编语言编写的
5、程序在执行前还必须将其“翻译”成机器语言。通常将采用助记符指令写成的程序,称为源程序,将它翻译成的机器语言程序称为目标程序。将汇编语言的源程序翻译成目标程序的过程称为汇编过程或简称汇编。汇编过程通常是由计算机完成的。它是通过执行一个专门完成汇编的软件称为汇编程序来实现的。既然写出的源程序要由汇编程序将其翻译后才能执行,所以,我们编写的源程序必须符合汇编程序的一系列要求或者规则,只有这样,你的程序才能被正确地“翻译”。所以,汇编语言的一系列规则是与“翻译”软件汇编程序相关的。我们要介绍的是IBM PC宏汇编语言,其汇编程序是IBM PC宏汇编程序MASM。自然,本书不能介绍它的全部而只能介绍它的
6、主要部分。汇编语言的语句有两种基本类型,即指令与伪指令。指令可由汇编程序翻译成机器语言指令,例如上例中的ADD AX,02,汇编后将形成一条机器语言指令05 02 00(十六进制码),所以,汇编语言中的指令与机器语言指令基本上是一一对应的。伪指令则不汇编成机器语言指令,仅仅在汇编过程中告诉汇编程序应如何汇编。例如告诉汇编程序已写出的汇编语言源程序有几个段,段的名称是什么,是否采用过程,汇编到某处是否需要留出存储空间,应留多大,是否要用到外部变量等。所以,伪指令是为汇编程序在汇编时用的。但指令与伪指令都是组成汇编语言源程序的基本语句。除了这两类基本语句外,在汇编语言中,还存在另一类指令称为宏指令
7、,它是使用者利用上述基本语句自己定义的新的指令。本章将逐步介绍这些内容,并在此基础上介绍汇编语言程序设计的基本方法。4.1.2汇编语言中语句的组成汇编语言中语句的组成 汇编语言源程序是由一条条语句组成的。语句则由名称、操作助记符、操作数、注释四部分组成,见表 4.1 所示。1.名称名称 语句中的名称是一个标识符,可由字母(a,b,c,z),数字(0,9)及特殊符号(?,-,$)组成。名称必须由字母打头,若名称中有圆点符,则圆点符又必须用作第一个字符,数字不能用作第一个字符。构成名称的字符总数可多达 31 个,若超过 31 个字符,则 31 个字符以后的字符无效。名称不是所有语句都必需的,但若语
8、句带有名称,那么,在大多数情况下名称表示的是内存的某一存储单元的地址,也就是名称后面各项在内存存放的第一个存储单元的地址(包括该名称所在段的段地址和段内的偏移地址)。如上面例子中的CYCLE为语句的名称,它表示的将是后面的指令机器码在内存存放的第一个地址。名称与操作码之间的分隔可以是空格,也可以是冒号。当以冒号分隔时,该名称代表一个标号;当以空格分隔时,名称可能是标号,也可能是变量。关于标号与变量的使用及其区别,后面将逐步说明。上面例子中的CYCLE为标号,DATA1 则为变量。2.操作助记符操作助记符(或称助记符或称助记符)操作助记符将指出该语句的基本操作功能。它是语句的必要部分,也就是说每
9、条语句都必须有操作助记符。操作助记符是汇编语言中规定了明确含义的一组符号,所以不能随意使用。例如上面例中的ADD是加法指令的助记符,DB则是定义字节变量的伪指令助记符。3.操作数操作数 语句中的操作数部分,可以是数据本身,也可以是指出如何获得操作数的信息。前者可以是一个常数,也可以是代表常数的一个标识符或表达式,后者通常是以某种寻址方式给出的存放操作数的地址。如上例中的第一条语句中的第一个操作数部分,它指出该操作数存放在AX中,而第二个操作数部分则为参加运算的操作数本身。操作数不是每条语句所必须的。若语句为指令,那么语句中可以没有操作数,也可以有12 个操作数。如上例中的第一条语句,具有 2
10、个操作数。若语句为伪指令,那么,可以有多个操作数。如上例中的第二条语句,具有 4 个操作数。当语句中具有 2 个以上的操作数时,操作数之间应用逗号“,”分隔,而操作数与操作助记符之间必须以空格分隔。4.注释注释 注释仅用作语句或程序段的说明,它不是程序的可执行部分,汇编时不形成任何目标码。注释必须以分号“;”开头。它可以作为语句的一个部分,也可以作为一个单独的语句。4.1.3汇编语言中的常数与表达式汇编语言中的常数与表达式 1.常数常数 常数可以分数值常数和字符串常数两类。数值常数按其基数的不同,可以有二进制数、八进制数、十进制数、十六进制数等几种不同的表示形式,汇编语言中采用不同的后缀加以区
11、分。B:表示二进制数。例如,10110011B。D:表示十进制数。例如,179D或 179。O:表示八进制数。例如,263O。H:表示十六进制数。例如,B3H。例中的 4 个数据是以不同的基数形式表示的同一个数值。当一个数值数据后面没有后缀时,将默认为十进制数。字符串常数是由单引号“”括起来的一串字符。例如:THIS IS A SUBROUTINE 179 要指出的是,此处的 179其值并不表示十进数 179,而是 1、7、9 三个数字的ASCII码,即 31H、37H、39H。最后,我们还应指出,汇编语言中的数值常数的第一位必须是数字,否则汇编时将被看成是标识符。例如十六进制数FFH应表示成
12、 0FFH。2.表达式表达式 表达式由操作数和操作符组成,操作数可以是常数或标识符,也可以是子表达式。操作符在宏汇编语言中非常丰富,可以分为算术操作符、逻辑操作符、关系操作符、属性操作符及其它操作符等。这里主要说明前三种操作符,后面两种操作符将在介绍变量与变量定义后再作介绍。算术操作符主要有:+,-,*,/,MOD。算术运算都是双操作数运算,操作数必须为数字操作数。取模运算(MOD)是取两数相除的余数,两操作数的值必须为正整数。例如:逻辑操作符有:AND(逻辑与)、OR(逻辑或)、NOT(逻辑非)、XOR(逻辑异或)。逻辑运算的两个操作数的值也应为数字。两数进行逻辑运算是两数的对应位分别进行相
13、应运算。例如:11001100B AND 11110000B 结果为 11000000B11001100B OR 11110000B 结果为 11111100B NOT 11110000B 结果为 00001111B11001100B XOR 11110000B 结果为 00111100B 值得注意的是,逻辑操作符同时又是逻辑运算指令的操作助记符,只有当它们出现在指令的操作数部分时,才是操作符。例如:AND AL,0CH OR 0FH 其中AND是指令的操作助记符,而OR是逻辑操作符。该指令指出,将AL中的内容与第二操作数的表达式的值(即两数相或的结果)相与,相与结果存放于AL中。关系操作符有
14、:EQ(相等)、EN(不等)、LT(小于)、GT(大于)、LE(小于或等于)、GE(大于或等于)。关系运算的操作数也必须为数字操作数。当关系成立时,其结果为全 1;当关系不成立时,其结果为全 0。汇编语言中的表达式不能构成单独语句,只能是语句的一个部分,例如:MOVAX,BUF+2ADDAL,VAL AND 0FHJMPAGAIN+3MOVBL,VB LE VA 上述各语句中都含有表达式,表达式中的标识符可以是变量名也可以是标号,关于标号与变量的定义将在下面说明。必须指出的是,语句中表达式的求值不是在执行指令时完成的,而是在对源程序进行汇编连接时完成的。所以,语句中各表达式的值必须在汇编或连接
15、时就是确定的,也就是说,表达式中各标识符的值在汇编或连接时就应该是确定的。4.1.4标号、标号、变量及伪指令变量及伪指令 1.标号标号 标号是由标识符表示的指令的名称,用以指示对应指令的位置(地址)。标号有三个属性:段地址、偏移地址和类型。标号的段地址和偏移地址属性是指该标号对应的指令所在段的段地址和段内的偏移地址。标号的类型属性有两种,即NEAR和FAR标号定义成NEAR类型,表示该标号在段内使用,而定义成FAR类型则表示该标号可以在段间使用。标号的基本定义方法是在指令的操作助记符前加上标识符和冒号,该标识符就是我们所要定义的标号。例如:START:PUSH DS 这里,START为一标号,
16、它代表了指令PUSH的地址,从而标号可以作为程序转移指令的操作数(即要转向的地址)。标号还可以采用伪指令定义,如用LABEL伪指令和过程定义伪指令来定义,这将在后面叙述。2.变量变量 汇编语言与高级语言一样也可以有变量,变量的值在程序运行期间是可以改变的。1)变量定义 汇编语言中的变量是通过伪指令定义的,伪指令的格式如下:变量名DB 表达式;定义字节变量 变量名DW 表达式;定义字变量 变量名DD 表达式;定义双字变量 变量名DQ 表达式;定义长字变量 变量名DT 表达式;定义一个十字节变量变量名是一个标识符,其定义方法与上面指出的语句中的名称一样,但变量名后面不能加冒号,只能用空格。变量名不
17、是必要的,在语句中可以有,也可以没有。变量的类型与变量名后的关键字DB、DW、DD、DQ、DT有关,它们分别定义了单字节变量(或称字节变量)、双字节变量(或称字变量)、四字节变量(或称双字变量)、八字节变量(或称长字变量)和十字节变量。4.1.1 中的变量中的变量DATA1DATA4;(2)带引号的字符串。如例 4.1.1 中的变量DATA5、DATA6;(3)一个问号?。如例 4.1.1 中的变量DATA7,DATA8;(4)重复方式。此时表达式部分的格式为重复次数DUP(表达式)如例 4.1.1 中的变量DATA9、DATA10。例 4.1.1 DADA1 DB 20H DATA2 DW
18、0204H,1000H;DATA3 DB(-1*3),(15/3);DATA4 DD 12345H;DATA5 DB 0123;DATA6 DW AB,C,D;DATA7 DB?;DATA8 DD?;DATA9 DB 5 DUP(00);DATA10 DW 3 DUP(?)伪指令的功能是在变量名所对应的地址开始的内存区依次存入表达式中的各项值。表达式中的每项值所占内存的字节数与变量的类型相对应(见图 4.1)。图 4.1 中给出了例 4.1.1 中所定义的各变量在内存存放的具体形式。图 4.1 中最左边一列为内存区的地址。我们假设变量DATA1 的段地址和偏移地址为 0100:0000H。中间
19、一列为对应内存单元所存放的内容,右边一列为对应的变量名。图 4.1 中的问号?表示该内存单元中的内容是不确定的,或者说,当表达式为问号时,变量所对应的内存区没有存入新的值,而只留出了相应的存储空间。如图 4.1 中地址为 0100:0015H0100:0019H单元中仍保持内存中原来的内容,而没有送入确定的新值。重复方式指出表达式的值可以重复地存到变量对应的内存区,重复的次数由伪指令给出。例如变量DATA9 是在其对应的内存单元(0100:001AH)开始重复地存放 5 个字节的 00,而DATA10 则指出在它对应的内存区重复地保留 3 个字的空间。当表达式的值为字符串时,对于字节类型变量,
20、每个变量为一个字节,每个字节内存入一个字符的ASCII码,整个字符串可以在同一个引号内给出。对于字类型变量,每个变量的值不能超过 2 个字符,若为两个字符时同样遵循高位存入高字节,低位存入低字节的规则;若为一个字符时,该字符的ASCII码存入低字节,高字节为 00,如图 4.1 中的DATA6。对于双字、长字类型变量,每个变量的值也不能超过两个字符并存入两个低位字节。2)变量的属性 变量具有下列属性:(1)段地址(SEG):变量所在段的段地址;(2)偏移地址(OFFSET):变量所在段内的偏移地址;(3)类型(TYPE):变量的类型是所定义的每个变量所占据的字节数,对于DB、DW、DD、DQ、
21、DT定义的变量其类型分别为 1、2、4、8、10。通常又将DB、DW、DD所定义的变量分别称为BYTE类型,WORD类型和DWORD类型变量。(4)长度(LENGTH):变量定义时,一个变量名所定义的变量个数。在含有DUP操作符的变量定义中,变量名所定义的变量个数为定义格式中的重复次数。在其它各种变量定义中,每个变量名所定义的变量个数均为 1。(5)大小(SIZE):变量定义语句中,分配给同一变量名的所有变量的总的字节数,其值为该变量的类型与长度的乘积。例 4.1.1 中所定义的部分变量的各属性的值列于表 4.2 中。上述 5 个属性中,前 3 个属性属于每一个变量,我们称其为主属性,后两个属
22、性则是对同一语句中同一变量名所定义的所有变量而言的,我们称其为辅助属性。4.1.5属性操作符及表达式属性操作符及表达式 前面我们已介绍了几种操作符及其表达式,这些操作符的操作对象都是数字数据。下面我们将介绍用来获取属性或重新定义某种属性的操作符,我们称其为属性操作符,对应这样的操作符,也有其相应的表达式。1.获取属性的操作符获取属性的操作符 标号或变量一旦定义,它们都具有相应的属性,获取属性的操作符及其表达式列于表 4.3 中。例如对图 4.1 中所定义的各变量,我们有:SEG DATA1结果为 0100H OFFSET DATA1结果为 0000 LENGTH DATA6结果为 1 TYPE
23、 DATA6结果为 2 SIZE DATA9结果为 5 这些表达式与上面提到的运算表达式一样,不能构成单独的语句,只能是语句的一个成分,并且表达式的求值也是在汇编过程中完成的。例如我们可以有:MOV#AX,SIZE DATA9;将DATA9 所占的字节数送AX MOVAX,SEG DATA1;将DATA1 的段地址送AX MOVBL,TYPE DATA9;将DATA9 的类型送BL 我们还可以有如下的变量定义:DAT1DB 02H#;DAT2DW 0F00H#;DAT3DW 5 DUP(?)#;DAT4DB LENGTH DAT3#;DAT5DW DAT3#;经汇编以后,DAT4 对应的内存单
24、元中存放的是变量DAT3 的长度(即 5),DAT5 所对应的2个字节中存放的将是变量DAT3 的偏移地址。2.PTR操作符操作符 格式:类型PTR表达式 格式中的类型可以是:BYTE、WORD、DWORD、NEAR和FAR。前三个类型为变量类型,后两个为标号类型。格式中的表达式可以是变量名、标号或其它地址表达式。PTR操作符的功能是用来重新定义已定义的变量或标号的类型。例如上例中的变量DAT3 是字变量,若程序中需将它作为字节变量使用时,必须用PTR操作来重新定义其类型。我们可以有MOVBYTE PTR DAT3,AL 这里DAT3 即为格式中的表达式,从而将DAT3 重新定义为字节类型。整
25、个语句的功能将是AL中的内容送到DAT3 对应的一个字节中。要指出的是变量DAT3 仅在该语句中作为字节变量使用,DAT3 原来定义的字变量类型并没有修改。4.2 8086/8088 指令系统指令系统 IBM PC/XT 微型计算机的微处理器采用的是 8088 芯片,本节将介绍 8088 微处理器的指令系统。指令系统是指处理器所能完成的所有指令的集合。它是在微处理器设计时就确定了的,所以,对于不同的微处理器,其指令系统中所包含的具体指令将是各不相同的。由于微处理器 8088 与 8086 的指令系统是完全一样的,所以,本节介绍的指令系统同样适用于 8086 CPU。8086/8088 CPU指
展开阅读全文