微机原理及运用第4章.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《微机原理及运用第4章.ppt》由会员分享,可在线阅读,更多相关《微机原理及运用第4章.ppt(573页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
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、是,程序送入计算机后,可以直接执行,但是,我们很快会感觉到,采用机器语言编写程序是多么困难,既不易书写,也不易检查。汇编语言正是为了克服这一缺点而形成的一种与机器语言直接相关的语言。汇编语言的基本思想是采用一组字母、数字或符号来代替一条二进制码表示的指令,例如上面所述的指令可采用字符ADDAX,02来代替,它表示将累加器AX中的内容加上一个常数02。显然,这要比一串二进制码清晰多了,既容易书写,也容易记忆表示一条指令的这些字符常称为助记符。我们必须指出,采用助记符写出的程序,机器是不能直接执行的,因为上面我们已经指出,处理器在设计时是按二进制指令码考虑的。所以,采用汇编语言编写的程序在执行前还
5、必须将其“翻译”成机器语言。通常将采用助记符指令写成的程序,称为源程序,将它翻译成的机器语言程序称为目标程序。将汇编语言的源程序翻译成目标程序的过程称为汇编过程或简称汇编。汇编过程通常是由计算机完成的。它是通过执行一个专门完成汇编的软件称为汇编程序来实现的。既然写出的源程序要由汇编程序将其翻译后才能执行,所以,我们编写的源程序必须符合汇编程序的一系列要求或者规则,只有这样,你的程序才能被正确地“翻译”。所以,汇编语言的一系列规则是与“翻译”软件汇编程序相关的。我们要介绍的是IBMPC宏汇编语言,其汇编程序是IBMPC宏汇编程序MASM。自然,本书不能介绍它的全部而只能介绍它的主要部分。汇编语言
6、的语句有两种基本类型,即指令与伪指令。指令可由汇编程序翻译成机器语言指令,例如上例中的ADDAX,02,汇编后将形成一条机器语言指令050200(十六进制码),所以,汇编语言中的指令与机器语言指令基本上是一一对应的。伪指令则不汇编成机器语言指令,仅仅在汇编过程中告诉汇编程序应如何汇编。例如告诉汇编程序已写出的汇编语言源程序有几个段,段的名称是什么,是否采用过程,汇编到某处是否需要留出存储空间,应留多大,是否要用到外部变量等。所以,伪指令是为汇编程序在汇编时用的。但指令与伪指令都是组成汇编语言源程序的基本语句。除了这两类基本语句外,在汇编语言中,还存在另一类指令称为宏指令,它是使用者利用上述基本
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.常数常数常数可以分数值常数和字符串常数两类。数值常数按其基数的不同,可以有二进制数、八进制数、十进制数、十六进制数等几种不同的表示形式,汇编语言中采用不同的后缀加以区分。B:表示二进制数。例如,10110011B。D:表示十进制数。例
11、如,179D或179。O:表示八进制数。例如,263O。H:表示十六进制数。例如,B3H。例中的4个数据是以不同的基数形式表示的同一个数值。当一个数值数据后面没有后缀时,将默认为十进制数。字符串常数是由单引号“”括起来的一串字符。例如:THISISASUBROUTINE179要指出的是,此处的179其值并不表示十进数179,而是1、7、9三个数字的ASCII码,即31H、37H、39H。最后,我们还应指出,汇编语言中的数值常数的第一位必须是数字,否则汇编时将被看成是标识符。例如十六进制数FFH应表示成0FFH。2.表达式表达式表达式由操作数和操作符组成,操作数可以是常数或标识符,也可以是子表达
12、式。操作符在宏汇编语言中非常丰富,可以分为算术操作符、逻辑操作符、关系操作符、属性操作符及其它操作符等。这里主要说明前三种操作符,后面两种操作符将在介绍变量与变量定义后再作介绍。算术操作符主要有:+,-,*,/,MOD。算术运算都是双操作数运算,操作数必须为数字操作数。取模运算(MOD)是取两数相除的余数,两操作数的值必须为正整数。例如:逻辑操作符有:AND(逻辑与)、OR(逻辑或)、NOT(逻辑非)、XOR(逻辑异或)。逻辑运算的两个操作数的值也应为数字。两数进行逻辑运算是两数的对应位分别进行相应运算。例如:11001100BAND11110000B结果为11000000B11001100B
13、OR11110000B结果为11111100BNOT11110000B结果为00001111B11001100BXOR11110000B结果为00111100B值得注意的是,逻辑操作符同时又是逻辑运算指令的操作助记符,只有当它们出现在指令的操作数部分时,才是操作符。例如:ANDAL,0CHOR0FH其中AND是指令的操作助记符,而OR是逻辑操作符。该指令指出,将AL中的内容与第二操作数的表达式的值(即两数相或的结果)相与,相与结果存放于AL中。关系操作符有:EQ(相等)、EN(不等)、LT(小于)、GT(大于)、LE(小于或等于)、GE(大于或等于)。关系运算的操作数也必须为数字操作数。当关系
14、成立时,其结果为全1;当关系不成立时,其结果为全0。汇编语言中的表达式不能构成单独语句,只能是语句的一个部分,例如:MOVAX,BUF+2ADDAL,VALAND0FHJMPAGAIN+3MOVBL,VBLEVA上述各语句中都含有表达式,表达式中的标识符可以是变量名也可以是标号,关于标号与变量的定义将在下面说明。必须指出的是,语句中表达式的求值不是在执行指令时完成的,而是在对源程序进行汇编连接时完成的。所以,语句中各表达式的值必须在汇编或连接时就是确定的,也就是说,表达式中各标识符的值在汇编或连接时就应该是确定的。4.1.4标号、标号、变量及伪指令变量及伪指令1.标号标号标号是由标识符表示的指
15、令的名称,用以指示对应指令的位置(地址)。标号有三个属性:段地址、偏移地址和类型。标号的段地址和偏移地址属性是指该标号对应的指令所在段的段地址和段内的偏移地址。标号的类型属性有两种,即NEAR和FAR标号定义成NEAR类型,表示该标号在段内使用,而定义成FAR类型则表示该标号可以在段间使用。标号的基本定义方法是在指令的操作助记符前加上标识符和冒号,该标识符就是我们所要定义的标号。例如:START:PUSHDS这里,START为一标号,它代表了指令PUSH的地址,从而标号可以作为程序转移指令的操作数(即要转向的地址)。标号还可以采用伪指令定义,如用LABEL伪指令和过程定义伪指令来定义,这将在后
16、面叙述。2.变量变量汇编语言与高级语言一样也可以有变量,变量的值在程序运行期间是可以改变的。1)变量定义汇编语言中的变量是通过伪指令定义的,伪指令的格式如下:变量名DB表达式;定义字节变量变量名DW表达式;定义字变量变量名DD表达式;定义双字变量变量名DQ表达式;定义长字变量变量名DT表达式;定义一个十字节变量变量名是一个标识符,其定义方法与上面指出的语句中的名称一样,但变量名后面不能加冒号,只能用空格。变量名不是必要的,在语句中可以有,也可以没有。变量的类型与变量名后的关键字DB、DW、DD、DQ、DT有关,它们分别定义了单字节变量(或称字节变量)、双字节变量(或称字变量)、四字节变量(或称
17、双字变量)、八字节变量(或称长字变量)和十字节变量。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.1DADA1DB20HDATA2DW0204H,1000H;DATA3DB(-1*3),(15/3);DATA4DD12345H;DATA5DB0123;DATA6DWAB,C,D;DATA7DB?;DATA8DD?;DA
18、TA9DB5DUP(00);DATA10DW3DUP(?)伪指令的功能是在变量名所对应的地址开始的内存区依次存入表达式中的各项值。表达式中的每项值所占内存的字节数与变量的类型相对应(见图4.1)。图4.1中给出了例4.1.1中所定义的各变量在内存存放的具体形式。图4.1中最左边一列为内存区的地址。我们假设变量DATA1的段地址和偏移地址为0100:0000H。中间一列为对应内存单元所存放的内容,右边一列为对应的变量名。图4.1中的问号?表示该内存单元中的内容是不确定的,或者说,当表达式为问号时,变量所对应的内存区没有存入新的值,而只留出了相应的存储空间。如图4.1中地址为0100:0015H0
19、100:0019H单元中仍保持内存中原来的内容,而没有送入确定的新值。重复方式指出表达式的值可以重复地存到变量对应的内存区,重复的次数由伪指令给出。例如变量DATA9是在其对应的内存单元(0100:001AH)开始重复地存放5个字节的00,而DATA10则指出在它对应的内存区重复地保留3个字的空间。当表达式的值为字符串时,对于字节类型变量,每个变量为一个字节,每个字节内存入一个字符的ASCII码,整个字符串可以在同一个引号内给出。对于字类型变量,每个变量的值不能超过2个字符,若为两个字符时同样遵循高位存入高字节,低位存入低字节的规则;若为一个字符时,该字符的ASCII码存入低字节,高字节为00
20、,如图4.1中的DATA6。对于双字、长字类型变量,每个变量的值也不能超过两个字符并存入两个低位字节。2)变量的属性变量具有下列属性:(1)段地址(SEG):变量所在段的段地址;(2)偏移地址(OFFSET):变量所在段内的偏移地址;(3)类型(TYPE):变量的类型是所定义的每个变量所占据的字节数,对于DB、DW、DD、DQ、DT定义的变量其类型分别为1、2、4、8、10。通常又将DB、DW、DD所定义的变量分别称为BYTE类型,WORD类型和DWORD类型变量。(4)长度(LENGTH):变量定义时,一个变量名所定义的变量个数。在含有DUP操作符的变量定义中,变量名所定义的变量个数为定义格
21、式中的重复次数。在其它各种变量定义中,每个变量名所定义的变量个数均为1。(5)大小(SIZE):变量定义语句中,分配给同一变量名的所有变量的总的字节数,其值为该变量的类型与长度的乘积。例4.1.1中所定义的部分变量的各属性的值列于表4.2中。上述5个属性中,前3个属性属于每一个变量,我们称其为主属性,后两个属性则是对同一语句中同一变量名所定义的所有变量而言的,我们称其为辅助属性。4.1.5属性操作符及表达式属性操作符及表达式前面我们已介绍了几种操作符及其表达式,这些操作符的操作对象都是数字数据。下面我们将介绍用来获取属性或重新定义某种属性的操作符,我们称其为属性操作符,对应这样的操作符,也有其
22、相应的表达式。1.获取属性的操作符获取属性的操作符标号或变量一旦定义,它们都具有相应的属性,获取属性的操作符及其表达式列于表4.3中。例如对图4.1中所定义的各变量,我们有:SEGDATA1结果为0100HOFFSETDATA1结果为0000LENGTHDATA6结果为1TYPEDATA6结果为2SIZEDATA9结果为5这些表达式与上面提到的运算表达式一样,不能构成单独的语句,只能是语句的一个成分,并且表达式的求值也是在汇编过程中完成的。例如我们可以有:MOV#AX,SIZEDATA9;将DATA9所占的字节数送AXMOVAX,SEGDATA1;将DATA1的段地址送AXMOVBL,TYPE
23、DATA9;将DATA9的类型送BL我们还可以有如下的变量定义:DAT1DB02H#;DAT2DW0F00H#;DAT3DW5DUP(?)#;DAT4DBLENGTHDAT3#;DAT5DWDAT3#;经汇编以后,DAT4对应的内存单元中存放的是变量DAT3的长度(即5),DAT5所对应的2个字节中存放的将是变量DAT3的偏移地址。2.PTR操作符操作符格式:类型PTR表达式格 式 中 的 类 型 可 以 是:BYTE、WORD、DWORD、NEAR和FAR。前三个类型为变量类型,后两个为标号类型。格式中的表达式可以是变量名、标号或其它地址表达式。PTR操作符的功能是用来重新定义已定义的变量或
24、标号的类型。例如上例中的变量DAT3是字变量,若程序中需将它作为字节变量使用时,必须用PTR操作来重新定义其类型。我们可以有MOVBYTEPTRDAT3,AL这里DAT3即为格式中的表达式,从而将DAT3重新定义为字节类型。整个语句的功能将是AL中的内容送到DAT3对应的一个字节中。要指出的是变量DAT3仅在该语句中作为字节变量使用,DAT3原来定义的字变量类型并没有修改。4.2 8086/8088 指令系统指令系统IBMPC/XT微型计算机的微处理器采用的是8088芯片,本节将介绍8088微处理器的指令系统。指令系统是指处理器所能完成的所有指令的集合。它是在微处理器设计时就确定了的,所以,对
25、于不同的微处理器,其指令系统中所包含的具体指令将是各不相同的。由于微处理器8088与8086的指令系统是完全一样的,所以,本节介绍的指令系统同样适用于8086CPU。8086/8088CPU指令系统可分成下面几类:(1)数据传送指令;(2)算术运算指令;(3)逻辑运算指令;(4)移位指令;(5)标志处理指令和CPU控制指令;(6)转移和循环控制指令;(7)调用和返回指令;(8)字符串操作指令;(9)输入、输出指令。本节主要介绍前5类指令,后面各类指令将结合程序设计和输入/输出时分别介绍。对于指令系统的介绍,我们重点将放在各条指令的功能和它们的使用上,关于这些指令的功能是如何实现的以及执行指令的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 原理 运用
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内