版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、返回主目录返回主目录 4.1 Intel x86的寻址方式的寻址方式 4.2 Intel x86指令系统指令系统 小结小结第第4 4章章 80 x8680 x86微处理器的指令系统微处理器的指令系统4.1 Intel x864.1 Intel x86的寻址方式的寻址方式 指令的一般格式指令的一般格式: 计算机中的指令由操作码字段和操作数字段组成计算机中的指令由操作码字段和操作数字段组成。 操作码操作码:指计算机所要执行的操作指计算机所要执行的操作,是一种助记符是一种助记符。 操作数操作数:指在指令执行操作的过程中所需要的操作在指令执行操作的过程中所需要的操作数数。 分目标操作数分目标操作数、源
2、操作数源操作数。该字段除可以是操作该字段除可以是操作数本身外数本身外,也可以是操作数地址或是地址的一部分也可以是操作数地址或是地址的一部分,还还可以是指向操作数地址的指针或其它有关操作数的信息可以是指向操作数地址的指针或其它有关操作数的信息。操作码操作码操作数操作数 指令举例:指令举例: 寻址方式就是指令中用于说明操作数所在地址的方寻址方式就是指令中用于说明操作数所在地址的方法法,或者说是寻找操作数有效地址的方法或者说是寻找操作数有效地址的方法。寻址方式一寻址方式一般是针对源操作数而言的般是针对源操作数而言的。在在8086/8088系统中系统中,一般一般将寻址方式分为两种不同的类型将寻址方式分
3、为两种不同的类型,一类是寻找操作数的一类是寻找操作数的地址地址,另一类是寻找要执行的下一条指令的地址另一类是寻找要执行的下一条指令的地址,即程即程序的地址序的地址。 80868088的基本寻址方式有六种的基本寻址方式有六种,下面我们来面我们来讨论这六种寻址方式讨论这六种寻址方式。ADD CL,BH ; CLCLBH 所提供的操作数直接包含在指令中所提供的操作数直接包含在指令中,这种寻址方式这种寻址方式就叫立即寻址就叫立即寻址,这个操作数叫立即数这个操作数叫立即数。所谓立即数是指所谓立即数是指具有固定数值的操作数具有固定数值的操作数,即常数即常数。它紧跟在操作码的后它紧跟在操作码的后面面,与操作
4、码一起放在代码段区域中与操作码一起放在代码段区域中。如图如图4-1所示所示。 例如例如:4.1.1 立即寻址立即寻址MOV AX,2345H ; AX2345H 立即数若是立即数若是8位的位的,可以是无符号数可以是无符号数,取值范围是取值范围是00H-0FFH,也可以是带符号数也可以是带符号数,取值范围是取值范围是80H-7FH。立即数若是立即数若是16位的位的,可以是无符号数可以是无符号数,取值范围是取值范围是0000H-0FFFFH,也可以是带符号数也可以是带符号数,取值范围是取值范围是8000H-7FFFFH。若是若是16位的位的,则存储时低位在前则存储时低位在前,高高位在后位在后。在指
5、令中在指令中,立即数操作数只能作源操作数立即数操作数只能作源操作数,而而不能作目的操作数不能作目的操作数。 立即寻址主要用来给寄存器或存储单元赋初值立即寻址主要用来给寄存器或存储单元赋初值。 操作数地址的操作数地址的16位偏移量直接包含在指令中位偏移量直接包含在指令中,所以所以这种寻址方式叫直接寻址这种寻址方式叫直接寻址。16位偏移量与操作码一起存位偏移量与操作码一起存放在代码段区域放在代码段区域,操作数一般在数据段区域中操作数一般在数据段区域中,它的地它的地址为数据段寄存器址为数据段寄存器DS加上这加上这16位地址偏移量位地址偏移量。如图如图4-2所示所示。 例如例如: MOV AX,DS:
6、 3000H ;AX(DS:3000H) 4.1.2 直接寻址直接寻址 设设DS = 1000H。直接寻址方式如图所示直接寻址方式如图所示。 (对对DS来讲可以省略成来讲可以省略成 MOV AX,3000H,系统系统默认为数据段默认为数据段) 这种寻址方式是以数据段的地址为基础这种寻址方式是以数据段的地址为基础,可在多达可在多达64KB的范围内寻找操作数的范围内寻找操作数。 这种寻址方式允许段超越这种寻址方式允许段超越,即还允许操作数在以代码即还允许操作数在以代码段段、堆栈段或附加段为基准的区域中堆栈段或附加段为基准的区域中。此时只要在指令中此时只要在指令中指明是段超越的指明是段超越的,则则1
7、6位地址偏移量可以与位地址偏移量可以与CS或或SS或或ES相加相加,作为操作数的地址作为操作数的地址。 MOV AX,2000H ;数据段数据段 MOV BX,ES:3000H ;段超越段超越,操作数在附加段操作数在附加段 即绝对地址即绝对地址(ES) 163000H 操作数包含在操作数包含在CPU的内部寄存器中,所以这种寻址方的内部寄存器中,所以这种寻址方式叫寄存器寻址。它们可以是数据寄存器(式叫寄存器寻址。它们可以是数据寄存器(8位或位或16位),位),也可以是地址指针寄存器、变址寄存器或段寄存器,如寄也可以是地址指针寄存器、变址寄存器或段寄存器,如寄存器存器AX、BX、CX、DX、SI等
8、。如图等。如图4-3所示。所示。 例如:例如:4.1.3寄存器寻址寄存器寻址MOV BX,AX ;BXAXMOV AL,BH ;ALBH 操作数是在存储器中,但是,操作数地址的操作数是在存储器中,但是,操作数地址的16位偏移位偏移量包含在以下四个寄存器量包含在以下四个寄存器SI、DI、BP、BX之一中,所以之一中,所以这种寻址方式叫寄存器间接寻址。可以分成两种情况:这种寻址方式叫寄存器间接寻址。可以分成两种情况: 1) 以以SI、DI、BX间接寻址,则通常操作数在现行数间接寻址,则通常操作数在现行数据段区域中,即数据段寄存器据段区域中,即数据段寄存器(DS)16(或或10H)加上加上SI、DI
9、、BX中的中的16位偏移量,为操作数的地址,如图位偏移量,为操作数的地址,如图4-4所示。所示。4.1.4寄存器间接寻址寄存器间接寻址例如例如: MOV AX,SI ; 操作数地址是:操作数地址是:(DSDS)1616(SISI) 2) 以寄存器以寄存器BP间接寻址,则操作数在堆栈段区域中。即间接寻址,则操作数在堆栈段区域中。即堆栈段寄存器堆栈段寄存器(SS)16与与BP的内容相加作为操作数的地址。的内容相加作为操作数的地址。例如:例如: MOV AX,BP ; 操作数地址是:操作数地址是:(SSSS)1616(BPBP) 若在指令中规定是段超越的,则若在指令中规定是段超越的,则BP的内容也可
10、以与其它的内容也可以与其它的段寄存器相加,形成操作数地址。的段寄存器相加,形成操作数地址。例如:例如: MOV AX,DS:BP ;操作数地址是:操作数地址是:(DSDS)1616(BPBP) 由指定的寄存器内容,加上指令中给出由指定的寄存器内容,加上指令中给出8位或位或16位的位的偏移量(当然要由一个段寄存器作为基地址)作为操作数偏移量(当然要由一个段寄存器作为基地址)作为操作数的偏移地址,称为变址寻址。(操作数在存储器中)的偏移地址,称为变址寻址。(操作数在存储器中)可以作为变址寻址的四个寄存器是可以作为变址寻址的四个寄存器是SI、DI、BX、BP。 1) 若用若用SI、DI和和BX作为变
11、址,则与数据段寄存器相作为变址,则与数据段寄存器相加,形成操作数的地址默认在数据段。加,形成操作数的地址默认在数据段。 2) 若用若用BPBP变址,则与堆栈段寄存器相加,形成操作变址,则与堆栈段寄存器相加,形成操作数的地址默认在堆栈段。数的地址默认在堆栈段。例如:例如: MOV AXMOV AX,DATABX DATABX ;指令的执行过程如图指令的执行过程如图4-54-5所示所示 操作数地址是:操作数地址是:(DSDS) 16 16(BXBX)DATADATA 假设(假设(DSDS)= 4000H= 4000H,(,(BXBX)= 2000H= 2000H, DATA= 0020HDATA=
12、 0020H 则物理地址则物理地址= = 4000H4000H10H10H2000H2000H0020H= 42020H0020H= 42020H4.1.5变址寻址变址寻址( (又称为寄存器相对寻址又称为寄存器相对寻址) ) 但是,只要在指令中指定是段超越的,则可以用别但是,只要在指令中指定是段超越的,则可以用别的段寄存器作为基地址。的段寄存器作为基地址。 在汇编语言中,变址寻址指令的书写格式允许有几在汇编语言中,变址寻址指令的书写格式允许有几种不同的形式。以下几种写法实质上是完全等价的:种不同的形式。以下几种写法实质上是完全等价的: MOV AH , DATABXMOV AH , DATAB
13、X MOV AH , BXDATA MOV AH , BXDATA MOV AH , DATA+BX MOV AH , DATA+BX MOV AH , BX+DATA MOV AH , BX+DATA MOV AH , DATA+BX MOV AH , DATA+BX MOV AH , BX+DATA MOV AH , BX+DATA 另外,在有的教科书中,若指定的寄存器是另外,在有的教科书中,若指定的寄存器是BX,BP又称为基址寻址方式。又称为基址寻址方式。 把把BX(数据段)和(数据段)和BP(堆栈段)看成是基址寄存器,(堆栈段)看成是基址寄存器,把把SI、DI看着是变址寄存器,看着是变
14、址寄存器,把一个基址寄存器(把一个基址寄存器(BX或或BP)的内容加上一个变址寄存器(的内容加上一个变址寄存器(SI或或DI)的内容,再加上指)的内容,再加上指令中指定的令中指定的8位或位或16位偏移量(当然要以一个段寄存器作为位偏移量(当然要以一个段寄存器作为地址基准)作为操作数的偏移地址,称为基址加变址寻址。地址基准)作为操作数的偏移地址,称为基址加变址寻址。4.1.6 基址加变址寻基址加变址寻址址 操作数在存贮器中,其偏移地址由操作数在存贮器中,其偏移地址由(基址寄存器)(基址寄存器)(变址寄存器)相对偏移量(变址寄存器)相对偏移量形成。形成。 例如:例如: MOV AXMOV AX,B
15、XSIDATA BXSIDATA 或或 MOV AXMOV AX,BXBXSIDATASIDATA 操作数地址是:操作数地址是:(DSDS)1616(BXBX)()(SISI)DATADATA 假设(假设(DSDS)= 4000H= 4000H,(,(BXBX)= 2000H= 2000H,(,(SISI)= = 2000H2000H,DATA=0100HDATA=0100H 则物理地址则物理地址=4000H=4000H10H10H2000H2000H2000H2000H0100H = 0100H = 44100H44100H 指令的执行过程如图指令的执行过程如图4-6所示所示 与变址寻址方式
16、类似,基址加变址寻址指令同样也与变址寻址方式类似,基址加变址寻址指令同样也可以表示成多种形式,例如,以下几种写法实质上是完可以表示成多种形式,例如,以下几种写法实质上是完全等价的:全等价的: MOV AX , DATABXSIMOV AX , DATABXSI MOV AX , BX+DATASI MOV AX , BX+DATASI MOV AX , DATA+BX+SI MOV AX , DATA+BX+SI MOV AX , BX DATASI MOV AX , BX DATASI MOV AX , DATASI+BX MOV AX , DATASI+BX MOV AX , BXSI+D
17、ATA MOV AX , BXSI+DATA 使用基址加变址寻址时要注意,指令中不允许同时使用基址加变址寻址时要注意,指令中不允许同时出现两个基址寄存器或两个变址寄存器,例如,以下指出现两个基址寄存器或两个变址寄存器,例如,以下指令是非法的:令是非法的: MOV AX , DATASIDIMOV AX , DATASIDI MOV AX , BX+DATABP MOV AX , BX+DATABP 另外,在有的教科书中,另外,在有的教科书中,若若DATA为为0,则称为基址,则称为基址变址寻址方式变址寻址方式;若若DATA不为不为0,则称为基址变址相对寻,则称为基址变址相对寻址方式址方式。基址变
18、址相对寻址方式实为基址变址寻址方式。基址变址相对寻址方式实为基址变址寻址方式的扩充。的扩充。 若用若用BX作为基地址,则操作数在数据段区域。作为基地址,则操作数在数据段区域。 若用若用BP作为基地址,则操作数在堆栈段区域。作为基地址,则操作数在堆栈段区域。 但若在指令中规定是段超越的,则可用其它段寄存但若在指令中规定是段超越的,则可用其它段寄存器作为基地址。表器作为基地址。表4-14-1是段寄存器使用的基本约定。是段寄存器使用的基本约定。访问存储器类型访问存储器类型默认默认段寄存器段寄存器可指定可指定段寄存器段寄存器段内段内偏移地址来源偏移地址来源取指令码取指令码CS无无IP堆栈操作堆栈操作S
19、S无无SP串操作源地址串操作源地址DSCS、ES、SSSI串操作目的地址串操作目的地址ES无无DIBP用作基址寄存器用作基址寄存器SSCS、DS、ES 根据寻址方式求得有根据寻址方式求得有效地址效地址一般数据存取一般数据存取DSCS、ES、SS 根据寻址方式求得有根据寻址方式求得有效地址效地址表表4 - 1 段寄存器使用的基本约定段寄存器使用的基本约定 图图4 7 不同字长的指令格式不同字长的指令格式4.1.74.1.7指令格式及指令执行时间指令格式及指令执行时间1、指令格式指令格式 不同字长的指令格式如图不同字长的指令格式如图4-7所示所示 取指令,取操作数,执行指令及传送结果所需时间取指令
20、,取操作数,执行指令及传送结果所需时间的总和。的总和。2、指令执行时间指令执行时间返回本章目录返回本章目录 控制计算机完成指定操作的命令称为指令。不同的控制计算机完成指定操作的命令称为指令。不同的计算机具有各自不同的指令,其所有指令的集合,就称计算机具有各自不同的指令,其所有指令的集合,就称为该计算机的为该计算机的指令系统指令系统。指令系统不仅定义了计算机所。指令系统不仅定义了计算机所能执行的指令的集合,还定义了使用这些指令的规则。能执行的指令的集合,还定义了使用这些指令的规则。因此在使用汇编语言编写程序时,必须要对机器的指令因此在使用汇编语言编写程序时,必须要对机器的指令系统非常了解。系统非
21、常了解。 对指令系统来说,对指令系统来说,8086和和8088是完全相同的,因是完全相同的,因此,本章将这两种此,本章将这两种CPU统称为统称为8086。4.2 Intel 80 x864.2 Intel 80 x86指令系统指令系统 在介绍各种指令之前,先介绍一下本节中要用到的在介绍各种指令之前,先介绍一下本节中要用到的一些符号。一些符号。 OPRD指各种类型的操作数指各种类型的操作数 DATA8位或位或16位操作数位操作数 PROC过程或子程序的符号地址过程或子程序的符号地址 LABLE符号地址符号地址 n 输入输入/输出端口地址输出端口地址 mem存储器操作数存储器操作数 ( )表示寄存
22、器的内容表示寄存器的内容 表示存储单元的内容表示存储单元的内容 8086/8088 CPU的指令系统共包含的指令系统共包含92种基本指令,种基本指令,按照功能可以分为以下六个功能组。按照功能可以分为以下六个功能组。 1) 数据传送指令数据传送指令 (Data Transter) 2) 算术运算指令算术运算指令 (Arithmetic) 3) 逻辑运算指令逻辑运算指令 (Logic) 4) 串操作指令串操作指令 (String Menipulation) 5) 程序控制指令程序控制指令 (Program Control) 6) 处理器控制指令处理器控制指令 (Processor Control)
23、 传送类指令的最大特点是:传送类指令的最大特点是:绝大多数指令执行后不绝大多数指令执行后不影响标志寄存器影响标志寄存器FLAGS(除标志寄存器传送指令外)。(除标志寄存器传送指令外)。传送类指令按功能分为传送类指令按功能分为4小类:小类:通用数据传送指令通用数据传送指令、目标目标地址传送指令地址传送指令、标志寄存器传送指令标志寄存器传送指令和和输入输出指令输入输出指令。4.2.1 数据传送指令数据传送指令 (1)一般传送指令)一般传送指令 MOV 一般格式:一般格式:MOV OPRD1,OPRD2 MOV 是操作码,是操作码,OPRD1和和OPRD2分别是目的操作分别是目的操作数和源操作数。数
24、和源操作数。 功能:功能:完成数据传送,即将一个操作数从源地址传完成数据传送,即将一个操作数从源地址传送到目标地址,而源地址中的操作数不变。传送的操作送到目标地址,而源地址中的操作数不变。传送的操作数可以是数可以是8位也可以是位也可以是16位。位。1通用数据传送指令通用数据传送指令 使用使用MOV 指令应注意几个问题:指令应注意几个问题: 1)一般一般CS和和IP的内容不通过的内容不通过MOV指令进行修改,它指令进行修改,它们只能作为源操作数。们只能作为源操作数。 2)两个存储器操作数之间不允许直接进行信息传送,两个存储器操作数之间不允许直接进行信息传送,但可以用但可以用CPU内部寄存器为桥梁
25、来完成这样的传送。内部寄存器为桥梁来完成这样的传送。如:如:MOV AX,SI; MOV BX,AX;借助借助AX完成传送完成传送 3)两个段寄存器之间不能直接传送信息。两个段寄存器之间不能直接传送信息。如:如:MOVAX,DS; MOVES,AX;借助借助AX完成传送完成传送 4)目的操作数,不能用立即寻址方式。目的操作数,不能用立即寻址方式。 5)不允许用立即寻址方式为段寄存器赋初值。不允许用立即寻址方式为段寄存器赋初值。如:如:MOVAX,DATA; MOVDS,AX ;借助借助AX完成传送完成传送具体来说,传送指令可以实现以下各种传送:具体来说,传送指令可以实现以下各种传送:寄存器之间
26、的传送寄存器之间的传送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立即数到寄存器的传送立即数到寄存器的传送MOV CL, 0FFH ; 将立即数将立即数0FFH送送CLMOV AX,0345H; 将立即数将立即数0345H送送AX,即即(AH)= 03H,(AL)= 45H。立即数到存储器的传送立即数到存储器的传送M
27、OV 2000H,1122H; 将立即数将立即数1122H送偏移地址为送偏移地址为 2000H和和2001H两个存储单元,两个存储单元, 低低8位送低地址单元,高位送低地址单元,高8位送高位送高 地址单元。地址单元。MOV SI,33H ; 将立即数将立即数33H送偏移地址为送偏移地址为 (SI)的存储单元。的存储单元。 (2)堆栈指令)堆栈指令 堆栈是人为定义的一块连续的存储堆栈是人为定义的一块连续的存储空间,用来暂存数据,这些数据是按空间,用来暂存数据,这些数据是按“先进后出,后进先进后出,后进先出先出”的原则存取的。堆栈指针的原则存取的。堆栈指针SP存放栈顶的有效地址。存放栈顶的有效地址
28、。8086的堆栈是栈顶为低地址,栈底为高地址。的堆栈是栈顶为低地址,栈底为高地址。 堆栈指令包括堆栈指令包括进栈进栈(PUSH)和和出栈出栈(POP)指令指令两类,且仅能进行字运算。(操作数不能是立即数)两类,且仅能进行字运算。(操作数不能是立即数) 1)进栈指令进栈指令PUSH 一般格式:一般格式:PUSH OPRD 源操作数可以是源操作数可以是CPU内部的内部的16位通用寄存器、段寄存位通用寄存器、段寄存器(器(CS除外)和内存操作数(所有寻址方式)。进栈的除外)和内存操作数(所有寻址方式)。进栈的操作对象必须是操作对象必须是16位数。位数。 功能:功能:将数据压入堆栈将数据压入堆栈 执行
29、过程为:执行过程为:操作数高操作数高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 - 9 POP BX 指令执行指令执行示意图示意图行示意图行示意图图图4 - 8 PUSH AX 指令执指令执 2)出栈指令出栈指令POP 一般格式:一般格式:POP OPRD 功能:功能:将数据弹出堆栈将数据弹出堆栈 执行过程
30、为执行过程为:SP 操作数低操作数低8位;位; (SP)+1 操作数高操作数高8位;位; (SP)+2 (SP); 例如:例如:POP BX;(BX)=2211H,则则POP BX指令指令执行前后堆栈区的情况如图执行前后堆栈区的情况如图4-9所示。所示。 在程序中,在程序中,PUSH和和POP指令一般是成对出现,且执指令一般是成对出现,且执行顺序相反。行顺序相反。 一般堆栈是在响应中断或子程序调用时保护断点地址一般堆栈是在响应中断或子程序调用时保护断点地址和现场,还可以在需要时保存一些寄存器的内容。和现场,还可以在需要时保存一些寄存器的内容。 例如:例如:PUSH AX;保护寄存器的内容保护寄
31、存器的内容 PUSH DX;保护寄存器的内容保护寄存器的内容 POP DX;恢复寄存器的内容恢复寄存器的内容 POP AX;恢复寄存器的内容恢复寄存器的内容 (3)交换指令交换指令XCHG 一般格式:一般格式:XCHG OPRD1,OPRD2 功能:功能:完成数据交换,把一个字节或一个字的源操作完成数据交换,把一个字节或一个字的源操作数与目的操作数相交换。数与目的操作数相交换。 交换指令对操作数有如下要求:交换指令对操作数有如下要求: 源操作数和目的操作数可以是寄存器或存储器,但不源操作数和目的操作数可以是寄存器或存储器,但不能同时为存储器。可以在寄存器之间、寄存器与存储器之能同时为存储器。可
32、以在寄存器之间、寄存器与存储器之间进行交换,但段寄存器和立即数不能作为一个操作数,间进行交换,但段寄存器和立即数不能作为一个操作数,不能在累加器之间进行交换。两个操作数字长必须相同。不能在累加器之间进行交换。两个操作数字长必须相同。 例如:例如: XCHG AL,CL;(AL)(CL),字节交换字节交换 XCHG AX,BX;(AX)(BX),字交换字交换 XCHG AX,SI;(AX)SI,字交换,字交换 (4)查表指令查表指令 一般格式一般格式:XLAT TABLE;TABLE是要查找的表首是要查找的表首地址。地址。 或或 XLAT;(AL)(DX)16(BX)+(AL) 功能:功能:完成
33、一个字节的查表转换。完成一个字节的查表转换。 说明:说明:该指令只查找字节表,表的首地址的偏移地该指令只查找字节表,表的首地址的偏移地址送址送BX,要查找的字节相对于表首地址的位移量送寄存要查找的字节相对于表首地址的位移量送寄存器器AL(AL内容即为要查找字节在表中的序号,因此表的内容即为要查找字节在表中的序号,因此表的长度为长度为256),指令执行后的结果存放在指令执行后的结果存放在AL中。中。 本指令可用在数制转换、函数表查表、代码转换等本指令可用在数制转换、函数表查表、代码转换等场合。场合。 例如:例如:MOV BX,OFFSET TABLE ;取表首地址;取表首地址 MOV AL,5
34、;偏移量;偏移量 XLAT ;查表;查表 ,ALBX+AL 所用表如图所用表如图4-10所示。所示。 输入输出输入输出(I/O)指令是专门针对输入输出端口进行读写指令是专门针对输入输出端口进行读写的指令,共有两条的指令,共有两条IN和和OUT。输入指令用于从。输入指令用于从I/O端口读数端口读数据到据到AX或或AL中,输出指令用于把中,输出指令用于把AX或或AL的内容写到的内容写到I/O端端口中。口中。 (1)输入指令输入指令IN 一般格式:一般格式: IN AL,port ;输入一个字节,;输入一个字节,port为为8位端口地址。位端口地址。 IN AX,port ;输入一个字,;输入一个字
35、,port为为8位端口地址。位端口地址。 IN AL,DX ;输入一个字节,;输入一个字节,DX的内容为的内容为16位端口地址。位端口地址。 IN AX,DX ;输入一个字,;输入一个字,DX的内容为的内容为16位端口地址。位端口地址。2输入输出输入输出(I/O)指令指令 功能:功能:从从I/O端口输入数据至端口输入数据至AL或或AX。 输入指令允许把一个字节或一个字由一个输入端口传输入指令允许把一个字节或一个字由一个输入端口传送到送到AL或或AX中。若端口地址不超过中。若端口地址不超过255时,为直接寻址方时,为直接寻址方式;若端口地址超过式;若端口地址超过255时,则必须用时,则必须用DX
36、保存端口地址,保存端口地址,为间接寻址方式,这样用为间接寻址方式,这样用DX作端口寻址最多可寻找作端口寻址最多可寻找64K个个端口。端口。 例如:例如: MOV DX ,0A40H ;将;将16位端口地址送位端口地址送DX IN AL,DX ;从地址;从地址0A40H的端口输入一个字节到的端口输入一个字节到AL (2)输出指令输出指令OUT 一般格式:一般格式: OUT port,AL ;输出一个字节,;输出一个字节,port为为8位端口地址。位端口地址。 OUT port,AX ;输出一个字,;输出一个字,port为为8位端口地址。位端口地址。 OUT DX,AL ;输出一个字节,;输出一个
37、字节,DX的内容为的内容为16位端口位端口地址。地址。OUT DX,AX ;输出一个字,;输出一个字,DX的内容为的内容为16位端口地位端口地址。址。 功能:功能:将将AL或或AX的内容输出至的内容输出至I/O端口。端口。该指令将该指令将AL或或AX中的内容传送到一个输出端口。端口中的内容传送到一个输出端口。端口寻址方式与寻址方式与IN指令相同。指令相同。 例如:例如: MOV DX ,0A40H ;将;将16位端口地址送位端口地址送DX OUT DX ,AX ;把;把AX的内容从地址的内容从地址0A40H的端口输出的端口输出 8086/8088提供了三条把地址指针写入寄存器或寄存提供了三条把
38、地址指针写入寄存器或寄存器对的指令。器对的指令。 (1)取偏移地址指令取偏移地址指令LEA 一般格式:一般格式: LEA OPRD1,OPRD2 功能:功能:把源操作数把源操作数OPRD2的地址偏移量传送至目的的地址偏移量传送至目的操作数操作数OPRD1。3地址传送指令地址传送指令 源操作数必须是一个存储器操作数,目的操作数必须源操作数必须是一个存储器操作数,目的操作数必须是一个是一个16位的寄存器。这条指令通常用来建立串操作指位的寄存器。这条指令通常用来建立串操作指令所需的地址指针。令所需的地址指针。 例:例: LEA BX,BUFFER ;把;把BUFFER的偏移地址送的偏移地址送BX M
39、OV BX,BUFFER ;把存储器;把存储器BUFFER的内容送的内容送BX 下面两条指令完全等价:下面两条指令完全等价: LEA BX,BUFFER MOV BX,OFFSET BUFFER; 其中其中OFFSET BUFFER表示存储器表示存储器BUFFER的偏移的偏移地址。地址。 (2)地址指针装入指令指令地址指针装入指令指令LDS 一般格式:一般格式:LDS OPRD1,OPRD2 功能:功能:完成一个完成一个32位地址的传送。地址指针包括段基位地址的传送。地址指针包括段基址部分和偏移地址部分。指令将段基址送入址部分和偏移地址部分。指令将段基址送入DS,偏移地,偏移地址部分送入一个址
40、部分送入一个16位的指针寄存器或变址寄存器。位的指针寄存器或变址寄存器。 源操作数是一个存储器操作数,目的操作数是一个指源操作数是一个存储器操作数,目的操作数是一个指针寄存器或变址寄存器。针寄存器或变址寄存器。 例如:例如:LDS SI,100H ;将把偏移地址;将把偏移地址100H到到103H所指向的所指向的4个存储单元的前两个单元的内容送个存储单元的前两个单元的内容送SI,后两个单元的内容送后两个单元的内容送DS。 设设(DS)= 0B000H,(0B0100H)=10H,(0B0101H)=20H,(0B0102H)=30H,(0B0103H)=40H,则执行上述指令后则执行上述指令后(
41、SI)= 2010H,(DS)= 4030H。 (3)LES指令指令 一般格式:一般格式: LES OPRD1,OPRD2 这条指令除将地址指针的段基址部分送入这条指令除将地址指针的段基址部分送入ES外,其外,其它与它与LDS类似。类似。 例如:例如: LES DI,BX+DATA 标志传送指令共标志传送指令共4条,指令的操作数以隐含形式规定条,指令的操作数以隐含形式规定(隐含的操作数是(隐含的操作数是AH)。)。 (1)取标志指令取标志指令LAHF 一般格式:一般格式:LAHF 功能:功能:将标志寄存器中的将标志寄存器中的SF、ZF、AF、PF和和CF(即低(即低8位)分别传送至位)分别传送
42、至AH寄存器的指定位,寄存器的指定位,LAHF指令指令对状态标志位无影响。如图对状态标志位无影响。如图4-11所示。所示。4标志传送指令标志传送指令 (2)置标志指令置标志指令SAHF 一般格式:一般格式:SAHF 功能:功能:将寄存器将寄存器AH的指定位,分别送至标志寄存器的的指定位,分别送至标志寄存器的SF、ZF、AF、PF和和CF位(即低位(即低8位)。根据位)。根据AH的内容,的内容,影响上述标志位,对影响上述标志位,对OF、DF、IF和和TF无影响。无影响。 (3)标志压入堆栈指令标志压入堆栈指令 一般格式:一般格式:PUSHF 功能:功能:先将堆栈指针减先将堆栈指针减2,同时将标志
43、寄存器,同时将标志寄存器FLAGS的内容(的内容(16位)压入堆栈,不影响标志位。位)压入堆栈,不影响标志位。 (4)标志弹出堆栈指令标志弹出堆栈指令 一般格式:一般格式:POPF 功能:功能:将堆栈顶部的一个字,传送到标志寄存器将堆栈顶部的一个字,传送到标志寄存器FLAGS,同时堆栈指针加,同时堆栈指针加2,影响标志位。,影响标志位。 表表4-2列出了数据传送类指令列出了数据传送类指令 的功能与格式。的功能与格式。表表4-2 数据传送类指令数据传送类指令 8088提供了二进制的加、减、乘、除四种基本算术运提供了二进制的加、减、乘、除四种基本算术运算指令。这些操作都可用于字节或字的运算,也可以
44、用于算指令。这些操作都可用于字节或字的运算,也可以用于带符号数(带符号数用补码表示)与无符号数的运算。同带符号数(带符号数用补码表示)与无符号数的运算。同时时8088还提供了与之对应的四类十进制调整指令,故可还提供了与之对应的四类十进制调整指令,故可以进行十进制的算术运算。以进行十进制的算术运算。 说明:说明:算术运算指令有单操作数和双操作数两种,其算术运算指令有单操作数和双操作数两种,其中单操作数不能是立即数,而双操作数指令中,立即数只中单操作数不能是立即数,而双操作数指令中,立即数只能作为源操作数,另外,源操作数和目的操作数不能同时能作为源操作数,另外,源操作数和目的操作数不能同时为存储器
45、。为存储器。 算术运算指令大多会对标志位产生影响。下面分别介算术运算指令大多会对标志位产生影响。下面分别介绍这四种指令。绍这四种指令。4.2.2算术运算指令算术运算指令 (1)不带进位的加法指令不带进位的加法指令ADD 一般形式:一般形式:ADD OPRD1,OPRD2 功能:功能:OPRD1OPRD1+OPRD2 完成两个字节或字操作数相加,结果送至目的操作数完成两个字节或字操作数相加,结果送至目的操作数OPRD1。1加法运算指令加法运算指令 源操作数和目的操作数可以是寄存器以及存储器操作源操作数和目的操作数可以是寄存器以及存储器操作数,源操作数还可以是立即数;可以是无符号数,也可以数,源操
46、作数还可以是立即数;可以是无符号数,也可以是带符号数。但源操作数和目的操作数不能同时为存储器是带符号数。但源操作数和目的操作数不能同时为存储器操作数,也不能对段寄存器进行运算。操作数,也不能对段寄存器进行运算。 这条指令对标志位这条指令对标志位SF、ZF、AF、PF、CF和和OF有影有影响。响。 例如:例如: ADD AL,20 ;累加器;累加器AL与立即数相加与立即数相加 ADD BX,3000H ;寄存器与存储单元内容相加;寄存器与存储单元内容相加 ADD AX,SI ;寄存器之间相加;寄存器之间相加 ADD DATABX+SI,DX ;16位存储器操作数与寄存器位存储器操作数与寄存器 内
47、容相加内容相加 ADD DATASI,AL ;8位存储器操作数与寄存器位存储器操作数与寄存器 相加相加 (2)带进位的加法指令带进位的加法指令ADC 一般形式:一般形式:ADC OPRD1,OPRD2 ;带进位的加法;带进位的加法 功能:功能:OPRD1OPRD1+OPRD2 +CF 这条指令与上这条指令与上条指令类似,只是在两个操作数相加时条指令类似,只是在两个操作数相加时,要把进位标志,要把进位标志CFCF的现行值加上去,结果送至目的操作数。的现行值加上去,结果送至目的操作数。 ADC指令主要用于多字节运算中。若有两个四字节的数,指令主要用于多字节运算中。若有两个四字节的数,已分别放在自已
48、分别放在自FIRST和SECOND开始的存储区中,每个数占开始的存储区中,每个数占四个存储单元。存放时,最低字节在低地址单元,则可四个存储单元。存放时,最低字节在低地址单元,则可 用以下程序段实现相加。用以下程序段实现相加。 MOV AX,FIRST ADD AX,SECOND ;进行字运算;进行字运算 MOV THIRD,AX MOV AX,FIRST+2 ADC AX,SECOND+2 MOV THIRD+2,AX 这条指令对标志位这条指令对标志位SFSF、ZFZF、AFAF、PFPF、CFCF和和OFOF有影响。有影响。 (3)加加1指令指令INC 一般形式:一般形式:INC OPRD
49、功能:功能:OPRDOPRD+1 完成对指定的操作数完成对指定的操作数OPRD加加1,然后返回此操作数。,然后返回此操作数。 操作数操作数OPRD可以是寄存器和存储器操作数;可以是可以是寄存器和存储器操作数;可以是8位数,也可以是位数,也可以是16位数;但不能是立即数,也不能是段寄位数;但不能是立即数,也不能是段寄存器。此指令主要用于在循环程序中修改地址指针和循环存器。此指令主要用于在循环程序中修改地址指针和循环次数等。次数等。 这条指令执行的结果影响标志位这条指令执行的结果影响标志位AF、OF、PF、SF和和ZF,而对进位标志,而对进位标志CF没有影响。没有影响。 如:如:INC AL ;字
50、节加;字节加1 INC CX ;字加;字加1 INC BYTE PTRBX ;字节加;字节加1 INC WORD PTRSI ;字加;字加1 (1)不带借位的减法指令不带借位的减法指令SUB 一般形式:一般形式:SUB OPRD1,OPRD2 ; 功能:功能:OPRD1OPRD1-OPRD2 完成两个操作数相减,也即从完成两个操作数相减,也即从OPRD1中减去中减去OPRD2,结果放在结果放在OPRD1中。中。 源操作数和目的操作数可以是寄存器以及存储器操作源操作数和目的操作数可以是寄存器以及存储器操作数,源操作数还可以是立即数;可以是无符号数,也可以数,源操作数还可以是立即数;可以是无符号数
51、,也可以是带符号数。但源操作数和目的操作数不能同时为存储器是带符号数。但源操作数和目的操作数不能同时为存储器操作数,也不能对段寄存器进行运算。操作数,也不能对段寄存器进行运算。 这条指令对标志位这条指令对标志位SFSF、ZFZF、AFAF、PFPF、CFCF和和OFOF有影响。有影响。 例如:例如:SUB AL,20H SUB AX,BX SUB BP,CL2减法指令减法指令 (2)带借位的减法指令带借位的减法指令SBB 一般形式:一般形式:SBB OPRD1,OPRD2 功能:功能:OPRD1OPRD1-OPRD2-CF 这条指令与这条指令与SUB类似,只是在两个操作数相减时,还类似,只是在
52、两个操作数相减时,还要减去借位标志要减去借位标志CF的现行值。同的现行值。同ADC指令一样,本指令指令一样,本指令主要用于多字节操作数相减。主要用于多字节操作数相减。 (3)减减1指令指令DEC 一般形式:一般形式:DEC OPRD ; 功能:功能:OPRDOPRD-1 对指令的操作数减对指令的操作数减1,然后送回此操作数。,然后送回此操作数。 在相减时,把操作数作为一个无符号二进制数来对待。在相减时,把操作数作为一个无符号二进制数来对待。对操作数的要求和对标志位的影响和对操作数的要求和对标志位的影响和INC指令一样。指令一样。 例如:例如: DEC CX DEC BYTE PTRBX ;字节
53、减;字节减1 DEC WORD PTRSI ;字减;字减1 (4)求补指令求补指令NEG 一般形式:一般形式:NEG OPRD 功能:功能:OPRD0 - OPRD 对操作数取补,即用零减去操作数,再把结果送回操对操作数取补,即用零减去操作数,再把结果送回操作数。作数。 操作数可以是寄存器以及存储器操作数。指令把操作操作数可以是寄存器以及存储器操作数。指令把操作数视为补码表示的带符号数。之所以把数视为补码表示的带符号数。之所以把NEG指令称为求补指令称为求补指令,是因为一个操作数取补码就相当于用零减去此操作指令,是因为一个操作数取补码就相当于用零减去此操作数。数。 例如:例如: NEG AL
54、设设(AL)00111010B则取补后为则取补后为11000110B 若操作数为若操作数为80H(-128)或为或为8000H(-32768)取补,取补,则操作数不变,但标志则操作数不变,但标志OF置置1,其它情况,其它情况OF置置0。 此指令影响标志此指令影响标志AF、CF、OF、PF、SF和和ZF。指令。指令的结果一般总是使标志的结果一般总是使标志CF=1。除非在操作数为零时,才使。除非在操作数为零时,才使CF=0。 (5)比较指令比较指令CMP 一般形式:一般形式:CMP OPRD1,OPRD2 功能:功能: OPRD1- OPRD2 比较指令完成两个操作数相减,使结果反映在标志位比较指
55、令完成两个操作数相减,使结果反映在标志位上,但并不送回结果上,但并不送回结果(即不带回送的减法即不带回送的减法)。指令对操作数的要求及对标志位的影响与指令对操作数的要求及对标志位的影响与SUB指令完全相指令完全相同。同。 例如:例如:CMP AL,100 CMP DX,DI CMP CX,DATABP CMP DATASI,AX 比较指令主要用于比较两个数的大小关系。在比较指比较指令主要用于比较两个数的大小关系。在比较指令之后,根据标志位的状态来判断两个操作数谁大谁小,令之后,根据标志位的状态来判断两个操作数谁大谁小,或是否相等。或是否相等。 1)若两者相等,相减以后结果为零,若两者相等,相减
56、以后结果为零,ZF标志为标志为1,否,否则为则为ZF标志为标志为0。 2)如果是两个无符号数如果是两个无符号数(如如CMP OPRD1,OPRD2)进行比较,则可以根据进行比较,则可以根据CF标志的状态判断两数大小。若结标志的状态判断两数大小。若结果没有产生借位果没有产生借位(CF=0),显然,显然OPRD1OPRD2;若产生了;若产生了借位借位(即即CF1),则则OPRD1OPRD2。 如果是两个带符号数进行比较如果是两个带符号数进行比较,则,则 当当OF SF=0时,被减数大于减数;时,被减数大于减数; 当当OF SF=1时,被减数小于减数;时,被减数小于减数; 一般在比较指令之后都紧跟一
57、个条件转移指令,可根一般在比较指令之后都紧跟一个条件转移指令,可根据比较结果决定程序的走向。据比较结果决定程序的走向。 乘法指令分为无符号乘法指令和带符号乘法指令两种乘法指令分为无符号乘法指令和带符号乘法指令两种,隐含的目的操作数为隐含的目的操作数为AX与与DX,而源操作数由指令给出。,而源操作数由指令给出。指令可完成字节与字节相乘,结果为指令可完成字节与字节相乘,结果为16位数,存放在位数,存放在AX中;还可以完成字与字相乘,结果为中;还可以完成字与字相乘,结果为32位数,高位数,高16位存放位存放在在DX中,低中,低16位存放在位存放在AX中。中。 (1) 无符号乘法指令无符号乘法指令MU
58、L 一般格式:一般格式:MUL OPRD 功能:功能:完成字节与字节相乘、字与字相乘,且默认的完成字节与字节相乘、字与字相乘,且默认的操作数放在操作数放在AL或或AX中。中。 字节相乘,字节相乘,(AX)(OPRD)X(AL) 字相乘,字相乘,(DX:AX)(OPRD)X(AX)3乘法指令乘法指令 乘法法指令要求两个操作数的字长一样,源操作数可以乘法法指令要求两个操作数的字长一样,源操作数可以是寄存器和存储器操作数,但不能为立即数。是寄存器和存储器操作数,但不能为立即数。 当乘积的高当乘积的高8位或位或16位不为位不为0时,则时,则CF=OF=1,代表,代表AH或或DX中包含乘积的有效数字;否
59、则中包含乘积的有效数字;否则CF=OF=0。对其它标志。对其它标志位无影响。位无影响。 例如:例如: MOV AL,FIRST ;字节相乘;字节相乘 MUL SECOND ;结果为;结果为(AX)(FIRST)X(SECOND) MOV AX,THIRD ;字相乘;字相乘 MUL AX ;结果;结果(DX:AX)(THIRD)X(THIRD) MOV AL,90H CBW ;字扩展;字扩展AX=30H MOV CX,1000H MUL CX (2) 带符号数乘法指令带符号数乘法指令IMUL 一般格式:一般格式:IMUL OPRD 这是一条带符号数的乘法指令,在功能上和这是一条带符号数的乘法指令
60、,在功能上和MUL类似。类似。区别为当结果的高半部分不是低半部分的符号位扩展时,区别为当结果的高半部分不是低半部分的符号位扩展时,则则CF=OF=1,否则,否则CF=OF=0。 除法指令分为无符号除法指令和带符号除法指令两除法指令分为无符号除法指令和带符号除法指令两种,隐含了被除数种,隐含了被除数AX与与DX,而除数由指令给出。在除法,而除数由指令给出。在除法指令中,字节运算时被除数在指令中,字节运算时被除数在AX中;运算结果商在中;运算结果商在AL中,中,余数在余数在AH中。字运算时被除数为中。字运算时被除数为DX:AX构成的构成的32位数,位数,运算结果商在运算结果商在AX中,余数在中,余
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025什么是固定资产借款合同
- 2025年度物流基础设施PPP项目合同第三、四章效益评估3篇
- 2025版跨境电商交易安全保障服务合同2篇
- 2025版高铁轨道用高强钢筋买卖及技术服务合同3篇
- 2025版第七章建筑工程施工合同工程结算审计与税务筹划协议3篇
- 2024年度合肥市区二手住宅置换交易合同范本下载3篇
- 2024年高速公路建设项目投资与合作合同
- 2024年限定版果树种植承包合同模板下载版B版
- 2025年度XX健身俱乐部与XX人力资源公司健身教练及服务人员派遣合同
- 2024年股权与业绩挂钩协议
- 水泥行业数字化转型服务方案
- 深圳市南山区2024-2025学年第一学期期末教学质量检测九年级物理 24-25上九年级物理
- 团委书记个人工作总结
- 高危多发性骨髓瘤诊断与治疗中国专家共识(2024年版)解读
- 旅游景区总经理招聘协议
- 《数据结构课程设计》赫夫曼编码实验报告
- 英语语法与长难句理解知到智慧树章节测试课后答案2024年秋山东石油化工学院
- 2025年新高考语文古诗文理解性默写(含新高考60篇)
- 公共关系理论与实务教程 教案-教学方案 项目8 公共关系专题活动管理
- 中医内科学虚劳培训课件
- 2024-2025学年上学期天津初中语文七年级期末试卷
评论
0/150
提交评论