(中职)计算机原理模块三教学课件_第1页
(中职)计算机原理模块三教学课件_第2页
(中职)计算机原理模块三教学课件_第3页
(中职)计算机原理模块三教学课件_第4页
(中职)计算机原理模块三教学课件_第5页
已阅读5页,还剩197页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、YCF正版可修改PPT(中职)计算机原理模块三教学课件模块3 指令系统任务1 指令格式3.1.1 指令前缀3.1.2 指令中各字段的意义任务2 8086寻址方式3.2.1 数据类型3.2.2 寻址方式任务3 8086指令系统3.3.1 数据传送类指令下一页模块3 指令系统3.3.2 地址传送指令3.3.3 算术运算类指令3.3.4 控制转移类指令3.3.5 处理器控制类指令3.3.6 逻辑运算与移位类指令任务4 汇编语言简述3.4.1 汇编语言及语句格式3.4.2 汇编语言程序结构下一页上一页模块3 指令系统3.4.3 常用伪指令3.4.4 宏指令3.4.5 条件汇编3.4.6 保护方式编程指

2、令3.4.7 与保护方式程序接口3.4.8 汇编语言程序上机过程3.4.9 顺序程序3.4.10 循环程序3.4.11 分支程序设计下一页上一页模块3 指令系统3.4.12 子程序设计3.4.13 DOS调用程序设计上一页模块3 指令系统从科学发展的角度,对Intel新增加的指令也进行了介绍。从每一条指令的功能和操作,可以进一步领会微机硬件的操作过程。模块3将以Intel指令系统为背景对指令格式、指令功能进行描述,对从8086到Pentium的指令系统中的常用的一些指令有选择地、分门别类地进行了说明。本模块的重点是指令格式和指令的操作。返回任务1 指令格式指令由许多部分组成。在构成指令的这几部

3、分中,只有操作码部分是必须存在的,其余各部分则要根据指令操作所涉及的操作数类型以及操作数存放在何处等因素来决定取舍。任何一条机器指令都是由一组二进制代码构成的,通常又被进一步分成操作码部分和地址码部分,一般的指令格式如图3-1所示。Intel从8086到Pentium系列微处理器的指令都是由多字节组成的,一条指令可以由多个字节构成。指令的操作码表示指令所执行的操作,通常用指令的第一个字节表示。但由于一个字节所能表示的指令的条数有限,因此还会在指令的第二个字节中占用3位用作操作码。在一条指令中,除操作码之外的那些字节则被用来表示操作数的地址码。从8086到80286都是16位的微处理器,所以,它

4、们的指令格式是16位的,如图3-2所示。下一页返回任务1 指令格式Intel从80386以后的各高档微处理器都是32位的微处理器,它们所用的指令格式为如图3-3所示的32位的指令格式。初看起来,从8086到Pentium的指令格式不尽相同,且比较复杂。但这些指令却是很有规律的,而且16位的指令格式与32位的指令格式在80386以上的高档微处理器上是兼容的。如果Intel的32位微处理器运行的是16位程序,则像32位的指令格式那样,必须带有指令前缀,且在实模式下进行操作,在32位的微处理器上按16位的指令格式运行。Pentium微处理器指令的一般格式如图3-3所示,Pentium微处理器的所有指

5、令都是如图3-3所示的指令格式的子集。由图3-3可知,一条指令由可任选的指令前缀(可以是任何的次序),一个或两个原操作码字节,有可能要用的地址说明符(由Mod R/M字节和按比例变址基地址SIB字节构成),一个偏移量(根据需要)和一个立即操作数数据字段(如果需要)等元素组成。下一页返回上一页任务1 指令格式3.1.1指令前缀指令前缀是置于指令前面的一个或多个字节,它的作用是用来修改指令的操作。下面所列出的这4个指令前缀就是供应用程序使用的。1.指令前缀指令前缀并不经常出现,若出现,则由锁定前缀(LOCK)或一个重复前缀组成。2.段的超前前缀段的超前前缀用于显式地指定本条指令将使用CS,SS,D

6、S,ES,FS,GS这6个段寄存器中的哪一个。用于代替Pentium微处理器为本指令生成默认的段寄存器。3.操作数大小前缀指令默认的操作数大小是16位或32位的,操作数大小前缀用来在32位和16位操作数之间进行切换。下一页返回上一页任务1 指令格式4.地址大小前缀在对存储器进行寻址操作时,微处理器既可以使用16位地址,也可以使用犯位的地址。地址的大小决定了指令格式中偏移量的大小以及在计算有效地址时生成的偏移量的大小。3.1.2指令中各字段的意义1.操作码字段操作码字段占用1个或2个字节。由操作码字段规定指令的操作性质,如操作数的类型(是字节、字、还是双字)、操作数的传送方向(是取自存储器,还是

7、存入存储器)以及寄存器编码或符号扩展等。下一页返回上一页任务1 指令格式2. Mod R/M字段Mod R/M字段和SIB字段是寻址方式说明字段。Mod R/M是主寻址字节,由这个字节指定操作数是寄存器操作数还是存储器操作数。若是存储器操作数,则用这个字节中的一个字段来说明将要采用的寻址方式。其实,ModR/M字节由Mod字段(2位)、Reg/OPcode字段(3位)和R/ M字段(3位)这样3个字段组成。Mod字段(2位)和R/M字段(3位)这5位可以构造成32个不同的值。具体地,它们可分别用于指示8个寄存器和24种变址方式;Reg/OPcode字段(3位)用来指定8个寄存器中的一个,或者用

8、来作为操作码信息的3个补充位;R/M字段(3位)用来指定一个寄存器,指示出操作数的位置,或者用来作为寻址方式的一个组成部分,与Mod字段组合起来进行编码。下一页返回上一页任务1 指令格式3.SIB字段SIB字段又被进一步分成3个字段,分别是SS字段(2位),Index字段(3位)和Base字段(3位)。SS字段在进行按比例变址操作时用来当比例因子,Index字段用来指示使用的是哪一个变址寄存器,而用Base字段则指示基地址寄存器。4.偏移量寻址方式一经确定,偏移量也就随之确定了,一个用8位、16位或32位的带符号的整数表示的偏移量也就被放入了指令之中。5.立即数立即数就是包括在指令中的一个8位

9、、16位或32位的操作数。返回上一页任务2 8086寻址方式在指令中,操作数或操作数的地址可用多种方式来表示,统称为寻址方式。同一条指令可有不同的寻址方式,以说明不同的操作对象。3.2.1数据类型在计算机中,数据有多种类型。一种是指令处理的对象,称为操作数;另一种表示指令,称为指令字;第三种是存储器单元的序号,称为地址。其中,操作数又分为两种,一种是参加运算或由计算机处理的对象,称为数据操作数,简称为数据;另一种用来表示转移指令的目标地址,称为转移地址操作数,简称为转移地址。下一页返回任务2 8086寻址方式1.数据操作数根据操作数存放的位置或者存放方式,常见的数据操作数有3种,一种是在指令中

10、直接给出,称为立即数;另一种存放在寄存器中,称为寄存器数据;第三种存放在存储器中,称为存储器数据。2.转移地址操作数转移地址操作数用来表示转移指令的目标地址。其表示方式可以在转移指令中直接给出,也可以根据某一寻址方式经计算后求得。3.2.2寻址方式根据操作数的两大类型,8086微处理器的寻址方式也可分为两大类型,即数据寻址方式和转移地址寻址方式。下一页返回上一页任务2 8086寻址方式1.数据寻址方式数据寻址方式有以下7种类型。1)立即数寻址立即数是指令操作数域直接给出参加运算或者进行某种操作的数据,又称即时数。它跟在操作码之后作为指令的一部分直接存放在代码段中,有8位、16位等形式。对于16

11、位数据,低字节在先,高字节在后。举例如下。MOV AL,5执行后(AL) =O5H,其示意如图3-4(a)所示。又如,指令MOV AX,2790H执行后(AX) =2790H,其示意如图3-4(b)所示。下一页返回上一页任务2 8086寻址方式立即数只能是源操作数,不能是目的操作数。这种寻址方式执行速度快,但是灵活性差,主要用来对寄存器或存储器赋值。2)寄存器寻址寄存器寻址是指令操作数域给出存放操作数的寄存器。对于8位操作数,寄存器可以是AL,AH,BL,BH,CL,CH,DL,DH;对于16位操作数,寄存器可以是AX,BX,CX,DX,SI,DI,SP,BP。举例如下。MOV BX,AX其示

12、意如图3-5所示。由于操作数在寄存器中,因此与存储器寻址相比,执行速度快。下一页返回上一页任务2 8086寻址方式3)直接寻址直接寻址是指令操作数域给出存放操作数地址的偏移量,也称为有效地址,常用EA表示。如果操作数存放在数据段以外的其他段中,应在指令中指定段寄存器。直接寻址示意如图3-6所示。举例如下。MOV BX,2000 H设执行前(DS) = 4000 H , EA = 2000 H , ( 42000 H ) = 1 FH , ( 42001 H ) = 75 H,则执行后(BX)=751FH,其示意如图3-7所示。在汇编语言中,也可以使用符号地址代替数值地址。举例如下。MOV AX

13、,VALUE其中,VALUE表示存放操作数单元的符号地址。符号地址出现在指令中时,可省略方括号,例如,MOV AX,DATA。下一页返回上一页任务2 8086寻址方式4)寄存器间接寻址寄存器间接寻址是指令操作数域给出存放操作数地址偏移量的寄存器。其寄存器主要有BX ,BP,SI和DI。如果没有特别说明,使用寄存器BX ,SI ,DI寻址时默认操作数在数据段中,即段寄存器DS。使用BP寻址时,默认操作数在堆栈段中,即段寄存器SS。物理地址的生成如图3-8所示。举例如下。MOV AX,BX设执行前(DS)=3000H, ( BX)=3000H,则执行后(AX) =2C7DH,其示意如图3-9所示。

14、又如,指令MOV AX,ES : SI,其段寄存器为ES,表示数据在附加段中。下一页返回上一页任务2 8086寻址方式5)寄存器相对寻址寄存器相对寻址是指令操作数域给出存放基地址的基址寄存器和一个偏移量,基地址与偏移量相加,作为操作数地址的偏移地址,即有效地址EA。段地址左移4位,与有效地址相加,生成20位的物理地址,如图3-10所示。举例如下。MOV AX,DATADI设执行前(DS)=3000H, (DI) =2000H, DATA =300H,则执行后(AX) =201AH,其意如图3-11所示。6)基址加变址寻址基址加变址寻址是指令操作数域给出一个存放基地址的基址寄存器和一个存放变址基

15、值的变址寄存器,两个寄存器中的数据相加,作为操作数的偏移地址,即有效地址EA。基址寄存器主要有BX ,BP,变址寄存器主要有SI和DI。其中,基址寄存器BX默认段寄存器DS基址寄存器BP默认段寄存器SS,允许使用段跨越,其示意如图3-12所示。下一页返回上一页任务2 8086寻址方式举例如下。MOV AX,BXDI或MOV AX,BX+DI设执行前(DS) = 2100H, ( BX) = 0158H, ( DI) =10A5H,则执行后(AX) =1234H,其示意如图3-13所示。7)相对基址加变址寻址相对基址加变址寻址是指令操作数域给出的是一个存放基地址的基址寄存器、一个存放变址基值的变

16、址寄存器和一个偏移量,两个寄存器中的数据及偏移量相加,作为操作数的偏移地址,即有效地址EA。基址寄存器主要有BX , BP,变址寄存器主要有SI和DI。其中,基址寄存器BX默认段寄存器DS,基址寄存器BP默认段寄存器SS。举例如下。下一页返回上一页任务2 8086寻址方式MOV AX,MASKBXDIMOV AX,MASKBX+DIMOV AX,MASK+BX+DI设执行前(DS) =3000H, ( BX) =2000H, ( DI) =1000H, MASK= 0250H,则执行后(AX)= 4675 H,其示意如图3-14所示。这种寻址方式为数组、表格及堆栈的访问提供了很大的方便。2.转

17、移地址寻址方式这种寻址方式主要用来确定转移指令和子程序调用指令CALL的目标地址,其目标地址可能在当前代码段内,也可能在当前代码段外,故有4种方式。下一页返回上一页任务2 8086寻址方式1)段内相对寻址段内相对寻址是指程序的转移地址由指令指针IP的当前值与指令中给出的8位或16位偏移量相加而生成。偏移量是一个带符号的数,用补码表示。其中8位偏移量称为段内短转移SHORT,转移范围为-128+127 ;16位偏移量称为段内近转移NEAR,转移范围为-32768+32767。其示意如图3-15所示。段内相对寻址的特点是代码段寄存器CS的值保持不变,偏移量可以是8位或者16位。指令格式如下。JMP

18、 SHORT OPR ;IP (IP)+8位偏移量JMP NEAR PTR OPR ;IP (IP)+16位偏移量下一页返回上一页任务2 8086寻址方式2)段内间接寻址段内间接寻址是指转移指令的偏移地址存放在一个16位的寄存器或存储器单元中,用来取代IP中的当前值。这个寄存器或存储器单元可由数据寻址方式中除立即数之外的任何一种方式得到。其示意如图3-16所示。段内间接寻址的特点仍是CS的值不变,IP的值由一个16位寄存器或存储器单元提供的数所取代。举例如下。JMP BX ;把寄存器BX中的数送入指令指针IP中JMP WORD PTRBXSI ;按照基址加变址的方式获取操作数,送入IP中下一页

19、返回上一页任务2 8086寻址方式3)段间直接寻址段间直接寻址是在指令中直接给出转移的16位段地址和16位偏移地址,分别送入代码段寄存器CS和指令指针寄存器IP中。举例如下。JMP FAR PTR NEXTSUB段间寻址由FAR来说明,其中NEXTSUB是符号地址,在指令中直接给出,包括转移目标的偏移地址和段地址。4)段间间接寻址在段间间接寻址方式中,转移地址存放在存储器中的两个连续字单元中,其中第一个字是偏移地址,第二个字是段地址。存储器单元地址可用数据寻址方式中除立即数和寄存器直接寻址以外的任何一种寻址方式来确定,如图3-17所示。举例如下。下一页返回上一页任务2 8086寻址方式JMP

20、DWORD PTRBX ;由寄存器BX确定连续两个存储器单元,取出其中的数据分别送入IP和CS中JMP DWORD PTRBP+SI+100 H;由BP+SI+100H确定连续两个存储器单元,取出其中的数据分别送入IP和CS中返回上一页任务3 8086指令系统8086指令系统是80X86/Pentium的基本指令集。指令的操作数可以是8位或16位操作数,偏移地址是16位地址。8086指令系统按功能可分为如下6大类指令。(1)数据传送类指令。(2)算术运算类指令。(3)逻辑运算与移位类指令。(4)串操作类指令。(5)控制转移类指令。(6)处理器控制类指令。学习指令时要注意掌握各类指令的书写格式、

21、指令功能、寻址方式、指令对标志位的影响等方面。全面准确地理解每条指令的功能和用法是编写程序的关键。下一页返回任务3 8086指令系统3.3.1数据传送类指令数据传送类指令是计算机中最基本、最重要,也是最常用的一种指令,其功能是把数据、地址或立即数传送到寄存器或存储单元。此类指令除了SAHF和POPF外均不影响标志寄存器的内容。按照传送的内容和功能的不同,可将数据传送指令分为3组,如表3-1所示。其中dst表示目的操作数,src表示源操作数。1.MOV指令MOV指令的源操作数可以是存储器、通用寄存器、段寄存器以及立即数,目的操作数可以是存储器、通用寄存器与段寄存器。图3-18描绘了MOV指令可以

22、传送的路径。下一页返回上一页任务3 8086指令系统表3-2列出了常用的MOV指令类型。表中使用了以下含义的通用符号。(1)imm表示立即数。(2)reg表示通用寄存器。(3)r/m表示寄存器或者存储器。(4)sreg表示段寄存器。以上符号也适用于IA通用指令集中的其他指令。由图3-18和表3-2中可以看出必须注意以下几点问题。存储器之间不能互相传送,即源与目的两个操作数不能同时为存储器。段寄存器之间不能互相传送,即源与目的两个操作数不能同时为段寄存器。下一页返回上一页任务3 8086指令系统立即数不能直接传送给段寄存器,必须借助通用寄存器实现。例如,将55 H装入DS段寄存器就应使用以下2条

23、指令。MOV AX,55HMOV DS,AX在汇编语言编程的基本规则中必须保持源与目的两个操作数的类型一致,即两者都是16位,或者都是32位。由于常数是不带类型的,因而当CPU已知目的操作数的类型时就会自动扩展常数的长度。例如,MOV AX,68是合法的,此时AH中装0。但当CPU不能确定目的操作数类型时就无法处理常数,例如,MOV BX , 68是非法的。此时的目的操作数只知是由BX指定了首地址的存储器数据,然而是字节还是字或者其他数据类型都未确定,因此必须在指令的目的操作数前加入类型前缀。举例如下。下一页返回上一页任务3 8086指令系统MOV WORD PTRBX,68 ;(BX) 68

24、,(BX+1) 00MOV DWORD PTRBX,68 ;(BX) 68,(BX+1/2/3) 00表3-2中的3条串操作指令:MOVSB是字节类型串操作;MOVSIV是字类型串操作;MOVSD是双字类型串操作。它们均是专门针对数据块的传送而设计的,执行该指令时CPU将自动发生以下一系列操作。将由DS:SI指定的源存储器数据传送到由ES;DI指定的目的存储器中。源地址指向下一个单元,对于MOVSB是SI 1SI,对于MOVSW是SI 2 SI,对于MOVSD是SI 4 SI,具体为加法还是减法则取决于标志寄存器中的方向标志位D。D =0时做加法,地址递增;D=1时做减法,地址递减。下一页返回

25、上一页任务3 8086指令系统目的地址指向下一个单元,对于MOVSB是DI 1 DI,对于MOVSW是DI 2 DI,对于MOVSD是DI 4 DI,具体为加法还是减法同上述源地址的方向同步。为了达到对数据块重复操作的目的,应在该指令前加上重复前缀指令REP : REPMOVSB;字节类型重复串操作的指令如下。REP MOVSW ;字类型重复串操作RFP MOVSD ;双字类型重复串操作执行该指令除发生上面已经介绍的3个自动操作外,还会使计数寄存器CX或ECX自动减1,并判断它的内容是否减到了零,若未到0则会重复执行该条指令,直到减为0时才退出重复转入下条指令。下一页返回上一页任务3 8086

26、指令系统例3-1假设LISTA与LISTB为两个字节类型数据存储器缓冲区,各有100个字节的空间,试编写将LISTA缓冲区数据复制到LISTB缓冲区的程序段。CLD ;设D =0,选择地址递增方向MOV SI , OFFSET LISTA;指向源块的首地址MOV DI , OFFSET LISTB;指向目的块的首地址MOV CX ,100;循环计数指针,100个字节REP MOVSB;循环传送,直至CX =0第2条指令在变量前加了前缀OFFSET,它表示将缓冲区LISTA的偏移量首地址传送到SI寄存器。同理,第3条指令表示将缓冲区LISTB的偏移量首地址传送到DI寄存器。从而使得CPU可顺利执

27、行MOV SB指令,由DS ; SI指定的源地址向由ES;DI指定的目的地址传送数据。下一页返回上一页任务3 8086指令系统3.3.2地址传送指令地址传送指令有LDS , LES , LFS , LGS , LSS与LEA 6条指令,前5条用于装载一个逻辑地址,通用格式如下。LDS reg,r/ mLES reg,r/ mLFS reg,r/ mLGS reg,r/ mLSS reg,r/ m其中指令助记符中已经隐含了装载的段地址分别为DS ,ES ,FS,GS和SS寄存器,而目的操作数reg就是装载偏移量地址的寄存器,源操作数r/m则指定被装载地址存放位置的首地址。下一页返回上一页任务3

28、8086指令系统表3 -3中列举了它们的指令例句,可见这5条指令都是将存储器中4个字节数据的低位字装入通用寄存器作地址偏移量,高位字装入相应的段寄存器。这是IA指令体系中的一个通用规则,即当存储器中的内容表示地址时则有以下规定。(1)当存储器变量为2个字节时,仅表示地址偏移量。(2)当存储器变量为4个字节时,则表示段地址和地址偏移量。(3)存放的格式遵循数据存放的普遍规定,即高端地址放高位字节,低端地址放低位字节。设存储器变量的首地址为N,则可具体描述如下。下一页返回上一页任务3 8086指令系统N+3单元放段地址高8位。N+2单元放段地址低8位。N+1单元放偏移量高8位。N+0单元放偏移量低

29、8位。除了以上5条装载指令外,LEA也是一条装载地址指针的指令,通用格式为LEA reg ,mem。注意:它与以上5条指令不同,这里不是装载指定存储器中的内容,而是直接将源操作数mem的偏移量地址装至reg寄存器,见表3-3中的指令举例与说明。下一页返回上一页任务3 8086指令系统3.3.3算术运算类指令8086的算术运算类指令包括加、减、乘、除4种基本运算指令,以及进行BCD码十进制数运算的指令。算术运算指令涉及无符号数和带符号数两种类型的数据。加减运算采取同一套指令,乘除运算有各自不同的指令。加减法运算在执行过程中有可能产生溢出,对于无符号数,如果加法运算最高位向前产生进位,减法运算最高

30、位向前有借位,则表示出现溢出,用CF标志位可检测无符号数是否溢出。对于带符号数,采用补码运算,符号位参加运算,溢出则表示运算结果发生错误,用OF标志位可检测带符号数是否溢出。下一页返回上一页任务3 8086指令系统算术运算指令会影响标志位,其规则如下。运算结果向前产生进位或借位时,CF=1最高位向前进位和次高位向前进位不同时,0F=1若运算结果为0,ZF =1若运算结果最高位为1,SF=1若运算结果中有偶数个1,PF=1算术运算指令有20条,分为5种类型,可对4种类型的数据进行运算,即无符号二进制数、带符号二进制数、无符号压缩型BCD码和无符号非压缩型BCD码。二进制数可以是8位或16位,十进

31、制数以字节为单位参加运算。对于单操作数指令不允许使用立即数;对于双操作数指令至少有一个操作数在寄存器中,另一个操作数可以使用任意寻址方式;立即数不能作为目的操作数。运算结果影响状态标志位。下一页返回上一页任务3 8086指令系统加法指令1)加法指令ADD格式:ADD DST, SRC功能:DST (DST)+(SRC)。说明:源/目的操作数地址如图3-19所示,其中目的操作数不能使用立即数,两存储器单元之间不能直接进行加法运算,允许段跨越;源/目的操作数位数必须相同,可以是8位或者16位。 ADD指令不区分两个加数是无符号数还是带符号数,运算结果的二进制形式相同,影响状态标志位。举例如下。下一

32、页返回上一页任务3 8086指令系统ADD AL,25H ;AL寄存器指明操作是字节操作ADD AL, BX ;AL寄存器指明操作是字节操作ADD WORD PTR BX ,12H ;WORD PTR指明内存操作数为字操作数又如指令ADD AX,BX,设执行前(AX) = 1234H, ( BX)=0F7C9H,则执行后(AX)=09FDH,OF=0,SF=0,ZF=0,AF=0,PF=0,CF=1。2)带进位加法指令ADC格式:ADC DST,SRC功能: DST (DST)+(SRC)。说明:进位位CF的值加到两数和的最低位,其他与ADD指令相同。 下一页返回上一页任务3 8086指令系统

33、例3-2试编写程序,计算双字4A750000H +78912365H之和。解:双字操作,由寄存器DX和AX组成32位累加器,先用ADD指令进行低字运算,再用ADC指令进行高字运算。其程序如下。MOV AX,OOOOHMOV DX,4A75HADD AX ,2365 HADC DX,7891H3)加1指令INC格式:INC DST功能:DST (DST)+1。下一页返回上一页任务3 8086指令系统说明:操作数可以是除立即数之外的其他寻址方式,可以是字节,也可以是字,不区分无符号数还是带符号数允许段跨越;影响除CF之外的其他状态标志位。2.减法指令1)减法指令SUB格式:SUB DST,SRC功

34、能:DST (DST)-(SRC)。说明:源/目的操作数地址如图3-19所示,目的操作数不能使用立即数,两存储器单元不能直接进行减法运算,允许段跨越;源/目的操作数位数必须相同,可以是8位,也可以是16位。下一页返回上一页任务3 8086指令系统 SUB指令不区分操作数是无符号数还是带符号数,运算结果的二进制形式相同,影响状态标志位。举例如下。SUB AX,BX设执行前(AX) =578FH, ( DS) = 1000H, ( BX) -2000H, ( 12000H) -7890H,则执行后(AX)=ODEFFH,OF=0,SF=1,ZF=0,AF=0,PF=1,CF=1。2)带借位减法指令

35、SBB格式:SBB DST,SRC功能:DST (DST)-(SRC)-CF。说明:被减数减去减数,再减进位位CF的值,其他与减法指令SUB相同。下一页返回上一页任务3 8086指令系统3)减1指令DEC格式:DEC DST功能:DST (DST)-1。说明:同INC指令。例如,指令DEC CX。4)求补指令NEG格式:NEG DST功能:DSTO-(DST)。说明:操作数同INC指令,影响所有状态标志位,操作数为零时CF=1,其他情况下CF=0。例如,指令NEG AX,设执行前(AX) = OFFFFH,则执行后(AX) =OOOIH,OF=O,SF=0,ZF=0,AF=1,PF=0,CF=

36、1。下一页返回上一页任务3 8086指令系统5)比较指令CMP格式:CMP DST, SRC功能:(DST)-(SRC)置状态标志位。说明:进行减法运算,不送结果,仅置状态标志位。3.乘法指令1)无符号数乘法指令MUL格式:MUL SRC功能:AX (AL) x (SRC) ;字节操作 DX,AX (AX)x(SRC) ;字操作下一页返回上一页任务3 8086指令系统说明:源/目的操作数均为无符号数。目的操作数必须是累加器AX或AL;源操作数可以是除立即数之外的其他寻址方式,允许段跨越。除OF和CF之外的状态标志无定义;执行MUL指令后,若乘积的高字/高字节为0,则OF=CF=O;否则,OF=

37、CF=1。例3-3将ADDR1和ADDR2两个字节单元的无符号数相乘,乘积存放在ADDR3字单元中。解:使用无符号指令,程序如下。MOV AL,ADDR1MUL ADDR2MOV ADDR3,AX下一页返回上一页任务3 8086指令系统2)带符号数乘法指令IMUL格式:IMUL SRC功能:操作数为带符号数,其他与MUL相同。说明:源/目的操作数均为带符号数。同MUL指令。除OF和CF之外的标志无定义;执行IMUL指令后,若乘积的高字/高字节是符号扩展位时,则OF=CF=O;否则,OF=CF=1。4.除法指令1)无符号数除法指令DIV格式:DIV SRC功能:AL (AX) /(SRC)的商A

38、H 余数; AX (DX,AX)/(SRC)的商DX 余数。下一页返回上一页任务3 8086指令系统说明:进行字节运算时,16位的被除数存放在AX中,进行字运算时32位的被除数存放在DX,AX中;若被除数的长度不是除数的2倍,被除数高位补0;除数可以是除立即数之外的其他寻址方式,允许段跨越。所有状态标志位无定义。2)带符号数除法指令IDIV格式:IDIV SRC功能:操作数是带符号数,其他与DIV相同。说明:被除数的长度不是除数的2倍时,被除数高位符号扩展,其他与DIV指令相同。下一页返回上一页任务3 8086指令系统例3一4设(AX) =0400H, ( BL) =OB4H,执行指令DIV

39、BL和IDIV BL。解:执行指令DIV BL。由于(AX)和(BL)为无符号数,因此指令DIV BL执行后,结果如下。(AL)=OS H AL商(AH)=7CH AH 余数执行指令IDIV BL。由于(AX)和(BL)为带符号的补码数,因此指令IDIV BL执行后,结果如下。(AL)=0 F3 H=-13D AL 商(AH)=24H =36D AH 余数在进行除法运算时,若商溢出,直接转入0型中断处理。3 ) CBW符号位扩展指令下一页返回上一页任务3 8086指令系统格式:CBW字节转换为字;CWD字转换为双字。功能:字节扩展AH(AL)的符号位; 字扩展DX(AX)的符号位。说明:源/目

40、操作数地址隐含为AH与AL,DX与AX,不影响状态标志位。5.十进制调整指令BCD码数据按一般算术运算指令操作后,必须用调整指令对其进行修正,该类指令共有6条。1)非压缩BCD码加法调整指令AAA格式:AAA功能:AL把AL中的和调整成非压缩BCD码格式AH (AH)+调整产生的进位值。下一页返回上一页任务3 8086指令系统说明:两加数为非压缩BCD码,在执行指令ADD ,ADC ,INC之后结果在寄存器AL中;影响状态标志CF和AF,其余标志位无定义。举例如下。ADD AL,BLAAA2)压缩BCD码加法调整指令DAA格式:DAA功能:AL把AL中的和调整成压缩BCD码格式。说明:两加数为

41、压缩BCD码,在执行指令ADD ,ADC , INC之后结果在寄存器AL中;状态标志OF无定义,影响其余状态标志位。举例如下。ADD AL,BLDAA下一页返回上一页任务3 8086指令系统3)非压缩BCD码减法调整指令AAS格式:AAS功能:AL把AL中的差调整成非压缩BCD码格式; AH (AH)调整产生的借位。说明:两操作数为非压缩BCD码,执行指令SUB,SBB,DEC之后结果在寄存器AL中;影响状态标志CF和AF,其余标志位无定义。4)压缩BCD码减法调整指令DAS格式:DAS功能:(AL) 把AL中的差调整成压缩BCD码格式。说明:两操作数为压缩BCD码,执行指令SUB,SBB,D

42、EC之后结果在寄存器AL中;状态标志OF无定义,影响其余标志位。下一页返回上一页任务3 8086指令系统5)非压缩BCD码乘法调整指令AAM格式:AAM功能:AX把AL中的乘积调整成非压缩BCD码格式。说明:两乘数为非压缩BCD码,执行指令MUL之后结果在寄存器AL中;调整后十位数在AH中,个位数在AL中;影响状态标志SF,ZF和PF,其余标志位无定义。举例如下。MUL AL,BLAAM6)非压缩BCD码除法调整指令AAD格式:AAD功能:AL 10 x (AHD+(AL) AH 0说明:下一页返回上一页任务3 8086指令系统在指令DIV之前使用,被除数是两位非压缩BCD码,存放在AX中,A

43、H中存放十位数字,AL中存放个位数字,且高4位均为0;除数是一位非压缩的BCD码,高4位为。;调整结果在AL中,AH中清0;执行其后的DIV指令后,AL中为一位非压缩BCD码的商,AH中为一位BCD码的余数。影响状态标志SF,ZF和PF,其余OF,CF和AF标志位无定义。3.3.4控制转移类指令一般情况下,程序是按指令顺序地逐条执行的,但实际上经常需要改变程序的执行流程。控制转移类指令用来改变程序执行的方向,即修改IP和CS的值。下一页返回上一页任务3 8086指令系统按转移位置可将转移指令分为段内转移和段间转移。若指令给出改变IP中内容的信息,转移的目标位置和转移指令在同一个代码段,则称为段

44、内转移;若指令给出改变IP中内容的信息,又给出改变CS中内容的信息,转移的目标位置和转移指令不在同一个代码段,则称为段间转移。根据转移指令的功能,可分为无条件转移指令、条件转移指令、循环控制指令、子程序调用和返回指令等。1.无条件转移指令无条件转移(JMP)指令中作为转移目的地址的操作数,在汇编语言格式中可直接使用符号地址。在汇编之后可得到相应的段地址及偏移量。JMP指令控制处理机转移到指定的位置去执行程序,指令中必须给出转移位置的目标地址,通常有如下5种形式。下一页返回上一页任务3 8086指令系统(1) JMP SHORT opr表示段内直接短转移指令。(2) JMP NEAR PTR o

45、pr表示段内直接近转移指令。(3) JMP WORD PTR opr表示段内间接转移指令。(4) JMP FAR PTR opr表示段间直接转移指令。(5) JMP DWORD PTR opr表示段间间接转移指令。opr为转移目标地址,可直接使用符号地址(标号)。属性运算符SHORT指示汇编程序将符号地址汇编成8位偏移量,指令执行时,转移的目标地址为当前的IP值与指令中给定的8位偏移量之和。属性运算符NEAR PTR指示汇编程序将符号地址汇编成16位偏移量,指令执行时,转移的目标地址为当前的IP值与指令中给定的16位偏移量之和。下一页返回上一页任务3 8086指令系统偏移地址紧跟在指令操作码之

46、后,由汇编程序计算得出。有效地址EA的值是由叩:的寻址方式来决定的。若是寄存器寻址,指令中直接给出寄存器号,寄存器中的内容送到IP中;若是存储器寻址,按存储器寻址方式计算出有效地址和物理地址,用这个物理地址去读取内存中的数据送给IP指针。例3-5执行段内间接转移指令:JMP WORD PTR BX .分析:若给定(IP)=0012H, ( BX) -O100H, ( DS) =2000H, (20100H) -80H, (20101H)=OOH,目标地址为存储器寻址。有效地址计算:EA=(BX) -O100H。物理地址计算:PA = DS x lOH + EA = 20100H。所以,指令执行

47、后(IP) -0080Ho如果是段间直接转移,则执行操作:IPopr的偏移地址;CS opr所在段的段地址。下一页返回上一页任务3 8086指令系统如果是段间间接转移,则执行操作:IP (EA) ;CS (EA +2) . EA的值是由opr的寻址方式来决定的,按寻址方式计算出有效地址和物理地址,用物理地址去读取内存中连续的两个字数据,其中低位字数据送给IP,高位字数据送给CS.例3-6执行段I司I司接转移指令:JMP DWORD PTRBX+20H。分析:若给定(CS) =3000H, ( IP) =0012H, ( BX)=O100H, ( DS) =2000H, (20120H)=A0

48、H,(20121 H)=00 H,(20122 H)=00 H,(20123 H)=50H。有效地址计算:EA=(BX) +20H =0120H。物理地址计算:PA = DS x lOH + EA=20120 H。指令执行后:(IP)=00A0H, (CS)=5000H.2.条件转移指令8086指令系统的条件转移指令以某些标志位的状态或有关标志位的逻辑运算结果作为下一页返回上一页任务3 8086指令系统依据,以此决定是否转移。这些标志位通常由条件转移指令的上一条指令所设置。条件转移指令将根据这些标志位的状态,判断是否满足对应的测试条件。若满足条件,则转移到指令指定的地方,否则继续执行条件转移指

49、令之后的指令。此外还有无符号数比较转移指令和带符号数比较转移指令两类,这两类指令一般在CMP指令后使用。条件转移指令的助记符、指令名称、转移条件如表3-4所示。下一页返回上一页任务3 8086指令系统例3-7已知在内存中有两个无符号字节数据X1和X2,比较两个数是否相等,若相等,则将RESULT单元置1,否则置0。其程序段如下。MOV AL,X1 ;将第1个数取出送至AL中CMP AL,X2 ;和第2个数进行比较JZ NEXT ;相等则转到NEXT位置执行MOV RESULT,0 ;否则,将RESULT单元置。JMP EXIT ;然后转到EXIT位置NEXT:MOV RESULT,1 ;将RE

50、SULT单元置1EXIT:HLT下一页返回上一页任务3 8086指令系统例3-8已知在内存中有两个无符号字节数据NUM1和NUM2,找出其中的最大数送到MAX单元。其程序段如下。MOV AL,NUM1 ;将第1个数取出送到AL中CMP AL,NUM2 ;和第2个数进行比较JA NEXT ;第1个数大于第2个数则转到NEXT位置MOV AL,NUM2 ;否则将第2个数取出送到AL中NEXT:MOV MAX,AL ;AL中为最大数送到MAX单元本题若改为带符号数,则程序段如下。MOV AL,NUM1;将第1个数取出送到AL中下一页返回上一页任务3 8086指令系统CMP AL,NUM2 ;和第2个

51、数进行比较JG NEXT ;第1个数大于第2个数则转到NEXT位置MOV AL,NUM2 ;否则将第2个数取出送到AL中NEXT:MOV MAX,AL ;AL中为最大数,送到MAX单元3.循环控制指令循环程序是一种常用的程序结构,为了加快对循环程序的控制,8086系统专门设置了一组循环控制指令,如表3-5所示,循环计数值在CX中。下一页返回上一页任务3 8086指令系统循环控制指令只是根据结果的标志位状态进行控制操作,指令本身不影响标志位。循环控制指令用于控制程序的循环,其控制转向的目的地址是在以当前指令指针IP内容为中心的-128+127的范围内,指令采用CX作为计数器,每执行一次循环,CX

52、内容减1,直到为0,循环结束。LOOP指令是以寄存器CX的内容作为计数控制,做(CX) (CX)-1的操作,并判断CX;当(CX) 0时,转移到由操作数指示的目的地址,即(IP) (IP)+位移量,进行循环;当(CX)=0时,结束循环。LOOPZ/LOOPE指令可完成当ZF=1且(CX)0条件下的循环操作。在LOOPZ或LOOPE所做的控制循环操作过程中,除了进行(CX)(CX)-1的操作,还要判断(CX)是否为零。此外,还将判断标志位ZF的值。下一页返回上一页任务3 8086指令系统LOOPNZ或LOOPNE指令可完成当ZF=0且(CX)0的条件下的循环控制操作。其操作过程类似于LOOPZ或

53、LOOPE指令。例3-9在内存中有一个具有CN个字节的数据串,首单元地址为DATA-BUF,找出第1个不为0的数据的地址并送到ADDR单元中。其程序如下。MOV SI,OFFSET DATA-BUF ;取首单元地址MOV CX,CN;计数器初值MOV AL,O;AL清零DEC SI;循环初始化LP:INC SI;指针增1CMP AL,SI ;内存中的数据和AL中的内容比较LOOPZ LP;为0且未比较到末尾转LP位置继续JZ EXIT;否则判断ZF,若为1,转EXITMOV ADDR,SI;ZF为O,SI中的内容送ADDR下一页返回上一页任务3 8086指令系统EXIT:HLT该程序段中循环结

54、束的情况有两种:一种是找到了不为0的数据,一种是CN个数据比较结束后未找到。所以,退出循环后要判断ZF是否为1,ZF -1说明所有数据都为0,否则就是找到了不为0的数据,并且由SI指示其存储地址。4.子程序调用和返回指令在程序设计过程中,通常把功能分解为若干个小的模块。每一个小功能模块对应一个过程。在汇编语言中,过程又称为子程序。程序中可由调用程序(称为主程序)调用这些子程序,子程序执行完毕后返回主程序继续执行。子程序调用分为段内和段间调用。指令格式如下。下一页返回上一页任务3 8086指令系统CALL NEAR PTR opr ;表示段内调用CALL FAR PTR opr ;表示段间调用R

55、ET;表示子程序返回其中,opr为子程序名(即子程序第1条指令的符号地址)。例3-10在主程序中执行一条段内调用语句。程序段如下。MAINPROC FAR;定义主程序MOV AX , DATA ; DS初始化MOV DS,AXCALL DISPLAY;调用子程序DISPLAYDISPLAYPROC NEAR;定义子程序PUSH AX;保护现场下一页返回上一页任务3 8086指令系统PUSH BXRET;子程序返回3.3.5处理器控制类指令这类指令主要用于修改状态标志位、控制CPU的功能,如使CPU暂停、等待、空操作等,如表3-6所示。在CPU控制指令中,H LT指令使程序暂停执行,这时CPU不

56、进行任何操作,当CPU发生复位或发生外部中断时,CPU脱离暂停状态,H LT指令可用于程序中等待中断;WAIT指令在CPU测试引脚为高电平(无效)时,使CPU进入等待状态。下一页返回上一页任务3 8086指令系统这时,CPU不做任何操作。当CPU测试引脚为低电平(有效)时,CPU脱离等待状态,继续执行WAIT指令后面的指令;NOP指令只做空操作,不执行其他任何操作,占用1B存储单元,空耗一个指令执行周期,该指令常用于程序调试,还可以实现软件延时;LOCK指令是一个前缀,可以加在任何指令之前,CPU执行该指令时封锁总线;ESC指令将处理器的控制权交给协处理器,如在8086系统中可加入浮点运算协处

57、理器8087,若8086微处理器发现是一条浮点指令时,就利用ESC指令将浮点指令交给8087执行。下一页返回上一页任务3 8086指令系统3.3.6逻辑运算与移位类指令逻辑运算与移位指令共有13条,分为3种类型,即逻辑运算指令、移位指令和循环移位指令,可对8位/16位寄存器或存储器中的数据进行操作。1.逻辑运算指令逻辑运算指令有5条,其中源/目的操作数地址同算术运算指令、单操作数指令不允许使用立即数,双操作数指令中至少有一个操作数在寄存器中,另一个操作数可以使用任意寻址方式,而立即数不能作为目的操作数。下一页返回上一页任务3 8086指令系统1)逻辑“与”指令AND格式:AND DST, SR

58、C功能:DST (DST) (SRC)。说明:使状态标志CF和OF清。,AF无定义,SF,ZF和PF由运算结果设置;源操作数中某些位为0时,可使目的操作数的相应位清0。举例如下。AND AX ,1110 1111 0111 1111 B;使AX中第7 ,12位清0,其余位不变2)逻辑“或”指令OR格式:OR DST,SRC功能:DST (DST) (SRC)。说明:对状态标志位的影响同AND指令;若源操作数中某些位为1,可使目的操作数的相应位置1。举例如下。OR BX , 0001 0000 1000 0000 B;使BX中第7位、12位置1,其余位不变下一页返回上一页任务3 8086指令系统

59、3)逻辑“异或”指令XOR格式:XOR DST, SRC功能:DST (DST) (SRC)。说明:对状态标志位的影响同AND指令;若操作数与自身“异或”,结果清。;某位与“异或”,该位“取反”。举例如下。XOR AL,1010 0000B;使AL的第5 ,7位取反,其余位不变例3-11将AX和CF清零。解:实现方法有多种。方法1;AND AX,0方法2 ; XOR AX , AX4)逻辑“非”指令NO下格式:NOT DST功能:DST (DST)。下一页返回上一页任务3 8086指令系统说明:不影响标志位。5)TEST测试指令格式:TEST DST,SRC功能:(DST) (SRC)置状态标

60、志,不送结果。说明:用来测试目的操作数中某位是否为1;执行过程与AND指令相同,设置状态标志,但是不送结果;对状态标志位的影响同AND指令。举例如下。TEST AX,0040H;测试AX中第6位是否为12.移位指令移位指令有4条,包括算术/逻辑左移与右移,其作用如图3-20所示。下一页返回上一页任务3 8086指令系统1)算术左移指令SAL格式:SAL DST,CNT功能:左移,如图3-20(a)所示,相当于操作数乘以20说明:其中DST可以是除立即数之外的任一种寻址方式,移位次数由CNT决定,可以是1或寄存器CL。若移位次数大于1,应事先存入CL中;DST可以是字节,也可以是字。影响状态标志

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论