《数字电子技术封面课件.ppt》由会员分享,可在线阅读,更多相关《数字电子技术封面课件.ppt(122页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第4 4章章 80 x8680 x86微处理器的指令系统微处理器的指令系统 l l 内容提要内容提要:本章以本章以8086/8088为为例,介绍微型计算机的指令系统,例,介绍微型计算机的指令系统,指令格式和基本的寻址方式及有效指令格式和基本的寻址方式及有效地址的计算。地址的计算。l l 指令系统包括数据传送指令、指令系统包括数据传送指令、算术运算指令、位操作指令、串操算术运算指令、位操作指令、串操作指令、控制转移指令和处理器控作指令、控制转移指令和处理器控制指令制指令。返回主目录返回主目录 采用采用采用采用8086/8088CPU8086/8088CPU的指令系统,是因的指令系统,是因的指令
2、系统,是因的指令系统,是因为为为为8086/80888086/8088指令系统是所有指令系统是所有指令系统是所有指令系统是所有80X8680X86系列系列系列系列CPUCPU指令系统的基础指令系统的基础指令系统的基础指令系统的基础,8028680286、8038680386、8048680486乃至乃至乃至乃至PentiumPentium等新型等新型等新型等新型CPUCPU的指令系统的指令系统的指令系统的指令系统仅是在这个基础上做了一些补充。用仅是在这个基础上做了一些补充。用仅是在这个基础上做了一些补充。用仅是在这个基础上做了一些补充。用8086/80888086/8088指令系统编写的程序可
3、以毫无改指令系统编写的程序可以毫无改指令系统编写的程序可以毫无改指令系统编写的程序可以毫无改动地在动地在动地在动地在8028680286、8038680386、8048680486、PentiumPentium等等等等CPUCPU上运行。上运行。上运行。上运行。学习要求:熟练掌握学习要求:熟练掌握学习要求:熟练掌握学习要求:熟练掌握8086/80888086/8088微处理器的微处理器的微处理器的微处理器的指令系统,指令系统,指令系统,指令系统,6 6种基本寻址方式和各种常用指种基本寻址方式和各种常用指种基本寻址方式和各种常用指种基本寻址方式和各种常用指令。令。令。令。本章目录本章目录 4.1
4、 Intel x86的寻址方式的寻址方式 4.2 Intel x86指令系统指令系统 小结小结第第4 4章章 80 x8680 x86微处理器的指令系统微处理器的指令系统4.1 Intel x864.1 Intel x86的寻址方式的寻址方式 指令的一般格式指令的一般格式:计算机中的指令由操作码字段和操作数计算机中的指令由操作码字段和操作数字段组成字段组成。操作码操作码:指计算机所要执行的操作指计算机所要执行的操作,是是一种助记符一种助记符。操作数操作数:指在指令执行操作的过程中所在指令执行操作的过程中所需要的操作数需要的操作数。分目标操作数分目标操作数、源操作数源操作数。该字段除可以是操作数
5、本身外该字段除可以是操作数本身外,也可以是也可以是操作数地址或是地址的一部分操作数地址或是地址的一部分,还可以是还可以是指向操作数地址的指针或其它有关操作数指向操作数地址的指针或其它有关操作数的信息的信息。操作操作码码操作数操作数 指令举例:指令举例:寻址方式就是指令中用于说明操作数所寻址方式就是指令中用于说明操作数所在地址的方法在地址的方法,或者说是寻找操作数有效地或者说是寻找操作数有效地址的方法址的方法。寻址方式一般是针对源操作数而寻址方式一般是针对源操作数而言的言的。在在8086/8088系统中系统中,一般将寻址方一般将寻址方式分为两种不同的类型式分为两种不同的类型,一类是寻找操作数一类
6、是寻找操作数的地址的地址,另一类是寻找要执行的下一条指令另一类是寻找要执行的下一条指令的地址的地址,即程序的地址即程序的地址。80868088的基本寻址方式有六种的基本寻址方式有六种,下面我们来讨论这六种寻址方式面我们来讨论这六种寻址方式。ADD CL,BH ;CLCLBH 所提供的操作数直接包含在指令中所提供的操作数直接包含在指令中,这种这种寻址方式就叫立即寻址寻址方式就叫立即寻址,这个操作数叫立即数这个操作数叫立即数。所谓立即数是指具有固定数值的操作数所谓立即数是指具有固定数值的操作数,即常即常数数。它紧跟在操作码的后面它紧跟在操作码的后面,与操作码一起放与操作码一起放在代码段区域中在代码
7、段区域中。如图如图4-1所示所示。例如例如:4.1.1 立即寻址立即寻址MOV AX,2345H ;AX2345H 图图4-1 立即寻址立即寻址 立即数若是立即数若是8位的位的,可以是无符号数可以是无符号数,取值取值范围是范围是00H-0FFH,也可以是带符号数也可以是带符号数,取值范取值范围是围是80H-7FH。立即数若是立即数若是16位的位的,可以是无可以是无符号数符号数,取值范围是取值范围是0000H-0FFFFH,也可以也可以是带符号数是带符号数,取值范围是取值范围是8000H-7FFFFH。若若是是16位的位的,则存储时低位在前则存储时低位在前,高位在后高位在后。在在指令中指令中,立
8、即数操作数只能作源操作数立即数操作数只能作源操作数,而不而不能作目的操作数能作目的操作数。立即寻址主要用来给寄存器或存储单元赋立即寻址主要用来给寄存器或存储单元赋初值初值。操作数地址的操作数地址的16位偏移量直接包含在指令位偏移量直接包含在指令中中,所以这种寻址方式叫直接寻址所以这种寻址方式叫直接寻址。16位偏移位偏移量与操作码一起存放在代码段区域量与操作码一起存放在代码段区域,操作数一操作数一般在数据段区域中般在数据段区域中,它的地址为数据段寄存器它的地址为数据段寄存器DS加上这加上这16位地址偏移量位地址偏移量。如图如图4-2所示所示。例如例如:MOV AX,DS:3000H ;AX(DS
9、:3000H)4.1.2 直接寻址直接寻址 设设DS=1000H。直接寻址方式如直接寻址方式如右右图图所示所示。(对对DS来讲可以省略成来讲可以省略成 MOV AX,3000H,系统默认为数据段系统默认为数据段)这种寻址方式是以数据段的地址为基础这种寻址方式是以数据段的地址为基础,可可在多达在多达64KB的范围内寻找操作数的范围内寻找操作数。这种寻址方式允许段超越这种寻址方式允许段超越,即还允许操作数即还允许操作数在以代码段在以代码段、堆栈段或附加段为基准的区域中堆栈段或附加段为基准的区域中。此时只要在指令中指明是段超越的此时只要在指令中指明是段超越的,则则16位地址位地址偏移量可以与偏移量可
10、以与CS或或SS或或ES相加相加,作为操作数的作为操作数的地址地址。MOV AX,2000H ;数据段数据段 MOV BX,ES:3000H;段超越段超越,操作数操作数在附加段在附加段 即绝对地址即绝对地址(ES)163000H 操作数包含在操作数包含在CPU的内部寄存器中,所以这种寻址方的内部寄存器中,所以这种寻址方式叫寄存器寻址。它们可以是数据寄存器(式叫寄存器寻址。它们可以是数据寄存器(8位或位或16位),位),也可以是地址指针寄存器、变址寄存器或段寄存器,如寄也可以是地址指针寄存器、变址寄存器或段寄存器,如寄存器存器AX、BX、CX、DX、SI等。如图等。如图4-3所示。所示。例如:例
11、如:4.1.3寄存器寻址寄存器寻址 MOV BX,AX ;BXAX MOV AL,BH ;ALBH图图4-3寄存器寻址方式寄存器寻址方式 操作数是在存储器中,但是,操作数地址操作数是在存储器中,但是,操作数地址的的16位位偏移量包含在以下四个寄存器偏移量包含在以下四个寄存器SI、DI、BP、BX之一中,所以这种寻址方式叫寄存器间之一中,所以这种寻址方式叫寄存器间接寻址。可以分成两种情况:接寻址。可以分成两种情况:1)以以SI、DI、BX间接寻址,则通常操作间接寻址,则通常操作数在现行数据段区域中,即数据段寄存器数在现行数据段区域中,即数据段寄存器(DS)16(或或10H)加上加上SI、DI、B
12、X中的中的16位位偏移量,为操作数的地址偏移量,为操作数的地址,如图,如图4-4所示。所示。4.1.4寄存器寄存器间间接接寻寻址址 例如:例如:MOV AX,SI ;操作数地址是:(操作数地址是:(DS)16(SI)图图4-4寄存器间接寻址方式寄存器间接寻址方式 2)以寄存器以寄存器BP间间接接寻寻址,址,则则操作数在堆操作数在堆栈栈段区段区域中。即堆域中。即堆栈栈段寄存器(段寄存器(SS)16与与BP的内容相的内容相加作加作为为操作数的地址。操作数的地址。例如:例如:MOV AX,BP ;操作数地址是:(操作数地址是:(SS)16(BP)若在指令中若在指令中规规定是段超越的,定是段超越的,则
13、则BP的内容也可的内容也可以与其它的段寄存器相加,形成操作数地址。以与其它的段寄存器相加,形成操作数地址。例如:例如:MOV AX,DS:BP ;操作数地址是:(操作数地址是:(DS)16(BP)由指定的寄存器内容,加上指令中由指定的寄存器内容,加上指令中给给出出8位或位或16位的偏位的偏移量(当然要由一个段寄存器作移量(当然要由一个段寄存器作为为基地址)作基地址)作为为操作数的操作数的偏移地址,称偏移地址,称为变为变址址寻寻址。(操作数在存址。(操作数在存储储器中)器中)可以作可以作为变为变址址寻寻址的四个寄存器是址的四个寄存器是SI、DI、BX、BP。1)若用若用SI、DI和和BX作作为变
14、为变址,址,则则与数据段寄存器相加,与数据段寄存器相加,形成操作数的地址默形成操作数的地址默认认在数据段。在数据段。2)若用若用BP变变址,址,则则与堆与堆栈栈段寄存器相加,形成操作数段寄存器相加,形成操作数的地址默的地址默认认在堆在堆栈栈段。段。例如:例如:MOV AX,DATABX ;指令的;指令的执执行行过过程如程如图图4-5所示所示 操作数地址是操作数地址是:(:(DS)16(BX)DATA 假假设设(DS)=4000H,(,(BX)=2000H,DATA=0020H 则则物理地址物理地址=4000H10H2000H0020H=42020H4.1.5变变址址寻寻址址(又称又称为为寄存器
15、相寄存器相对寻对寻址址)图图4-5变址寻址方式变址寻址方式 但是,只要在指令中指定是段超越的,但是,只要在指令中指定是段超越的,则则可以用可以用别别的段寄存器作的段寄存器作为为基地址。基地址。在在汇编语汇编语言中,言中,变变址址寻寻址指令的址指令的书书写格式允写格式允许许有几有几种不同的形式。以下几种写法种不同的形式。以下几种写法实质实质上是完全等价的:上是完全等价的:MOV AH,DATABX MOV AH,BXDATA MOV AH,DATA+BX MOV AH,BX+DATA MOV AH,DATA+BX MOV AH,BX+DATA 另外,在有的教科另外,在有的教科书书中,若指定的寄存
16、器是中,若指定的寄存器是BX,BP又称又称为为基址基址寻寻址方式。址方式。把把BX(数据段)和(数据段)和BP(堆(堆栈栈段)看成是基址寄存器,把段)看成是基址寄存器,把SI、DI看着是看着是变变址寄存器,把一个基址寄存器,把一个基址寄存器(址寄存器(BX或或BP)的内容加上)的内容加上一个一个变变址寄存器(址寄存器(SI或或DI)的内)的内容,再加上指令中指定的容,再加上指令中指定的8位或位或16位偏移量(当然要以一个段寄存位偏移量(当然要以一个段寄存器作器作为为地址基准)作地址基准)作为为操作数的操作数的偏移地址,称偏移地址,称为为基址加基址加变变址址寻寻址。址。4.1.6 基址加基址加变
17、变址址寻寻址址 操作数在存操作数在存贮贮器中,其偏移地址由器中,其偏移地址由(基址寄存器)(基址寄存器)(变变址寄存器)相址寄存器)相对对偏移量形成。偏移量形成。例如:例如:MOV AX,BXSIDATA 或或 MOV AX,BXSIDATA 操作数地址是:(操作数地址是:(DS)16(BX)()(SI)DATA 假假设设(DS)=4000H,(,(BX)=2000H,(,(SI)=2000H,DATA=0100H 则则物理地址物理地址=4000H10H2000H2000H0100H=44100H 指令的指令的执执行行过过程如程如图图4-6所示所示图图4-6基址加变址寻址方式基址加变址寻址方式
18、 与与变变址址寻寻址方式址方式类类似,基址加似,基址加变变址址寻寻址指令同址指令同样样也可也可以表示成多种形式,例如,以下几种写法以表示成多种形式,例如,以下几种写法实质实质上是完全上是完全等价的:等价的:MOV AX,DATABXSI MOV AX,BX+DATASI MOV AX,DATA+BX+SI MOV AX,BX DATASI MOV AX,DATASI+BX MOV AX,BXSI+DATA 使用基址加使用基址加变变址址寻寻址址时时要注意,指令中不允要注意,指令中不允许许同同时时出出现现两个基址寄存器或两个两个基址寄存器或两个变变址寄存器,例如,以下指令址寄存器,例如,以下指令是
19、非法的:是非法的:MOV AX,DATASIDI MOV AX,BX+DATABP 另外,在有的教科另外,在有的教科书书中,若中,若DATA为为0,则则称称为为基址基址变变址址寻寻址方式;若址方式;若DATA不不为为0,则则称称为为基址基址变变址相址相对寻对寻址方式。基址址方式。基址变变址相址相对寻对寻址方式址方式实为实为基址基址变变址址寻寻址方式的址方式的扩扩充。充。若用若用BX作作为为基地址,基地址,则则操作数在数据段操作数在数据段区域。区域。若用若用BP作作为为基地址,基地址,则则操作数在堆操作数在堆栈栈段段区域。区域。但若在指令中但若在指令中规规定是段超越的,定是段超越的,则则可用可用
20、其它段寄存器作其它段寄存器作为为基地址。表基地址。表4-1是段寄存是段寄存器使用的基本器使用的基本约约定。定。访问访问存存储储器器类类型型默默认认段寄存器段寄存器可指定可指定段寄存器段寄存器段内段内偏移地址来源偏移地址来源取指令取指令码码CS无无IP堆堆栈栈操作操作SS无无SP串操作源地址串操作源地址DSCS、ES、SSSI串操作目的地址串操作目的地址ES无无DIBP用作基址寄存器用作基址寄存器SSCS、DS、ES 根据根据寻寻址方式求得有址方式求得有效地址效地址一般数据存取一般数据存取DSCS、ES、SS 根据根据寻寻址方式求得有址方式求得有效地址效地址表表4-1 段寄存器使用的段寄存器使用
21、的基本基本约约定定 图图4 7 不同字不同字长长的指令格式的指令格式4.1.7指令格式及指令指令格式及指令执执行行时间时间1、指令格式、指令格式 不同字不同字长长的指令格式如的指令格式如图图4-7所示所示 取指令,取操作数,取指令,取操作数,执执行指令及行指令及传传送送结结果所需果所需时间时间的的总总和。和。2、指令、指令执执行行时间时间返回本章目录返回本章目录 控制控制计计算机完成指定操作的命令称算机完成指定操作的命令称为为指令。指令。不同的不同的计计算机具有各自不同的指令,其所有指令的集合,就称算机具有各自不同的指令,其所有指令的集合,就称为该计为该计算机的指令系算机的指令系统统。指令系。
22、指令系统统不不仅仅定定义义了了计计算机所算机所能能执执行的指令的集合,行的指令的集合,还还定定义义了使用了使用这这些指令的些指令的规则规则。因此在使用因此在使用汇编语汇编语言言编编写程序写程序时时,必,必须须要要对对机器的指令机器的指令系系统统非常了解。非常了解。对对指令系指令系统统来来说说,8086和和8088是完全相同的,因此,是完全相同的,因此,本章将本章将这这两种两种CPU统统称称为为8086。4.2 Intel 80 x864.2 Intel 80 x86指令系统指令系统 在介在介绍绍各种指令之前,先介各种指令之前,先介绍绍一下本一下本节节中要用到的一中要用到的一些符号。些符号。OP
23、RD指各种指各种类类型的操作数型的操作数 DATA8位或位或16位操作数位操作数 PROC过过程或子程序的符号地址程或子程序的符号地址 LABLE符号地址符号地址 n 输输入入/输输出端口地址出端口地址 mem存存储储器操作数器操作数 ()表示寄存器的内容表示寄存器的内容 表示存表示存储单储单元的内容元的内容 8086/8088 CPU的指令系的指令系统统共包含共包含92种基本指令,按种基本指令,按照功能可以分照功能可以分为为以下六个功能以下六个功能组组。1)数据数据传传送指令送指令(Data Transter)2)算算术术运算指令运算指令(Arithmetic)3)逻辑逻辑运算指令运算指令(
24、Logic)4)串操作指令串操作指令(String Menipulation)5)程序控制指令程序控制指令(Program Control)6)处处理器控制指令理器控制指令(Processor Control)传送类指令的最大特点是:绝大多数指令执行后不传送类指令的最大特点是:绝大多数指令执行后不影响标志寄存器影响标志寄存器FLAGS(除标志寄存器传送指令外)。(除标志寄存器传送指令外)。传送类指令按功能分为传送类指令按功能分为4小类:通用数据传送指令、目标小类:通用数据传送指令、目标地址传送指令、标志寄存器传送指令和输入输出指令。地址传送指令、标志寄存器传送指令和输入输出指令。4.2.1 数
25、据传送指令数据传送指令 (1)一般传送指令一般传送指令 MOV 一般格式:一般格式:MOV OPRD1,OPRD2 MOV 是操作码,是操作码,OPRD1和和OPRD2分别是目的操作分别是目的操作数和源操作数。数和源操作数。功能:完成数据传送,即将一个操作数从源地址传功能:完成数据传送,即将一个操作数从源地址传送到目标地址,而源地址中的操作数不变。传送的操作送到目标地址,而源地址中的操作数不变。传送的操作数可以是数可以是8位也可以是位也可以是16位。位。1通用数据传送指令通用数据传送指令 使用使用MOV 指令应注意几个问题:指令应注意几个问题:1)一般)一般CS和和IP的内容不通过的内容不通过
26、MOV指令进行修改,它指令进行修改,它们只能作为源操作数。们只能作为源操作数。2)两个存储器操作数之间不允许直接进行信息传送,)两个存储器操作数之间不允许直接进行信息传送,但可以用但可以用CPU内部寄存器为桥梁来完成这样的传送。内部寄存器为桥梁来完成这样的传送。如:如:MOV AX,SI;MOV BX,AX;借助;借助AX完成传送完成传送 3)两个段寄存器之间不能直接传送信息。)两个段寄存器之间不能直接传送信息。如:如:MOVAX,DS;MOVES,AX;借助;借助AX完成传送完成传送 4)目的操作数,不能用立即寻址方式。)目的操作数,不能用立即寻址方式。5)不允许用立即寻址方式为段寄存器赋初
27、值。)不允许用立即寻址方式为段寄存器赋初值。如:如:MOVAX,DATA;MOVDS,AX ;借助;借助AX完成传送完成传送具体来说,传送指令可以实现以下各种传送:具体来说,传送指令可以实现以下各种传送:寄存器之间的传送寄存器之间的传送MOV BL,AL;字节传送;字节传送MOV AX,BX;字传送;字传送MOV DS,BX;字传送;字传送MOV AX,CS;字传送;字传送寄存器与存储器之间的传送寄存器与存储器之间的传送MOV AL,BUFMOV AX,SIMOV SI,DATABPMOV DS,DATASI+BXMOV DI,CXMOV DATABP+DI,ES立即数到寄存器的传送立即数到寄
28、存器的传送MOV CL,0FFH;将立即数将立即数0FFH送送CLMOV AX,0345H;将立即数将立即数0345H送送AX,即(即(AH)=03H,(AL)=45H。立即数到存储器的传送立即数到存储器的传送MOV 2000H,1122H;将立即数将立即数1122H送偏移地址为送偏移地址为 2000H和和2001H两个存储单元,两个存储单元,低低8位送低地址单元,高位送低地址单元,高8位送高位送高 地址单元。地址单元。MOV SI,33H;将立即数将立即数33H送偏移地址为送偏移地址为 (SI)的存储单元。)的存储单元。(2)堆栈指令堆栈指令 堆栈是人为定义的一块堆栈是人为定义的一块连续的存
29、储空间,用来暂存数据,这些数据连续的存储空间,用来暂存数据,这些数据是按是按“先进后出,后进先出先进后出,后进先出”的原则存取的。的原则存取的。堆栈指针堆栈指针SP存放栈顶的有效地址。存放栈顶的有效地址。8086的的堆栈是栈顶为低地址,栈底为高地址。堆栈是栈顶为低地址,栈底为高地址。堆栈指令包括进栈(堆栈指令包括进栈(PUSH)和出栈)和出栈(POP)指令两类,且仅能进行字运算。)指令两类,且仅能进行字运算。(操作数不能是立即数)(操作数不能是立即数)1)进栈进栈指令指令PUSH 一般格式:一般格式:PUSH OPRD 源操作数可以是源操作数可以是CPU内部的内部的16位通用寄存位通用寄存器、
30、段寄存器(器、段寄存器(CS除外)和内存操作数(所有除外)和内存操作数(所有寻寻址方式)。址方式)。进栈进栈的操作的操作对对象必象必须须是是16位数。位数。功能:将数据功能:将数据压压入堆入堆栈栈 执执行行过过程程为为:操作数高:操作数高8位位(SP)-1;操作数低操作数低8位位(SP)-2;(SP)-2(SP););例如:例如:PUSH AX;设设(AX)=2233H 执执行行过过程程为为:(:(SP)-1(SP),),(AH)SP,(,(SP)-1(SP),),(AL)SP,PUSH AX指令指令执执行前后堆行前后堆栈栈区区的情况如的情况如图图4-8所示。所示。图图4-8 PUSH AX
31、指令执指令执行行示意图示意图图图4-9 POP BX 指令执行指令执行示意图示意图 2)出栈指令出栈指令POP 一般格式:一般格式:POP OPRD 功能:功能:将数据弹出堆栈将数据弹出堆栈 执行过程为执行过程为:SP 操作数低操作数低8位;位;(SP)+1 操作数高操作数高8位;位;(SP)+2(SP);例如:例如:POP BX;(BX)=2211H,则则POP BX指指令执行前后堆栈区的情况如图令执行前后堆栈区的情况如图4-9所示。所示。在程序中,在程序中,PUSH和和POP指令一般是成对出现,且指令一般是成对出现,且执行顺序相反。执行顺序相反。一般堆栈是在响应中断或子程序调用时保护断点地
32、一般堆栈是在响应中断或子程序调用时保护断点地址和现场,还可以在需要时保存一些寄存器的内容。址和现场,还可以在需要时保存一些寄存器的内容。例如:例如:PUSH AX;保护寄存器的内容保护寄存器的内容 PUSH DX;保护寄存器的内容保护寄存器的内容 POP DX;恢复寄存器的内容恢复寄存器的内容 POP AX;恢复寄存器的内容恢复寄存器的内容 (3)交换指令)交换指令XCHG 一般格式:一般格式:XCHG OPRD1,OPRD2 功能:完成数据交换,把一个字节或一个字的源操作功能:完成数据交换,把一个字节或一个字的源操作数与目的操作数相交换。数与目的操作数相交换。交换指令对操作数有如下要求:交换
33、指令对操作数有如下要求:源操作数和目的操作数可以是寄存器或存储器,但不源操作数和目的操作数可以是寄存器或存储器,但不能同时为存储器。可以在寄存器之间、寄存器与存储器能同时为存储器。可以在寄存器之间、寄存器与存储器之间进行交换,但段寄存器和立即数不能作为一个操作之间进行交换,但段寄存器和立即数不能作为一个操作数,不能在累加器之间进行交换。两个操作数字长必须数,不能在累加器之间进行交换。两个操作数字长必须相同。相同。例如:例如:XCHG AL,CL;(;(AL)(CL),字节交换),字节交换 XCHG AX,BX;(;(AX)(BX),字交换),字交换 XCHG AX,SI;(;(AX)SI,字交
34、换,字交换 (4)查表指令)查表指令 一般格式:一般格式:XLAT TABLE;TABLE是要查找的表首是要查找的表首地址。地址。或或 XLAT;(;(AL)(DX)16(BX)+(AL)功能:完成一个字节的查表转换。功能:完成一个字节的查表转换。说明:该指令只查找字节表,表的首地址的偏移地说明:该指令只查找字节表,表的首地址的偏移地址送址送BX,要查找的字节相对于表首地址的位移量送寄,要查找的字节相对于表首地址的位移量送寄存器存器AL(AL内容即为要查找字节在表中的序号,因内容即为要查找字节在表中的序号,因此表的长度为此表的长度为256),指令执行后的结果存放在),指令执行后的结果存放在AL
35、中。中。本指令可用在数制转换、函数表查表、代码转换等本指令可用在数制转换、函数表查表、代码转换等场合。场合。例如:例如:MOV BX,OFFSET TABLE;取表首地址;取表首地址 MOV AL,5 ;偏移量;偏移量 XLAT ;查表;查表,ALBX+AL 所用表如图所用表如图4-10所示。所示。图图4-10 0-9的的ASIIC表表 输入输出(输入输出(I/O)指令是专门针对输入输出端口进行读写)指令是专门针对输入输出端口进行读写的指令,共有两条的指令,共有两条IN和和OUT。输入指令用于从。输入指令用于从I/O端口读端口读数据到数据到AX或或AL中,输出指令用于把中,输出指令用于把AX或
36、或AL的内容写到的内容写到I/O端口中。端口中。(1)输入指令)输入指令IN 一般格式:一般格式:IN AL,port;输入一个字节,;输入一个字节,port为为8位端口地址。位端口地址。IN AX,port;输入一个字,;输入一个字,port为为8位端口地址。位端口地址。IN AL,DX;输入一个字节,;输入一个字节,DX的内容为的内容为16位端口地址。位端口地址。IN AX,DX;输入一个字,;输入一个字,DX的内容为的内容为16位端口地址。位端口地址。2输入输出输入输出(I/O)指令指令 功能:功能:从从I/O端口输入数据至端口输入数据至AL或或AX。输入指令允许把一个字节或一个字由一个
37、输入指令允许把一个字节或一个字由一个输入端口传送到输入端口传送到AL或或AX中。若端口地址不超过中。若端口地址不超过255时,为直接寻址方式;若端口地址超过时,为直接寻址方式;若端口地址超过255时,则必须用时,则必须用DX保存端口地址,为间接寻址方保存端口地址,为间接寻址方式,这样用式,这样用DX作端口寻址最多可寻找作端口寻址最多可寻找64K个端个端口。口。例如:例如:MOV DX,0A40H;将;将16位端口地址送位端口地址送DX IN AL,DX ;从地址;从地址0A40H的端口输入一个的端口输入一个字节到字节到AL (2)输出指令输出指令OUT 一般格式:一般格式:OUT port,A
38、L;输出一个字节,;输出一个字节,port为为8位端口地址。位端口地址。OUT port,AX;输出一个字,;输出一个字,port为为8位端口地址。位端口地址。OUT DX,AL;输出一个字节,;输出一个字节,DX的内容为的内容为16位端口位端口地址。地址。OUT DX,AX ;输出一个字,;输出一个字,DX的内容为的内容为16位端口地位端口地址。址。功能:功能:将将AL或或AX的内容输出至的内容输出至I/O端口。端口。该指令将该指令将AL或或AX中的内容传送到一个输出端口。端口寻中的内容传送到一个输出端口。端口寻址方式与址方式与IN指令相同。指令相同。例如:例如:MOV DX,0A40H;将
39、;将16位端口地址送位端口地址送DX OUT DX,AX;把;把AX的内容从地址的内容从地址0A40H的端口输出的端口输出 8086/8088提供了三条把地址指针写入寄存器或寄存提供了三条把地址指针写入寄存器或寄存器对的指令。器对的指令。(1)取偏移地址指令)取偏移地址指令LEA 一般格式:一般格式:LEA OPRD1,OPRD2 功能:把源操作数功能:把源操作数OPRD2的地址偏移量传送至目的的地址偏移量传送至目的操作数操作数OPRD1。3地址传送指令地址传送指令 源操作数必须是一个存储器操作数,目的操作数必须源操作数必须是一个存储器操作数,目的操作数必须是一个是一个16位的寄存器。这条指令
40、通常用来建立串操作位的寄存器。这条指令通常用来建立串操作指令所需的地址指针。指令所需的地址指针。例:例:LEA BX,BUFFER ;把;把BUFFER的偏移地址送的偏移地址送BX MOV BX,BUFFER ;把存储器;把存储器BUFFER的内容送的内容送BX 下面两条指令完全等价:下面两条指令完全等价:LEA BX,BUFFER MOV BX,OFFSET BUFFER;其中其中OFFSET BUFFER表示存储器表示存储器BUFFER的偏移的偏移地址。地址。(2)地址指针装入指令指令)地址指针装入指令指令LDS 一般格式:一般格式:LDS OPRD1,OPRD2 功能:完成一个功能:完成
41、一个32位地址的传送。地址指针包括段基位地址的传送。地址指针包括段基址部分和偏移地址部分。指令将段基址送入址部分和偏移地址部分。指令将段基址送入DS,偏移,偏移地址部分送入一个地址部分送入一个16位的指针寄存器或变址寄存器。位的指针寄存器或变址寄存器。源操作数是一个存储器操作数,目的操作数是一个指源操作数是一个存储器操作数,目的操作数是一个指针寄存器或变址寄存器。针寄存器或变址寄存器。例如:例如:LDS SI,100H;将把偏移地址;将把偏移地址100H到到103H所指向的所指向的4个存储单元的前两个单元的内容送个存储单元的前两个单元的内容送SI,后两个单元的内容送,后两个单元的内容送DS。设
42、(设(DS)=0B000H,(,(0B0100H)=10H,(0B0101H)=20H,(,(0B0102H)=30H,(0B0103H)=40H,则执行上述指令后(,则执行上述指令后(SI)=2010H,(,(DS)=4030H。(3)LES指令指令 一般格式:一般格式:LES OPRD1,OPRD2 这条指令除将地址指针的段基址部分送入这条指令除将地址指针的段基址部分送入ES外,其外,其它与它与LDS类似。类似。例如:例如:LES DI,BX+DATA 标志传送指令共标志传送指令共4条,指令的操作数以隐含形式规定条,指令的操作数以隐含形式规定(隐含的操作数是(隐含的操作数是AH)。)。(1
43、)取标志指令)取标志指令LAHF 一般格式:一般格式:LAHF 功能:将标志寄存器中的功能:将标志寄存器中的SF、ZF、AF、PF和和CF(即低(即低8位)分别传送至位)分别传送至AH寄存器的指定位,寄存器的指定位,LAHF指令对状态标志位无影响。如图指令对状态标志位无影响。如图4-11所示。所示。4标志传送指令标志传送指令 (2)置标志指令)置标志指令SAHF 一般格式:一般格式:SAHF 功能:将寄存器功能:将寄存器AH的指定位,分别送至标志寄存器的的指定位,分别送至标志寄存器的SF、ZF、AF、PF和和CF位(即低位(即低8位)。根据位)。根据AH的内的内容,影响上述标志位,对容,影响上
44、述标志位,对OF、DF、IF和和TF无影响。无影响。(3)标志压入堆栈指令)标志压入堆栈指令 一般格式:一般格式:PUSHF 功能:先将堆栈指针减功能:先将堆栈指针减2,同时将标志寄存器,同时将标志寄存器FLAGS的内容(的内容(16位)压入堆栈,不影响标志位。位)压入堆栈,不影响标志位。(4)标志弹出堆栈指令)标志弹出堆栈指令 一般格式:一般格式:POPF 功能:将堆栈顶部的一个字,传送到标志寄存器功能:将堆栈顶部的一个字,传送到标志寄存器FLAGS,同时堆栈指针加,同时堆栈指针加2,影响标志位。,影响标志位。表表4-2列出了数据传送类指令列出了数据传送类指令 的功能与格式。的功能与格式。表
45、表4-2 数据传送类指令数据传送类指令 8088提供了二进制的加、减、乘、除四种基本算术运提供了二进制的加、减、乘、除四种基本算术运算指令。这些操作都可用于字节或字的运算,也可以算指令。这些操作都可用于字节或字的运算,也可以用于带符号数(带符号数用补码表示)与无符号数的用于带符号数(带符号数用补码表示)与无符号数的运算。同时运算。同时8088还提供了与之对应的四类十进制调整还提供了与之对应的四类十进制调整指令,故可以进行十进制的算术运算。指令,故可以进行十进制的算术运算。说明:算术运算指令有单操作数和双操作数两种,其说明:算术运算指令有单操作数和双操作数两种,其中单操作数不能是立即数,而双操作
46、数指令中,立即中单操作数不能是立即数,而双操作数指令中,立即数只能作为源操作数,另外,源操作数和目的操作数数只能作为源操作数,另外,源操作数和目的操作数不能同时为存储器。不能同时为存储器。算术运算指令大多会对标志位产生影响。下面分别介算术运算指令大多会对标志位产生影响。下面分别介绍这四种指令。绍这四种指令。4.2.2算术运算指令算术运算指令 (1)不带进位的加法指令不带进位的加法指令ADD 一般形式:一般形式:ADD OPRD1,OPRD2 功能:功能:OPRD1OPRD1+OPRD2 完成两个字节或字操作数相加,结果完成两个字节或字操作数相加,结果 送至目送至目 的操作数的操作数OPRD1。
47、1加法运算指令加法运算指令 源操作数和目的操作数可以是寄存器以及存储器操作源操作数和目的操作数可以是寄存器以及存储器操作数,源操作数还可以是立即数;可以是无符号数,也数,源操作数还可以是立即数;可以是无符号数,也可以是带符号数。但源操作数和目的操作数不能同时可以是带符号数。但源操作数和目的操作数不能同时为存储器操作数,也不能对段寄存器进行运算。为存储器操作数,也不能对段寄存器进行运算。这条指令对标志位这条指令对标志位SF、ZF、AF、PF、CF和和OF有影有影响。响。例如:例如:ADD AL,20 ;累加器;累加器AL与立即数相加与立即数相加 ADD BX,3000H ;寄存器与存储单元内容相
48、加;寄存器与存储单元内容相加 ADD AX,SI ;寄存器之间相加;寄存器之间相加 ADD DATABX+SI,DX ;16位存储器操作数与寄存器位存储器操作数与寄存器 内容相加内容相加 ADD DATASI,AL ;8位存储器操作数与寄存器位存储器操作数与寄存器 相加相加 (2)带进位的加法指令)带进位的加法指令ADC 一般形式:一般形式:ADC OPRD1,OPRD2 ;带进位的加法;带进位的加法 功能:功能:OPRD1OPRD1+OPRD2+CF 这条指令与上这条指令与上条指令类似,只是在两个操作数相加时,条指令类似,只是在两个操作数相加时,要把进位标志要把进位标志CF的现行值加上去,结
49、果送至目的操作数。的现行值加上去,结果送至目的操作数。ADC指令主要用于多字节运算中。若有两个四字节的数,指令主要用于多字节运算中。若有两个四字节的数,已分别放在自已分别放在自FIRST和和SECOND开始的存储区中,每个数开始的存储区中,每个数占四个存储单元。存放时,最低字节在低地址单元,则可占四个存储单元。存放时,最低字节在低地址单元,则可 用以下程序段实现相加。用以下程序段实现相加。MOV AX,FIRST ADD AX,SECOND ;进行字运算;进行字运算 MOV THIRD,AX MOV AX,FIRST+2 ADC AX,SECOND+2 MOV THIRD+2,AX 这条指令对
50、标志位这条指令对标志位SF、ZF、AF、PF、CF和和OF有影响。有影响。(3)加)加1指令指令INC 一般形式:一般形式:INC OPRD 功能:功能:OPRDOPRD+1 完成对指定的操作数完成对指定的操作数OPRD加加1,然后返回此操作数。,然后返回此操作数。操作数操作数OPRD可以是寄存器和存储器操作数;可以是可以是寄存器和存储器操作数;可以是8位数,也可以是位数,也可以是16位数;但不能是立即数,也不能是段位数;但不能是立即数,也不能是段寄存器。此指令主要用于在循环程序中修改地址指针和寄存器。此指令主要用于在循环程序中修改地址指针和循环次数等。循环次数等。这条指令执行的结果影响标志位