微机原理第四章:指令系统_第1页
微机原理第四章:指令系统_第2页
微机原理第四章:指令系统_第3页
微机原理第四章:指令系统_第4页
微机原理第四章:指令系统_第5页
已阅读5页,还剩85页未读 继续免费阅读

下载本文档

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

文档简介

第四章80X86CPU的指令系统内容提要:★

从指令寻址方式出发,介绍数据操作数、地址操作数的类型和寻址方式、8086的指令格式和指令机器码的概念;★

重点讲述8086中指令的功能和对标志位的影响等;★

简单程序的编制。学习要点:

掌握8086指令中操作数的类型、指令格式、寻址方式;

掌握常用指令的功能和使用方法;

掌握指令的助记符,操作数的正确书写法;

了解指令执行后对标志的影响。本章主要内容:1.了解:指令系统的一般概念★指令及指令系统★指令的格式★指令中的操作数类型2.掌握:对操作数的寻址方式3.掌握:六大类指令的操作原理

★操作码的含义

★指令对操作数的要求

★指令执行的结果第四章80X86CPU的指令系统基本概念1.指令:控制计算机完成某种操作的命令。2.指令系统:处理器所能识别的所有指令的集合。3.指令的兼容性:同一系列机的指令都是兼容的,不同系列计算机有不同的指令系统。4.指令的符号:用规定的英文字母组成,称为助记符。5.指令系统的特点:

指令语言是面向机器的语言,与计算机硬件有对应关系;

用指令进行编程能充分开发计算机硬件资源,它产生的程序目标代码短、运行速度快;

在运动控制、智能仪器仪表、监测等领域应用非常广泛。4.18086的寻址方式

有关寻址的基本概念:1.寻址方式:指令中用于说明求出操作数有效地址的方法;2.寻址操作:根据寻址方式求出操作数有效地址的过程;3.为满足程序设计需要,程序设计中可采用多种寻址方式:★指令中可直接写出操作数本身★指令中可给出操作数的地址★指令中可给出操作数所在地址的地址4.8086指令系统中,按操作数的类型大致分为三类:★数据操作数★

(转移)地址操作数★

I/O操作数4.18086的寻址方式一、数据操作数

指与数据有关的操作数,即指令中操作的对象是数据。根据数据操作数在计算机中的不同位置可分为:1.立即数操作数:指令中要操作的数据包含在指令中2.寄存器操作数:指令中要操作的数据在指定的寄存器中3.存储器操作数:指令中要操作的数据在指定的存储单元中4.I/O操作数:指令中要操作的数据来自或送到I/O端口。▲

本节着重讲解数据操作数寻址方式4.18086的寻址方式二、地址操作数

地址操作数是与程序转移地址有关的操作数,即指令中操作的对象不是数据,而是要转移的目标地址。★它也可以分为:

1.立即数操作数:即要转移的目标地址包含在指令中

2.寄存器操作数:转移的目标地址存放在寄存器中

3.存储器操作数:转移的目标地址存放在存储单元之中★

在调用指令或转移指令中,这类操作数指出是:程序要转移的目的地址。★地址操作数的寻址方式将在转移指令中介绍。4.18086的寻址方式三、指令中操作数的个数★对于数据操作数▲一些指令只有一个操作数,或没有(或隐含)操作数▲有些指令具有两个操作数:一个称为源操作数,在操作过程中其值不改变;另一个称为目的操作数,操作后一般被操作结果代替。★

对于地址操作数

指令中只有一个操作数,它是一个供程序转移的目标地址。4.18086的寻址方式四、数据操作数寻址的方式:八种基本的寻址方式1.立即寻址:操作数在指令中→立即操作数2.寄存器寻址:操作数在寄存器中→寄存器操作数3.直接寻址4.寄存器间接寻址5.寄存器相对寻址操作数在存储器中→存储器操作数6.基址变址寻址7.相对基址变址寻址8.I/O

操作数寻址:操作数在I/O端口中→I/O端口操作数★

3~7

种寻址方式属于存储器寻址,需通过计算的方法来确定操作数所在存储单元的有效地址EA★

I/O

操作数寻址将在输入输出指令部分介绍4.1.1立即数的寻址方式

立即寻址:即指令中直接给出操作数。操作数与指令代码一起放在码段中。例如:MOVAX,1234H;AX1234H

源操作数的寻址方式为立即寻址。执行过程如下图所示:

立即寻址通常用于二地址指令中,且只能是源操作数。★数据传送应理解为复制传送,源操作数不会因为传送而丢失。4.1.2寄存器数的寻址方式

★寄存器寻址:操作数在寄存器中,指令中给出寄存器名。例如:MOVAX,1234H;目的操作数采用寄存器寻址

MOVDX,AX;目的和源操作数均采用寄存器寻址★

16位操作数,寄存器可用:

AX、BX、CX、DX、SI、DI、SP、BP、CS、DS、ES、SS;★

8位操作数,寄存器可用:

AH、AL、BH、BL、CH、CL、DH、DL;4.1.2寄存器数的寻址方式寄存器寻址特点:1.因操作数在寄存器中,指令执行时的操作就在

CPU的内部进行,不需要通过访问存储器来获得操作数,因而

执行速度快。2.寄存器代码符号比内存地址短,汇编后机器码长度最短。3.dst

和SRC

均可采用寄存器寻址方式,也可以同时采用寄存器寻址方式。4.当指令中的

dst和

SRC

均为寄存器操作数时,必须采用同样长度(字或字节)的寄存器;5.两个操作数不能同时为段寄存器;6.目的操作数不能是代码段寄存器

CS。4.1.3存储器数的寻址方式

一、直接寻址

★当操作数在存储器中时,有下面

5种寻址方式,统称为:存储器寻址方式。★双操作数指令中的两个操作数不能同时为存储器操作数。★

指令中给出操作数所在存储单元的有效地址,默认为数据段。★

为了区别于立即数,有效地址

EA

用方括号“[

]”括起。例如:MOVAX,[2000H]

MOV[1200H],AX;

MOVES:[0100H],AL

★根据指令中给出的有效地址

EA,得到存储单元的物理地址:

PA=DS×16+EA4.1.3存储器数的寻址方式直接寻址举例:MOVAX,[2000H]1.指令中给出:EA=2000H

假设:DS=4000H

物理地址:PA=42000H2.字在内存中占两个单元:低字节在前(低地址)高字节在后(高地址)3.以低字节的地址作为字的地址。4.把数据段中该内存单元中的内容送到AX中;4.1.3存储器数的寻址方式一、直接寻址★

也允许在附加段、堆栈段、代码段存取数据,称为“段跨越”。如例MOVES:[0100H],AL

ES:

段前缀操作符

操作数物理地址:PA=ESx16+0100H★

在汇编语言指令中,可以用符号地址代替数值地址如例VALUEDB12H,67H,100;数据定义

MOVAL,VALUE

寻址过程如图所示:4.1.3存储器数的寻址方式二、寄存器间接寻址操作数的EA在REG中,指令中给出存放EA的寄存器名1.因为

EA是16位,存放

EA所使用的寄存器必须是16位的;2.用于间接寻址的寄存器有:基址寄存器BX、BP

;变址寄存器SI、DI。3.为了区别于寄存器寻址,寄存器名用“[

]”括起。4.不同的寄存器所隐含对应的段不同。

★采用

SI、DI、BX

寄存器时,在数据段寻址;★采用

BP

寄存器时,在堆栈段寻址;★操作数的物理地址为:

PA=DS16+SI/DI/BXPA=SS10H+BP4.1.3存储器数的寻址方式二、寄存器间接寻址例

MOVAX,[SI]MOV[BX],1234HMOVBX,[BP]寄存器间接寻址的过程如图所示4.1.3存储器数的寻址方式三、寄存器相对寻址:EA由两部分组成例

MOVAL,8[BX]MOVAX,COUNT[SI]ADDAX,

[BP

+20H]INC[1000H+BP]MOV[BX]+50

,DI▲

一部分存于指令中给出的寄存器中;▲一部分以位移量的方式直接在指令中给出。☆

位移量是符号数:如

8、20H、50、1000H或符号常量

COUNT☆

8位位移量的范围为:0H~0FFH(+127~-128)

16位位移量的范围为:0H~0FFFFH(+32765~-32768)

根据所用寄存器的不同,对应的段不同。规律同寄存器寻址。4.1.3存储器数的寻址方式三、寄存器相对寻址:例:MOVAL,

[BX

+8]设:DS=3000HBX=100H寄存器相对寻址过程如图所示4.1.3存储器数的寻址方式四、基址变址寻址:EA由两部分构成1.一部分在基址寄存器

BX

或BP

中;一部分在变址寄存器

DX

DI

中;在指令中分别给出两个寄存器名。操作数的有效地址

EA

为:

EA1=BX+SI/DI

或:EA2=BP+SI/DI2.当基址寄存器使用

BX时,约定在数据段寻址;3.当基址寄存器使用

BP时,约定在堆栈段寻址;

操作数的

物理地址

PA

为:

PA1=DSX10H+EA1

PA2=SSX10H+EA24.1.3存储器数的寻址方式四、基址变址寻址

例:

MOVAX,ES:[BX+DI]MOVAL,[BP][SI]基址变址的寻址过程

设:SS=3000HBP=100H,SI=5存储单元的

PA为:SSX16+BP+SI内存单元中的数据送到AL中

4.1.3存储器数的寻址方式五、相对基址加变址寻址:EA由三部分构成1.一部分在基址寄存器

BX或

BP中;一部分在于变址寄存器

SI或

DI中;一部分为位移量。在指令中分别给出两个寄存器名及

8位或

16位的偏移量操作数的

有效地址

EA

为:

EA1=BX+SI/DI+D8/D16

或:EA2=BP+SI/DI+D8/D162.当基址寄存器选用

BX时,数据隐含存于数据段中;3.当基址寄存器选用

BP时,数据隐含存于堆栈段中,操作数的

物理地址

PA为:

PA1=DSX10H+EA1

PA2=SSX10H+EA14.1.3存储器数的寻址方式五、相对基址加变址寻址

例MOVAX,[BX+SI+5]MOVAL,5[BP][SI]内存单元中的数据送到AL中

存储单元的

PA为SSX16+BP+SI+5

设:SS=2000HBP=1000HSI=100H相对基址变址的寻址过程4.1.3存储器数的寻址方式——

小结

1.除立即寻址和寄存器寻址外,其它五种寻址的操作数均来自存储器,指令中提供了

EA

EA

的计算方法。2.只有

BX、BP、SI、DI

可以出现在方括号[]中。3.BX

BP、SI

和DI

不能同时出现在方括号[]中。4.方括号[]

内包括多项内容时,它们只能做加法运算。5.若方括号[]

内包括有

BP

时,则约定在堆栈段寻址,其余均在数据段内寻址。6.存储器操作数的物理地址

PA

,需通过地址加法器计算才能获得。4.1.3存储器数的寻址方式——

小结说明:disp表示符号地址、8位或16位的位移量基址变址接寻址PA=DS×16+PA=SS×16+BX+SIBX+DIBP+SIBP+DI相对基址变址寻址PA=DS×16+PA=SS×16+BX+SI+dispBX+DI+dispBP+SI+dispBP+DI+disp寄存器间接寻址BXSIDIPA=DS×16+PA=SS×16+BPBX+dispSI+dispDI+disp

PA=DS×16+PA=SS×16+BP+disp寄存器相对寻址4.28086的指令格式

4.2.1指令的基本格式与构成★

汇编语言的指令语句与机器指令一一对应的,经汇编程序将其翻译成指令代码(目标代码),让CPU

执行某种操作。★指令中应包含的信息:执行的操作;运算数据的来源;运算结果的去向。一、指令的基本格式指令的编写必须满足一定格式,便于机器能够识别指令,

8086的每条指令由1~4个部分组成,格式如下:[标识符]指令助记符[操作数][;注解]

每部分之间用空格分开;方括号中的部分,可有可无。4.2.1指令的基本格式与构成一、指令的基本格式标识符指令助符操作数;注释,8086指令的基本格式也可用下图来表示:圆头方框表示是语句中的关键字重复项之间用逗号隔开由后向前的箭头表示是重复项由前向后的箭头表示是可选项4.2.1指令的基本格式与构成一、指令的基本格式标识符指令助符操作数;注释,★

指令语句中的关键字,不可缺省;是指令操作类型的代表符号★指令助记符的前面可加上多个“前缀”,从而实现某些附加操作1.标识符2.指令助记符★给指令或某一存储单元所在地址起的名字。由字母、数字、下划线组成,首字符不能为数字,最长为31个字符★标识符后跟冒号时,表示是标号。代表该行指令的起始地址★标识符后不带冒号时,表示变量。伪指令前的标识符不加冒号

4.2.1指令的基本格式与构成一、指令的基本格式标识符指令助符操作数;注释,3.操作数4.注释

是参加本指令运算的对象,有些指令不需要操作数,可以缺省;★有些指令需要两个操作数,这时必须用逗号将两个操作数分开;★有些操作数可以用表达式来表示。★

是可选项,允许缺省;如果带注释则必须用分号开头;★注释用来对指令功能以说明,方便阅读程序,汇编程序不对它做任何处理。4.2.1指令的基本格式与构成二、指令的构成指令系统通常由几十种或百余种指令组成,每种指令都是由两个字段——操作码字段和操作数字段所构成。

操作码操作数或操作数的地址★指出指令执行操作所需要的操作数★操作数字段中,可以是操作数本身,也可以是操作数的地址或者是操作数地址的计算方法。1.操作码字段★指示计算机所要执行的操作类型★由一组二进制代码表示,在汇编语言中又用助记符代表。2.操作数字段4.2.1指令的基本格式与构成二、指令的构成2.操作数字段:★指令中此字段通常可有一个或两个操作数,或无操作数。一个操作数称为:单操作数指令;两个操作数称为:双操作数指令;无操作数称为:零操作数指令。★双操作数又分别被称为:目的操作数

dst(在前);

源操作数

src(在后)。★在指令执行之前,

src和

dst均为参加运算处理的两个操作数,指令执行后,

dst中存放的是运算处理的结果,源操作数不便。

4.2.2通用指令代码格式★

8086的指令长度可在

1~6字节的范围,如下图所示

★B1、B2为基本字节,B3~B6根据不同指令作相应的安排B1B2B3B4B5B6OPREGR/MDWMOD543210767210LODDISP或DATAHIGHDISP或DATALODDATAHIGHDATA指令操作码

寻址方式D=1:REG为dstD=0:REG为src

W=1:字指令

W=0:字节指令当MOD≠11时,有一个操作数位于存储器中:

MOD=

00时:存储器数无位移量

MOD=

01时:存储器数有8位位移量

MOD=

10时:存储器数有16位位移量R/M字段

4.2.2通用指令代码格式B1B2B3B4B5B6OPREGR/MDWMOD543210767210LODDISP或DATAHIGHDISP或DATALODDATAHIGHDATAREG字段MOD=11时:此字段给出指令中第二个操作数所在的寄存器编码;MOD≠11时:此字段指出指令中存储器操作数的

PA的计算方法。表示指令中的一个寄存器操作数的编码☆给出存储器操作数地址的位移量或立即操作数。☆由MOD来决定位移量是

8位,还是

16位。☆立即操作数位于位移量的后面。☆若指令中无位移量,立即数就位于

B3B4字节B3~B6字节拥有133条基本指令,按功能分成六类:

1.数据传送指令

2.算术运算指令

3.逻辑运算指令

4.串操作指令

5.控制转移指令

6.处理器控制指令8086CPU的指令系统4.3数据传送类指令★功能:用以实现

——数据传送:★指令均含有两个操作数,该类指令按功能可分为

4小类:①通用数据传送指令;②累加器专用传送指令;③标志操作指令;④地址传送指令。★除

SAHF、POPF指令外,其它指令均不影响状态标志位。

CPU的内部寄存器之间;CPU的内部寄存器和存储器之间;CPU的内部寄存器和

I/O端口之间的。4.3.1通用数据传送指令1.传送指令:MOV

格式:MOVdst,src功能:dst

src

MEM

SEG

immCS、IP除外CS、IP除外

REG

src:源操作数;dst:目的操作数寄存器操作数立即操作数段寄存器操作数存储器操作数4.3.1通用数据传送指令2.堆栈操作指令入栈格式:PUSHsrc;src:{MEM,REG,SEG}

功能:将src指示的字数据压入当前栈顶。出栈格式:POPdst

;dst:{MEM,REG,SEG}

功能:将当前栈顶的字弹出到dst中,CS除外。3.交换指令格式:XCHGOPR1,OPR2;功能:将两个操作数(字或字节)相互交换位置。MEMREG4.3.2累加器专用传送指令

1.输入/输出(I/O)指令

只能使用AL或AX寄存器与I/O设备进行数据交换。☆该类指令分为直接寻址和寄存器间接寻址两种格式。

★直接寻址:指令中直接给出8位的端口地址PROT

输入格式:INAL,PORT

;AL[PORT]

INAX,PORT

;AL[PORT]

;AH[PORT+1]

功能:将端口PORT中的字节/字传送到AL/AX寄存器中。

输出格式:

OUTPORT,AL

;[PORT]AL

OUTPORT,AX

;[PORT]AL

;[PORT+1]AH

功能:将AL/AX寄存器中的字节/字传送到端口PORT中。4.3.2累加器专用传送指令1.输入/输出(I/O)指令☆

直接寻址的I/O指令,寻址外设的端口地址范围:0~255,☆间接寻址的I/O指令,寻址外设的端口地址范围:0~65535。★间接寻址:必须用DX做间接寻址的寄存器输入格式:INAL,DX

;AL[DX]

INAX,DX

;AL[DX]

;AH[DX+1]

功能:将DX指明的端口中的字节/字送到AL/AX寄存器中。输出格式:OUTDX,AL

;[DX]AL

OUTDX,AX

;[DX]AL

;[DX+1]AH

功能:将AL/AX中的字节/字送到由DX指明的端口中。4.3.2累加器专用传送指令2.换码指令

格式:XLAT

;AL[DS×16+BX+AL]功能:将累加器AL中的一个值(码)转换为内存表格(Table)中的某一个值后,再送回AL中。★

BX指向表首,AL的值为表内指针;隐含寻址★使用XLAT指令之前,要求BX寄存器指向表的首地址;★

AL中存放待查的码,它表示表中某一项与表首址的距离;★执行时,将BX和AL的值相加得到一个有效地址,并将该地址单元中的值取到AL中,这就是查表转换的结果。4.3.3标志操作指令

★此类指令共有

4条,均为单字节指令;★源操作数和目的操作数都隐含在操作码中。1.低八位标志位送

AH指令

格式:LAHF

;功能:AHFR-L2.AH内容送FR寄存器低八位指令格式:SAHF

;功能:FR-LAH3.FR寄存器的入栈指令格式:PUSHF

;功能:[SS×16+SP-2]FR4.FR寄存器的出栈指令格式:POPF

;功能:FR[SS×16+SP]

SP

SP+2D7AFCFPFSFFR-LD0ZF4.3.4地址传送指令

该类指令传送

MEM的地址到16位

REG中,而不是它的内容。

1.有效地址EA传送指令格式:LEAREG,MEM

;rsrc的EA

功能:将MEM操作数的有效地址EA送到寄存器REG中2.数据段寄存器DS传送指令格式:LDSREG,MEM

;REG[MEM]

;DS[MEM+2]

功能:将MEM中的两个字分别送到REG和DS中,REG通常用SI。3.附加段寄存器传送指令LES

格式:LESREG,MEM

;REG[MEM]

;ES[MEM+2]

功能:将MEM中的两个字分别送到REG和ES中,REG通常用DI。4.4算术运算类指令★该类指令包括加、减、乘、除四种基本运算指令,以及为适应进行BCD码运算而设置的各种校正指令共20条。

★五个类型:①加法指令;②减法指令;③乘法指令;

④除法指令;⑤十进制调整指令★数据形式:8/16位操作数;数据类型:无符号数/带符号数;★加/减法指令对无符号/带符号数可采用同一套指令;★乘/除法指令对无符号/带符号数则不能采用同一套指令。★算术运算指令的特点有:1.除土1指令外,都有两个操作数;只有源操作数可为立即数;必须有一个寄存器操作数,单操作数指令不能使用立即数。2.执行后,对状态标志产生影响,但±1指令不影响

CF标志。1.不带进位位CF加法指令:ADD

格式:ADDdst,src

;dstdst+src

2.带进位位CF加法指令:ADC

格式:ADCdst,src

;dst

dst+src+CF3.加1指令:INC

格式:INCdst

;dstdst+14.4.1加法和减法指令(影响FR)一、加法类指令:(3条)

immREGMEM4.4.1加法和减法指令(影响FR)二、减法类指令:(

5条)

1.不带借位减:SUB

格式:SUBdst,src

;dstdst-src2.带借位减:SBB

格式:SBBdst,src

;dstdst-src

-CF3.求补指令:NEG

格式:NEGdst

;dst0-dst4.减1指令:DEC

格式:DECdst

;dstdst-1immREGMEM4.4.1加法和减法指令(影响FR)二、减法类指令:(

5条)5.比较指令:CMP

格式:CMPdst,src

;dst-src,不回送结果,只影响FR

该指令常用在条件转移指令的前面,根据比较结果对FR中各标志状态的影响,来判断程序的走向是否产生转移。★

有符号数比较:分两种情况来讨论①同符号数比较,相减时不会产生溢出,OF=0;可判SF的状态:dst≥src则SF=0dst<src则SF=1★

无符号数比较:直接判CF状态dst≥src则CF=0;

dst<src则CF=1;②不同符号数比较

相减时可能产生溢出,要同时判SF和OF的状态

无溢出时OF=0:dst≥src则SF=0dst<src则SF=1

有溢出时OF=1:dst≥src则SF=1dst<src则SF=0

由此可以得出结论当:dst≥srcSF⊕OF=0

当:dst<srcSF⊕OF=1★

有符号数比较:分两种情况来讨论有符号数比较条件转移指令

JGdisp8;dst>srcJLdisp8;dst<srcJGEdisp8;dst≥srcJLEdisp8;dst≤src无符号数比较条件转移指令

JAdisp8;dst>srcJBdisp8;dst<srcJAEdisp8;dst≥srcJBEdisp8;dst≤src4.4.2符号扩展指令

也称为有符号数扩展专用指令,为隐含操作数,共

2条。1.字节扩展成字指令CBW

格式:CBW

功能:将AL中的符号位扩展到AH中,AX为带符号的16位数。2.字扩展成双字指令CWD

格式:CWD

功能:将AX中的有符号数的符号位扩展到DX中,DX,AX中的数为带符号的双字。4.4.3乘法和除法指令

一、乘法类指令★分为无符号数乘法指令和带符号数的乘法指令;★有两个操作数,被乘数隐含在

AL或AX中,运算规则如下图所示操作数AX乘积被乘数被乘数乘数乘数乘积AXALAX操作数DX8位8位16位16位16位32位1.无符号数乘法指令MUL

格式:MULsrc

;src为{MEM,REG}

运算结果只影响OF和CF;SF、ZF、AF状态不定。

4.4.3乘法和除法指令

一、乘法类指令★分为无符号数乘法指令和带符号数的乘法指令;★有两个操作数,被乘数隐含在AL或AX中,运算规则如下图所示操作数AX乘积被乘数被乘数乘数乘数乘积AXALAX操作数DX8位8位16位16位16位32位2.有符号数乘法指令IMUL

格式:IMULsrc

;src为{MEM,REG}★

当:CF=OF=0时:积的高半部分是低半部分符号位的扩展,全“0”或全“1”。★当:CF=OF=1时:积大于8位或16位,AH或DX也是乘积的有效值(含符号)4.4.3乘法和除法指令二、除法类指令★分为无符号数除法指令和带符号数的除法指令;★两个操作数,被乘数隐含在AX或AX、DX中,运算规则如下图:★除法指令的约定:除数只能是被除数的一半字长;★运算结果影响

FR寄存器的状态标志,但其状态是不定的。1.无符号数除法指令DIV

格式:DIVsrc

;src为{MEM,REG}余数商操作数除数除数余数被除数被除数操作数商AHDXDXAXAXAXAL4.4.3乘法和除法指令二、除法类指令★分为无符号数除法指令和带符号数的除法指令;★两个操作数,被乘数隐含在AX或AX、DX中,运算规则如下图:2.有符号数除法指令IDIV

格式:IDIVsrc

;src为{MEM,REG}

余数符号同商的符号

●字节相除时:被除数应扩展为16位

●字相除时:被除数应扩展成32位无符号数:对

AH清零有符号数:有专用指令无符号数:对DX清零有符号数:有专用指令余数商操作数除数除数余数被除数被除数操作数商AHDXDXAXAXAXAL4.4.4十进制调整指令

★调整指令的约定:被调整的BCD码运算结果应放在AL中,

调整后正确的BCD码自动返回AL中;★共有六种调整指令,均为隐含操作数。1.组合BCD码加法调整指令(不影响OF的状态)格式:DAA;应紧跟在ADD、ADC、INC指令之后2.组合BCD码减法调整指令(不影响OF的状态)格式:DAS

;应紧跟在SUB、SBB、DEC指令之后3.ASCII码加法调整指令(只影响AF和CF的状态)格式:AAA;应紧跟在ADD、ADC、INC指令之后●调整后AL中高四位为零;●调整后,如果AF=1,则有CF=1,并将:AH+1AH4.4.4十进制调整指令

★调整指令的约定:被调整的BCD码运算结果应放在AL中,

调整后正确的BCD码自动返回AL中;4.ASCII码减法调整指令(影响AF和CF)格式:AAS

;应紧跟在SUB、SBB、DEC指令之后●调整后AL=0,如果AF=1,则有:CF=1,AH-1AH5.非组合BCD码乘法调整指令(影响SF,ZF,PF)格式:AAM

;应紧跟在MUL指令之后●结果在AX中,AH和AL中分别为高位和低位非组合的BCD码6.非组合BCD码除法调整指令(影响SF,ZF,PF)格式:AAD

;应放在除法指令DIV之前●

AX中为两个非组合的BCD码(被除数)●商在AL中,余数在AH中。4.5位操作类指令(逻辑运算)

★8或16位数的逻辑运算与移位指令,操作是按位进行的;★由逻辑运算、移位、循环移位三小类指令组成,共13条。4.5.1逻辑运算指令

1.逻辑非:NOT

dst

;dstdst,但不影响FR2.逻辑与:ANDdst,src

;dstdst∧src3.逻辑或:ORdst,src

;dstdst∨src4.逻辑异或:XORdst,src

;dstdst⊕src5.测试指令:TESTdst,src

;dst∧src,只影响标志●

其它指令影响FR,但AF不定例:NOTBYTEPTR[BX]NOTWORDPTR[BX+SI]INCBYTEPTR[2100H]

PTR:属性操作符;

BYTE/WORD:属性类型MEMimmREG4.5.2移位指令

★目的操作数dst{REG,MEM};可以是字,也可以是字节1.算术左移指令SAL

格式:SALdst,CNT2.逻辑左移指令SHL

格式:SHLdst,CNT3.算术右移指令SAR

格式:SARdst,CNT4.逻辑右移指令SHR

格式:SHRdst,CNT逻辑右移算术右移算术/逻辑左移4.5.3循环移位指令

★移一位时,CNT=1;★当移动多位时,CNT应为CL,CL中的数为移位位数。1.循环左移指令ROL

格式:ROLdst,CNT2.循环右移指令ROR

格式:RORdst,CNT3.带CF循环左移指令RCL

格式:RCLdst,CNT4.带CF循环右移指令RCR

格式:RCRdst,CNT

dst(字/字节)dst(字/字节)dst(字/字节)dst(字/字节)ROLRCRRCLRORCFCFCFCF循环左移循环右移带CF循环左移带CF循环右移4.6串操作类指令

★串操作就是用一条指令实现对一串字符或数据的操作★使用该类指令时,有如下约定:●

源串在DS段中:SI指示源串首元素在数据段的有效地址;●

目的串在ES段中:DI指示目的串首元素在ES段的有效地址;●

每做一次串操作:自动修改指针SI和DI,使其指向下一个元素。当DF=0指针值增加字节串操作时字串操作时

用CLD指令使DF=0SI+1SISI+2SIDI+1DIDI+2DI

当DF=1指针值减小

用STD指令使DF=1SI-1SISI-2SIDI-1DIDI-2DI●

隐含使用了[SI]、[DI];及AX,AL作为dst或src。4.6.1基本串操作指令1.串传送指令MOVS

(不影响FR)

格式:MOVSB

;(ES∶DI)(DS∶SI)字节

MOVSW

;(ES∶DI)(DS∶SI)字●自动修改指针:SI±1

SI,DI±1DI字节传送

●自动修改指针:SI±2

SI,DI±2DI字传送●

src和dst均为存储器操作数。2.串比较指令CMPS(影响FR)

格式:

CMPSB

;(ES∶DI)-(DS∶SI)字节比较

CMPSW

;(ES∶DI)-(DS∶SI)字比较●自动修改指针:SI±1

SI,DI±1DI字节比较

●自动修改指针:SI±2

SI,DI±2DI字比较●src和dst均为存储器操作数。4.6.1基本串操作指令3.串搜索指令SCAS(影响FR)格式:SCASB

;AL-(ES∶DI)且DI±1DI

SCASW;AX-(ES∶DI)且DI±2

DI●src为AL/AX,dst为MEM,在扩展段;B为字节,W为字。4.串装入指令LODS(不影响FR)格式:LODSB;(DS∶SI)AL且SI±1

SI

LODSW

;(DS∶SI)AX且DI±2

DI●src为MEM,在数据段,dst为AL/AX;B为字节,W为字。5.串送存指令STOS(不影响FR)格式:STOSB;AL(ES∶DI)且DI±1

DI

STOSW;AX(ES∶DI)且DI±2

DI●src为AL/AX,dst为MEM,在扩展段;B为字节,W为字。4.6.2重复操作前缀★重复前缀用来控制紧跟在其后的字符串操作指令是否重复执行★

CX寄存器中的值为重复的次数★分为无条件重复和条件重复两类,共3条1.无条件重复前缀REP

格式:REP;用在MOVS、STOS、LODS指令前功能:对跟在REP后的串操作指令重复执行,执行一次串操作:

CX-1

CX,当CX≠0时,重复执行串操作;当CX=0时,停止执行串操作,转向执行下一条指令。●用于存储器中数据块的搬家4.6.2重复操作前缀2.相等重复前缀REPE格式:REPE;用在CMPS、SCAS指令前功能:对跟在REPE后的串操作指令按条件重复执行条件为:

CX≠0且ZF=1●串比较或扫描后,CX-1

CX,当满足上述条件,重复操作;●当ZF=0或CX=0时,停止重复操作,执行下一条指令。●

用于比较两个串是否相同或串中的所有元素都相同。4.6.2重复操作前缀3.不相等重复前缀REPNE

格式:REPNE/REPNZ

;用在CMPS、SCAS指令前功能:对跟在REPNZ后的串操作指令重复执行条件为:

CX≠0且ZF=0●

串比较或扫描后,CX-1

CX,当满足上述条件,重复操作;●当ZF=1或CX=0时,停止重复操作,执行下一条指令。●用于比较两个串中的元素都不相等或在串中查找某个元素。4.7控制转移类指令★控制转移(ControlJump)类指令的功能是改善程序执行顺序。

★指令执行的顺序是由代码寄存器

CS和指令指针

IP的内容确定,

执行程序时,每取出、执行一字节指令,IP的内容将自动加1,

指向下一指令字节,以实现程序的循序执行。如果改变

CS和

IP

的值或仅改变

IP的值,程序的执行循序就会发生改变。★控制转移类指令就是通过改变CS、IP,从而实现对程序流向的控制。因此,控制转移指令中要给出转移的目标地址。

8086指令系统共有五类转移指令:无条件转移、条件转移、循环控制、过程调用和返回、中断。★除中断类指令外,其它类指令均不影响标志位。4.7控制转移类指令——转移地址的寻址方式

控制转移指令的转移地址寻址方式与操作数寻址方式是不同★控制转移指令根据转移的目标地址处于当前段内或段外,可分为段内转移和段间转移。●

段内转移称“近转移”,目标地址为“NEAR”类型;需改变IP的值。

段间转移称“远转移”,目标地址为“FAR”类型。不但要改变IP的值,同时还要给一个新的代码段值,即改变CS的值。★段内和段间转移指令按转移地址的寻址方式,又可分为两种:“直接寻址”和“间接寻址”。

★控制转移指令的转移地址寻址方式有以下四种:

1.段内直接寻址;2.段内间接寻址;

3.段间直接寻址;4.段间间接寻址;4.7控制转移类指令——转移地址的寻址方式1.段内直接寻址:指令中给出了8/16位的相对位移量,指令转向的有效地址为:

当前IP的内容+8/16位相对位移量IP●

当位移量为8位时,称段内直接短转移;

●当位移量为16位时,称段内直接近转移。2.段内间接寻址:指令中指定一个16位寄存器或存储器字单元的内容做为转移的

有效地址,直接取代IP的内容。3.段间直接寻址:指令中直接给出了转向目标的段基址和段内偏移地址,用此地址分别取代CS和IP中的内容,完成从当前段向另一个段的转移4.段间间接寻址:指令中给出一个存储单元地址,用该地址所指的两个相邻字单元的内容“32位”来取代CS和IP中的内容,从而实现段间转移。4.7.1无条件转移指令★无条件转移指令不影响标志位★根据转移距离的远近,JMP指令又分成下面几种类型:基本格式:JMPtarget

;target转移的目标地址操作数

功能:无条件转移到指令给出的目标地址去取指令并执行。1.段内直接短转移格式:JMPdisp8

;IPIP+disp8

功能:把当前的IP值与disp8代表的8位偏移量之和送入IP,使程序的运行发生转移。●

disp8:8位带符号数,因此转移的范围以本指令为中心在:-128~+127字节内。通常用标号(标号地址)代替。●标号地址:即符号地址,以字母起头,代替8位带符号的偏移量。无条件转移指令应用举例例:在存储器2002单元开始放有两个无符号的字A和B,比较其大小。

A>B,AX=1;A=B,AX=0;A<B,AX=-1;MOVBX,2002HMOVAX,[BX]ADDBX,2CMPAX,[BX]JAGMJBLMMOVAX,0JMPNEXT;GM:MOVAX,1JMPNEXT

LM:MOVAX,–1NEXT:HLT2.段内直接近转移

格式:JMPdisp16

;IPIP+disp16功能:把当前的IP值与disp16代表的16位偏移量之和送入IP,使程序的运行发生转移。●

disp16:16位带符号数,因此转移的范围以本指令为中心在:-32768~+32767字节范围内,可转到段内任一地址。

以上两种转移指令,均属相对寻址(转移)方式。3.段内间接转移格式:JMPREG/MEM

;IPREG/MEM功能:把指令中给定的16位寄存器内容送IP;或通过指令中给出的内存单元的寻址方式,将该单元中的16位内容送到IP中,使程序运行发生转移。例如:JMPBX;IPBXJMPWORDPTR[BX]

;IP[BX]字送

IP5.段间间接转移格式:JMPDWORDPTR[MEM]功能:根据指令中的MEM寻址方式,将指定内存单元中的双字,第一个字送IP,第二个字送CS,使程序运行发生转移。★以上三种转移指令,均属绝对寻址(转移)方式。例如:JMPDWORDPTR[BX+SI]

若:当前CS=3000H,DS=2000H,BX=1000H,SI=0050H

内存单元:(21050H~21053H)=00H,66H,00H,40H指令执行后:IP=6600H,CS=4000H,转移的目标地址=46600H4.段间直接转移格式:JMPaddr32

;IP、CSaddr32功能:将指令中提供的两个16位数地址分别送到IP和CS,即把第一个地址送IP,第二个地址送CS,使程序运行发生转移。●

addr32:16位位移地址和16位段地址组成的32位地址4.7.2条件转移指令

★指令对状态标志位进行测试:当满足要求的条件时,IP

IP+target;则发生转移;不满足要求的条件时,则顺序执行下一条指令。★

条件转移指令共有四种类型:

1.单个标志位的条件转移;2.无符号数比较的条件转移;

3.有符号数比较的条件转移;4.测试CX=0的条件转移;★

属段内直接短转移指令,指令中的标号为8位带符号的偏移量。目的地址在本指令的下一条指令地址的:

-128~+127

个字节的范围之内★条件转移指令也都不影响标志位。★如转移的范围超出此范围,可在条件转移指令后加一条无条件转移指令来实现:即由条件转移指令转到跟在其后的无条件转移指令,借助于无条件转移指令实现整个地址空间的转移。4.7.2条件转移指令一.单个标志位的条件转移指令★

当条件成立时,发生转移;即:IPIP+disp8

1.测试ZF:JZ/JEdisp8

;ZF=1结果为零,则转移

JNZ/JNEdisp8

;ZF=0结果不为零,则转移2.测试CF:JCdisp8

;CF=1有进位/借位,则转移

JNCdisp8

;CF=0无进位/借位,则转移3.测试SF:JSdisp8

;SF=1结果为负,则转移

JNSdisp8

;SF=0结果为正,则转移4.测试OF:JOdisp8

;OF=1结果有溢出,则转移

JNOdisp8

;OF=0结果无溢出,则转移5.测试PF:JPdisp8

;PF=1结果中1的个数为偶数,则转移

JNPdisp8

;PF=0结果中1的个数为奇数,则转移4.7.2条件转移指令二.两个无符号数比较转移指令:应紧跟在CMP指令后1.高于或不低于等于:JA/JNBE

disp8

;dst>src则转移2.高于等于或不低于:JAE/JNB

disp8

;dst≥src则转移3.低于或不高于等于:JB/JNAE

disp8

;dst<src则转移4.低于等于或不高于:JBE/JNA

disp8

;dst≤src则转移1.大于或不小于等于:JG/JNLE

disp8

;dst>src则转移2.大于等于或不小于:JGE/JNL

disp8

;dst≥src则转移3.小于或不大于等于:JL/JNGE

disp8

;dst<src则转移4.小于等于或不大于:JLE/JNG

disp8

;dst≤src则转移三.两个有符号数比较转移指令:应紧跟在CMP指令后四.测试CX=0的条件转

温馨提示

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

评论

0/150

提交评论