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

下载本文档

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

文档简介

第4章指令系统

4.18086/8088指令系统概述4.28086/8088指令系统4.3从80286到Pentium系列微处理器的指令系统4.18086/8088指令系统概述

4.1.18086/8088指令系统的特点指令系统的兼容性特点指令格式的灵活性

可构成多处理机系统寻址方式的多样性

多类型数据处理

4.1.28086/8088指令的格式指令操作码(描述指令的操作功能)操作数(指明指令的操作对象)立即数寄存器操作数存储器操作数例如:MOVAX,BX

操作码

操作数

4.1.28086/8088指令的格式

操作数在内存数据区中,由指令中的操作数部分给出此操作数地址的计算方法。

大部分操作数的段基址由数据段寄存器DS的内容来确定;段内偏移量由指令的操作数部分规定,通常称它为有效地址,用EA表示。物理地址=段基址+段内偏移量

=段寄存器×16+段内偏移量

4.1.28086/8088指令的格式8086/8088的指令长度可在1~6B之间变化,格式如下:

操作码隐含操作数的单字节指令操作码寄存器寻址的单字节指令

操作码二字节指令

操作码三字节指令

操作码四字节指令

操作码五字节指令REG

MOD

MOD

MOD

MOD

D/O

D/OL

OL

D/OH

OH

D

操作码

OL

DL

MOD

OH

DH六字节指令其中:REG---寄存器

D-------数据

O-------偏移量

L--------低8位

H--------高8位后续字节可以根据指令的不同而取舍。

4.1.28086/8088指令的格式

通常来说指令的第1个字节为操作码,第2个字节规定操作数的寻址方式,后续字节指出的是存储器操作数的8/16位偏移量或8/16位立即数。注意其中操作码和MOD字节的格式如下:7654321076543210操作码MODDWREGR/M

通常操作码占用第一个字节的7~2位,但有些指令的操作码占用第一字节的7~1位,甚至增加第二字节的5~3位作为扩展操作码。D指示操作方向。D=1,REG为目的操作数;D=0,R/M为目的操作数,其中R代表寄存器,M代表存储器。即目的操作数在格式中有两个选择,由D决定。W指示操作数宽度。W=1,操作数是16位;W=0,操作数是8位。MOD用来区分是寄存器寻址,还是存储器寻址。MOD=00,则说明指令为存储器寻址方式,无偏移量;MOD=01,为存储器寻址方式,8位偏移量;MOD=10,为存储器寻址方式,16位偏移量;MOD=11,为寄存器寻址方式。

REG指示参加操作的寄存器编码,R/M受模式字段的控制,指出如何计算指令的有效地址EA。7654321076543210

操作码

MODD

W

REG

R/M

4.1.28086/8088指令的格式

4.1.28086/8088指令的格式【例4-2】ADD[BX+SI+0100H],AX;该指令生成的机器;码是01800001H

4.1.28086/8088指令的格式

下面是根据上述指令格式生成计算机指令代码的两个例子:【例4-1】MOVAL,[BP];该指令生成的机器码是8A4600H操作码MODDWREGR/M

1000100110000

110

8b偏移量

00000000操作码MODDWREGR/M

0000001001000000偏移量低

00000000偏移量高

00000001AX(AH,AL)编码是000计算有效地址的方式练习1:MOVSP,BX1000101111100011如果将BX的编码送到REG,则D=0,表示数据从BX传出,R/M填入另一个寄存器SP的编码100,结果为:1000100111011100

1.立即寻址立即寻址的操作数是一个立即数,它直接包含在指令中。立即寻址主要用于给存储器或寄存器赋初值。…操作码立即数低字节立即数高字节…高址0AH08HAHALAX4.1.3寻址方式【例4-3】MOVAX,080AH,其寻址如图4-2所示。图4-2立即寻址示意图

字(16位)(无论是数据还是指令)在内存中存放顺序:低字节在前,高字节在后。…低字节高字节…高址寄存器寻址操作数在内部寄存器中。对16位操作数,寄存器可以是AX、BX、CX、DX、SI、DI、SP或BP,而对8位操作数,寄存器可以是AH、AL、BH、BL、CH、CL、DH、DL。AXBX图4-3寄存器寻址示意图2.【例4-4】MOVAX,BX执行过程如图4-3所示。直接寻址操作数的有效地址(EA)直接包含在指令中,它与操作码一起存放在代码段中。操作数存放的物理地址=DS×16+16位地址偏移量。【例4-5】MOVAX,[22A0H],设DS=3000H,执行过程如图4-4所示。322A0H322A1H32H48H…操作码偏移量A0H偏移量22H……代码段数据段AX图4-5直接寻址方式示意图

3000+)22A0

322A0HDS3.

48

32

寄存器间接寻址寄存器间接寻址情况一若以SI、DI、BX间接寻址,操作数通常在现行数据段中,即DS中的值左移四位加上SI、DI或BX中的有效地址即为操作数的物理地址。【例4-7】MOVAX,[SI]执行过程如图4-5所示。4.31000H31001H50HA0H

3000+)SI

1000

31000HDS

A0

50

………代码段数据段AX图4-5寄存器间接寻址方式示意图操作码寄存器间接寻址寄存器间接寻址情况二若以BP间接寻址,则操作数在堆栈段中,即操作数的物理地址位堆栈段寄存器SS中的值左移四位与BP相加。【例4-8】MOVAX,[BP]执行过程如图4-6所示。4.42000H42001HB0H62H

4000+)BP

2000

42000HSS

62

B0

………代码段堆栈段AX图4-6以BP间接寻址方式示意图操作码5.基址寻址【例4-9】MOVAX,COUNT[BP]执行过程如图4-7所示。30H20H44100H44101HEA=BXBP+8位偏移量16位偏移量

4000+)BP2000

44100HSS+)COUNT2100

20

30

…操作码偏移量00偏移量21……代码段堆栈段图4-7基址寻址方式示意图AX6.变址寻址【例4-10】MOVAX,COUNT[SI]执行过程如图4-8所示。30H20H35000H35001HEA=SIDI+8位偏移量16位偏移量

3000+)SI2000

35000HDS+)COUNT3000

20

30

…操作码偏移量00偏移量30……代码段数据段图4-8变址寻址方式示意图AX7.基址加变址寻址【例4-11】MOVAX,[BX+SI+250H]执行过程如图4-9所示。30H20H33250H33251HEA=BXBP+8位偏移量16位偏移量SIDI+

3000+)BX1000

33250HDS+)SI2000+)0250

20

30

…操作码偏移量50偏移量02……代码段数据段图4-9基址加变址寻址方式示意图操作码AX8.数据串寻址●数据串寻址用于数据串操作指令。【例4-12】MOVSB执行后:[DI]←[SI]SI←SI±1DI←DI±19.I/O端口寻址端口寻址I/O直接端口寻址间接端口寻址由指令直接给出输入输出设备的端口地址。规定端口地址为8位,能寻址256个端口。由寄存器DX给出输入输出设备的端口地址。由于DX是16位,因此能寻址64K个端口。【例4-13】INAL,20H;将地址为20H的外设的内容读入AL中

OUTDX,AL;将AL中内容输出给以DX的内容为地址的外设10.隐含寻址●这种寻址方式中,操作数是隐含的。指令中没有明显给出操作数。【例4-14】AAA即对AL中的内容进行十进制加法调整,并把调整后的结果放入AH和AL中。这条指令的隐含操作数是AH和AL。8086指令系统4.2.1数据传送指令指令类型指令功能指令书写格式通用数据传送字节或字传送字压入堆栈字弹出堆栈字节或字交换换码指令MOV目标,源PUSH源POP目标XCHG目标,源XLAT目标地址传送装入有效地址装入DS寄存器装入ES寄存器LEA目标,源LDS目标,源LES目标,源标志位传送将FR低字节装入AH寄存器将AH内容装入FR低字节将FR内容压栈从堆栈中弹出一个字给FRLAHFSAHFPUSHFPOPF数据传送指令4.2通用数据传送指令通用数据传送指令MOV指令堆栈操作指令数据交换指令换码指令压栈指令出栈指令1.(1)MOV指令段寄存器DSESSS

存储器

立即数通用寄存器AXBXCXDXSIDIBXBP图4-10数据传送方向示意图指令格式:MOVOP目,OP源指令功能:将源操作数传送到目的操作数中。OP目表示目的操作数,可以是寄存器、存储器。OP源表示源操作数,可以是寄存器、存储器和立即数。

①压栈指令指令格式:PUSHOP指令功能:将寄存器或存储器单元的内容送入堆栈OP为16位的寄存器或存储器操作数。操作过程:1)SP←SP-1;[SP]←OPH(操作数高字节)

2)SP←SP-1;[SP]←OPL(操作数低字节)(2)堆栈操作指令指令格式:POPOP指令功能:将SP所指向的堆栈栈顶的一个字弹到寄存器或存储单元中。OP为16位操作,可以是寄存器或存储器操作数。操作过程:1)OPL←[SP];SP←SP+12)OPH←[SP];SP←SP+1

②出栈指令(2)堆栈操作指令例:假设(AX)=2107H,执行

PUSHAX********(SP)

PUSHAX执行前(SP)

********07H21H低地址

高地址PUSHAX执行后进栈方向(SP)

********07H21HPOPBX执行前(SP)

********07H21H低地址

高地址

POPBX执行后

(BX)=2107H例:POPBX出栈方向例:PUSHDSSUBAX,AXPUSHAX…………RET例:PUSHAXPUSHBXPUSHCX……;其间用到AX、BX、CXPOPCX;后进先出

POPBXPOPAX指令格式:XCHGOP1,OP2指令功能:实现OP1和OP2内容的相互交换。操作数为通用寄存器或存储器。【例4-20】XCHGAL,BL;AL与BL进行字节互换

XCHGBX,CX;BX与CX进行字互换⑶数据交换指令●交换可在通用寄存器之间、通用寄存器和存储器之间进行。段寄存器不能作为本指令的操作数,而且两个存储单元之间不能直接交换数据。注意指令格式:XLAT指令功能:将BX的内容和AL的内容相加作为有效地址EA,

在一个表格中找出此单元中的内容并传送至AL中。⑷换码指令●使用此指令时,应首先在数据段中预置一个表格。该表格的最大长度不能超过256字节。表的起始地址的偏移量应事先装入BX寄存器,AL中存放查找对象在表中地址与表的起始地址相差的字节数。目标地址传送指令(1)LEA指令指令格式:LEAOP目,OP源指令功能:将源操作数的有效地址EA送到目的操作数。【例4-22】LEABX,[BP+SI];BP+SI→BXLEADI,TABLE;取TABLE的有效地址送入DI●本指令处理的是变量的地址(偏移量),不是变量的值。它等效于传送有效地址的MOV指令,但MOV指令必须在变量名前使用OFFSET操作符。2.注意2.目标地址传送指令【例4-24】LDSDI,[2130H];将2130H和2131H单元的内容送DI

将2132H和2133H单元的内容送DS指令格式:●

LDSOP目,OP源指令功能:●把4个字节地址指针(包括一个段地址和一个偏移地址)从源操作数指定的4个存储单元取出,低地址的两字节送目的操作数,高地址的两字节送

DS段寄存器。LDS指令(2)LES指令指令格式:●

LESOP目,OP源指令功能:●本指令与LDS指令的操作基本相同,所不同的是将源操作数4个字节中高地址的两字节传送到ES段寄存器而不是DS段寄存器。(3)标志寄存器传送指令3.●读标志指令指令格式:LAHF指令功能:将标志寄存器低8位→AH。●设置标志指令指令格式:SAHF指令功能:将AH→标志寄存器低8位。●

PUSHF指令指令格式:PUSHF指令功能:将16位标志寄存器入栈,同时修改栈指针。●POPF指令指令格式:POPF指令功能:将栈顶的一个字送标志寄存器,同时修改栈指针SP。1.4.2.2算术运算指令加法指令(2)带进位的加法指令指令格式:ADCOP目,OP源指令功能:●将源操作数、目的操作数及CF的值相加,结果保留在目的操作数中,并根据结果设置标志。(1)不带进位的加法指令指令格式:ADDOP目,OP源指令功能:●将源操作数和目的操作数相加,结果保留在目的操作数中,并根据结果设置标志。(3)加1指令指令格式:INCOP指令功能:●将操作数加1,再送回该操作数。这条指令一般用于循环程序的指针修改。操作数可以是8位/16位通过寄存器或存储器,不能为立即数。减法指令2.(2)带借位的减法指令指令格式:SBBOP目,OP源指令功能:●将目的操作数减去源操作数再减去借位标志CF的现行值,结果送回到目的操作数中,并根据结果设置标志。

(1)不带借位的减法指令指令格式:SUBOP目,OP源指令功能:●将目的操作数减去源操作数,结果送回到目的操作数中,并根据结果设置标志。(3)减1指令指令格式:DECOP指令功能:●将操作数的值减1后送回源操作数中,根据结果置标志位。操作数可以是8位/16位通过寄存器和存储器操作数,不能为立即数。2.减法指令(4)取补指令指令格式:NEGOP指令功能:●将操作数取补后送回原操作数。操作数可以是8位/16位通用寄存器或存储器操作数,不能为立即数。(5)比较指令指令格式:CMPOP目,OP源指令功能:●将目标操作数与源操作数相减,不回送结果,

只根据结果置标志位。(1)无符号数乘法指令指令格式:MULOP指令功能:●完成两个不带符号的8位/16位二进制数的乘法运算。乘法指令●指令中给出的操作数是乘数,它可以是8位/16位通用寄存器及存储器;另一操作数被乘数隐含在AL/AX中,乘积存放在AH:AL或DX:AX中,如图4-14所示。AL8位操作数AHAL×AX16位操作数DXAX×图4-14乘法运算示意图3.对于字节乘法,当AH为AL的符号扩展时,CF=OF=0,否则CF=OF=1;对于字乘法,当DX为AX的符号扩展时,CF=OF=0,否则CF=OF=1。(2)带符号数乘法指令指令格式:IMULOP指令功能:●完成两个带符号的8位/16位二进制数的乘法运算。有关IMUL的其它约定与MUL相同。3.注意乘法指令除法指令(1)无符号数除法指令指令格式:DIVOP指令功能:●完成两个不带符号的二进制数的除法运算。指令中给出的操作数是除数,它可以是8位/16位通用寄存器及存储器;被除数隐含在AX(字节除)或

DX、AX(字除法)中。操作过程:●字节除法AX/OP→ALAXMODOP→AH

●字除法(DX、AX)/OP→AX

(DX、AX)MODOP→DX4.4.(2)带符号数除法指令●本指令在完成字节相除时最大的商为+127(7FH),最小的商为-128(80H);在完成字相除时最大的商为+32767(7FFFH),最小的商为-32768(8000H)。若商超出此范围,则将产生一个类型0的中断。除法指令指令格式:IDIVOP指令功能:●完成两个带符号的二进制数的除法运算。商的符号根据代数规则确定,余数的符号与被除数相同。操作数的规定同DIV指令。注意这两条符号扩展指令常常放在IDIV指令之前,对标志位没有影响。4.(3)符号扩展指令2)字扩展指令指令格式:CWD指令功能:●将AX中的数的符号扩展到DX中。若AX<8000H,则0→DX;若AX≥8000H,则OFFFFH→DX。注意除法指令(3)符号扩展指令指令格式:CBW指令功能:●将AL中的单字节数的符号扩展到AH中。若AL<80H,则0→AH;若AL≥80H,则OFFH→AH。1)字节扩展指令例:x、y、z均为双精度数,分别存放在地址为X,X+2;

Y,Y+2;Z,Z+2的存储单元中,用指令序列实现

w

x+y+24-z,并用W,W+2单元存放wMOVAX,XMOVDX,X+2ADDAX,YADCDX,Y+2;x+yADDAX,24ADCDX,0;x+y+24SUBAX,ZSBBDX,Z+2;x+y+24-zMOVW,AXMOVW+2,DX;结果存入W,W+2单元练习:x,y,z,v均为16位带符号数,计算

(v-(x*y+z–540))/xMOVAX,XIMULY;x*y→(DX,AX)MOVCX,AXMOVBX,DXMOVAX,ZCWD;Z→(DX,AX)ADDCX,AXADCBX,DX;x*y+z→(BX,CX)SUBCX,540SBBBX,0;x*y+z-540MOVAX,VCWD;V→(DX,AX)SUBAX,CXSBBDX,BX;v-(x*y+z-540)IDIVX;(v-(x*y+z-540))/x→(AX)

余数→(DX)5.十进制运算调整指令问题的提出:19压缩BCD:00011001

2700100001+110

+08+00001000

(00100111)BCDAF=1数字的ASCII码是一种压缩的BCD码DIGITASCII BCD0 30H 001100001 31H 001100012 32H 00110010… … …9 39H 00111001非压缩BCD码如何转换为ASCII码?如果AL中是非压缩BCD,则ORAL,30H(ADDAL,30H),将AL中非压缩BCD转换为ASCII。(1)指令格式:AAA指令功能:对AL中的由两个非组合BCD码相加所得的结果进行调整,并将调整后的结果存于AX中。操作过程:如果AL的低4位表示的数大于9或者AF=1,则将AL加6,AH加1,将AF和CF置1,清除AL的高四位;否则清除AL的高4位以及AF和CF标志。非组合BCD码的加法调整指令5.十进制运算调整指令(2)指令格式:DAA指令功能:对AL中的由两个组合BCD码相加所得的结果进行调整,并将调整后的结果存于AL中。操作过程:如果AL的低4位大于9或者AF=1,则AL+6→AL,

并置AF=1;如果AL的高4位大于9或者CF=1,

则AL+60H→AL,并置CF=1。以上这两条指令使用时必须紧跟在ADD或ADC指令之后。而且,这两条指令只能对AL中的结果进行调整,因此对多字节的十进制数运算,只能从低字节开始逐个字节的进行运算和调整。组合BCD码的加法调整指令注意(3)指令格式:AAS指令功能:对AL中的由两个非组合BCD码相减所得的结果进行调整,并将调整后的结果存于AL中。操作过程:调整方法与AAA类似,不同的只是当AL的低

4位表示的数大于9或者AF=1时,将AL-6→AL,

AH-1→AH,并将AF和CF置1,清除AL的高四位。5.十进制运算调整指令非组合BCD码的减法调整指令使用AAS、DAS指令必须紧跟在SUB或SBB指令之后。(4)指令格式:DAS指令功能:对AL中的由两个组合BCD码相减所得的结果进行调整,并将调整后的结果存于AL中。操作过程:调整方法与DAA类似,不同的只是当AL的低4位大于9或者AF=1,则AL-6→AL,并置AF=1;而当AL的高4位大于9或者CF=1时,则AL-60H→AL,并置CF=1。5.十进制运算调整指令注意组合BCD码的减法调整指令(5)指令格式:AAM指令功能:对AX中的由两个非组合BCD码相乘所得的结果进行调整,并将调整后的结果存于AX中。操作过程:将AL中的内容除以10,并将除得的商和余数分别送AH和AL。5.十进制运算调整指令本指令必须紧跟在MUL指令之后使用。非组合BCD码的乘法调整指令注意本指令必须在DIV运算前使用。(6)指令格式:AAD指令功能:把AX中的由两个非组合BCD码进行调整,然后可按DIV指令实现两个非组合BCD码的除法运算。操作过程:将AH中的内容乘以10与AL中的内容相加,结果送AL中,再将AH清零。5.十进制运算调整指令注意非组合BCD码的除法调整指令压缩BCD运算举例:(1)MOVAL,BCD1;BCD1=34H

ADDAL,BCD2;BCD2=59H,(AL)=8DH

DAA;8DH+06H=93H

MOVBCD3,AL;BCD3=93H(2)MOVAL,BCD1;BCD1=34H

SUBAL,BCD2;BCD2=59H,(AL)=0DBH

DAS;0DBH-60H-06H=75H

MOVBCD3,AL;BCD3=75=-25(10n’补码)非压缩BCD运算举例:(1)MULBL;(AX)=(AL)×(BL)=08×09

AAM;(AL)/0AH=48H/0AH→0702(2)AAD;(AX)→(AH)×0AH+(AL)=48H

DIVBL;(AL)=(AX)/(BL)=48H/4=12HAAM;(AL)/0AH=12H/0AH=0108课堂练习:已知DCB1DB34H,12HDCB2DB78H,56H DCB3DB2DUP(?)是压缩BCD码数,求BCD1+BCD2,结果送DCB3。MOVAL,DCB1ADDAL,DCB2DAAMOVDCB3,ALMOVAL,DCB1+1ADCAL,DCB2+1DAAMOVDCB3+1,AL逻辑运算指令1.逻辑与运算指令指令格式:ANDOP目,OP源指令功能:对两个操作数按位进行与操作,结果回送到目标操作数。2.逻辑或运算指令指令格式:OROP目,OP源指令功能:对两个操作数进行逻辑或运算,结果回送到目标操作数。4.2.34.逻辑非运算指令指令格式:NOTOP指令功能:对操作数逐位取反后回送到原处。5.测试指令指令格式:TESTOP目,OP源指令功能:将目标操作数与源操作数进行逻辑与运算,不回送结果,只根据结果置标志位。指令格式:XOROP目,OP源指令功能:对两个操作数进行逻辑异或运算,结果回送到目标操作数。3.逻辑异或运算指令例:屏蔽AL的第0、1两位

ANDAL,0FCH例:置AL的第5位为1

ORAL,20H

例:使AL的第0、1位变反

XORAL,3例:测试某些位是0是1

TESTAL,1JZEVEN

********

OR00100000**1*****

******01XOR00000011

******10

********

AND11111100******00

********

AND000000010000000*移位指令1.一般移位指令(1)逻辑左移指令指令格式:SHLOP目,计数值指令功能:将操作数的内容左移,每移一次,最低位补0,最高位→CF。(2)逻辑右移指令指令格式:SHROP目,计数值指令功能:将操作数的内容右移,每移一次,最高位补0,

最低位→CF。4.2.41.

(3)算术左移指令指令格式:SALOP目,计数值指令功能:同SHL(逻辑左移指令)(4)算术右移指令指令格式:SAROP目,计数值指令功能:将操作数的内容右移,每移一次,最高位的值不变,最低位CF→。一般移位指令(1)循环左移指令指令格式:ROLOP目,计数值指令功能:将操作数的内容循环左移,每移一次,最高位移入CF,同时移入最低位。(2)循环右移指令指令格式:ROROP目,计数值指令功能:将操作数的内容循环右移,每移一次,最低位移入CF,同时移入最高位。循环移位指令2.(4)带进位的循环右移指令指令格式:RCROP目,计数值指令功能:包括进位位在内,一起循环右移,每移一次,最低位移入CF,原CF移入最高位。2.循环移位指令(3)带进位的循环左移指令指令格式:RCLOP目,计数值指令功能:包括进位位在内,一起循环左移,每移一次,最高位移入CF,原CF移入最低位。注意:

*OPR可用除立即数以外的任何寻址方式

*CNT=1,SHLOPR,1CNT>1,MOVCL,CNTSHLOPR,CL;以SHL为例*条件标志位:

CF=移入的数值

OF=1

CNT=1时,最高有效位的值发生变化

OF=0

CNT=1时,最高有效位的值不变对于移位指令:

SF、ZF、PF根据移位结果设置,AF无定义

对于循环移位指令:

不影响

SF、ZF、PF、AF逻辑左移SHLOPR,CNT逻辑右移SHROPR,CNT算术左移SALOPR,CNT(同逻辑左移)算术右移SAROPR,CNT

CF

0

0

CFCF循环左移ROLOPR,CNT循环右移ROROPR,CNT带进位循环左移RCLOPR,CNT带进位循环右移RCROPR,CNTCF

CFCFCF例:(AX)=0012H,(BX)=0034H,把它们装配成(AX)=1234H

例:(BX)=84F0H(1)(BX)为无符号数,求

(BX)/2

SHRBX,1

;(BX)=4278H(2)(BX)为带符号数,求

(BX)×2

SALBX,1

;(BX)=09E0H,OF=1(3)(BX)为带符号数,求

(BX)/4MOVCL,2 SARBX,CL;(BX)=0E13CHMOVCL,8ROLAX,CLADDAX,BXMOVCH,4;循环次数MOVCL,4;移位次数NEXT:ROLBX,CLMOVAX,BXANDAX,0FHPUSHAXDECCHJNZNEXT00080004000F

0000

(SP)(3)(BX)=84F0H,把

(BX)

中的16位数每4位压入堆栈字符串操作指令

串是存储区中的一个数据序列。串操作是指对串中的每个字或字节数据做相同的操作。串操作分为串传送、串搜索、串比较及串存取等。所有基本的串操作有如下共同点:4.2.5(1)用寄存器SI寻址源操作数,且假定源操作数是在现行的数据段区域中,用寄存器DI寻址目标操作数,且假定目标操作数是在现行的附加段区域中。(2)每执行一次串操作后自动修改指针SI、DI。若方向标志DF=0,则每次操作后SI和DI自动加1或加2;若DF=1,则每次操作后SI和DI自动减1或减2。(3)串长存放在CX中。字符串传送指令指令格式:MOVSOP目,OP源

MOVSBMOVSW指令功能:从源串中取一个字节/字,传送到目标串中,并自动修改SI/DI,使之指向下一元素。字符串传送指令前可以加重复前缀REP,表示每传送完

一个元素使CX减1,直到CX=0。使用MOVS指令时,必须说明操作数的数据类型,这样才能确定是字节传送,还是字传送。1.注意指令格式:CMPSOP目,OP源

CMPSBCMPSW指令功能:取源串一个字节/字,与目标串的一个字节/字相减,不回送结果,根据结果置标志位,并修改串地址指针,使之指向下一个字节/字单元。字符串比较指令2.指令格式:SCASOPSCASBSCASW指令功能:将AL/AX寄存器中的关键字,减去由DI所指向的目标串中的元素,不回送结果,根据结果置标志位,并修改DI寄存器内容,指向下一元素。执行这类指令前,必须先将要查找的关键字送AL/AX中,串的首偏移地址送DI,串长送CX。字符串搜索指令3.注意指令格式:LODSOPLODSBLODSW指令功能:将源串中SI所指向的存储单元中的一个字节/字取到AL/AX寄存器中,并修改SI的内容,指向下一字节/字单元。取字符串和存字符串指令(1)取字符串指令4.指令格式:STOSOPSTOSBSTOSW指令功能:将AL/AX中的一个字节/字,存到由DI所指向的目标串的存储单元,并修改DI的内容,指向下一个字节/字的存放单元。4.取字符串和存字符串指令(2)LODS指令一般不使用重复前缀,STOS指令常使用REP前缀。存字符串指令注意1.

(1)JMP指令指令格式:JMPSHORT,OP指令操作:IP←IP+8位偏移量。1)段内直接短转移指令格式:JMPNEARPTROP指令操作:IP←IP+16位偏移量.2)段内直接近转移4.2.6转移指令无条件转移指令

NEAR常可省略,使用场合最多OP一般是语句标号也即是目的地址,故称直接转移OP目标地址距离现在IP在-128至+127之间。关键字SHORT。(1)指令格式:JMPWORDPTROP或JMPOP4)段内间接转移指令格式:JMPFARPTROP3)段间直接转移JMP指令目标段地址不同于现段,同时修改CS和IP。其中FAR是关键字。例如:JMPWORDPTR[BX][SI]

或JMPBX。目标地址在存储器和寄存器中,故称间接转移。常用于多分支程序,事先将多个目标地址存入存储指定位置,根据条件改变间接转移指令中的变址寄存器的值即可实现多分支。指令格式:JMPDWORDPTROP5)段间间接转移使用同前,注意目标地址为32位,和DWORD关键字。(2)调用和返回指令1)指令格式:CALLOP指令功能:将CALL指令的下一条指令的地址IP或

IP与CS压栈,新的目标地址装入IP或IP

与CS中,控制程序转移到由OP指明入口的子程序。操作过程:A.当前CS压栈,OP所在段地址→CS,SP-2→SPB.当前SP压栈,OP的偏移地址→IP,SP-2→SP调用指令(2)调用和返回指令2)返回指令指令格式:RET指令功能:通常作为一个子程序的最后一条指令,用以返回到调用子程序的断点处,即从堆栈弹出断点送IP

和CS。操作过程:A.从栈顶弹出一个字给IP,SP+2→SPB.从栈顶弹出一个字给CS,SP+2→SP条件转移指令

高于/不低于也不等于转移JA/JNBE目标标号高于或等于/不低于转移JAE/JNB目标标号低于/不高于也不等于转移JB/JNAE目标标号低于或等于/不高于转移JBE/JNA目标标号大于/不小于也不等于转移JG/JNLE目标标号大于或等于/不小于转移JGE/JNL目标标号小于/不大于也不等于转移JL/JNGE目标标号小于或等于/不大于转移JLE/JNG目标标号

2.其中,A表示“高于”,B表示“低于”,G表示“大于”,L表示“小于”,N表示“不”,E表示“等于”。注意进位为1转移JC目标标号进位为0转移JNC目标标号等于/结果为0转移JZ/JE目标标号不等于/结果不为0转移JNZ/JNE目标标号溢出转移JO目标标号不溢出转移JNO目标标号奇偶位为0/奇偶性为奇转移JNP/JPO目标标号奇偶位为1/奇偶性为偶转移JP/JPE目标标号符号标志位为0转移JNS目标标号符号标志位为1转移JS目标标号2.条件转移指令比较两个无符号数,并根据比较结果转移*

格式测试条件<

JB(JNAE,JC)OPRCF=1≥JNB(JAE,JNC)OPRCF=0≤

JBE(JNA)OPRCF∨ZF=1

>JNBE(JA)OPRCF∨ZF=0*

适用于地址或双精度数低位字的比较

比较两个带符号数,并根据比较结果转移*

格式测试条件<

JL(JNGE)OPRSF

OF=1

≥JNL(JGE)OPRSF

OF=0

≤JLE(JNG)OPR(SF

OF)∨ZF=1

>JNLE(JG)OPR(SF

OF)∨ZF=0*

适用于带符号数的比较循环控制指令(1)计数循环指令格式:LOOP目标标号指令功能:CX-1→CX,若CX≠0,循环转移到目标标号,直到CX=0退出循环。(2)结果为0/相等循环指令格式:LOOPZ/LOOPE目标标号指令功能:CX-1→CX,若CX≠0且ZF=1时,循环转移到目标标号,直到CX=0或ZF=0退出循环。3.3.(3)结果不为0/不相等循环指令格式:LOOPNZ/LOOPNE目标标号指令功能:CX-1→CX,若CX≠0且ZF=0时,循环转移到目标标号,直到CX=0或ZF=1时退出循环。(4)计数为0转移指令格式:JCXZ目标标号指令功能:若CX=0时,则控制转向目标标号,否则顺序执行。循环控制指令例DATA开始的存储区中有100个无符字节数,求出其中最大者,并存入MAX单元

MOVBX,OFFSETDATAMOVAL,[BX]MOVCX,63H; 为何?P1:INCBXCMPAL,[BX]J_ENEXTMOVAL,[BX]NEXT:DECCX JNZ_____ MOVMAX,AL HLT

例BUF开始的存储区中有10个字节数,找出该区域中‘$’,然后将该字符之前的数相加。

MOVSI,OFFSETBUFDECSI;为何?

MOVCX,10; 为何?LL1:INCSICMPBYTEPTR[SI],‘$’LOOP___LL1MOVAX,0SUBSI,OFFSETBUF JZLL3

MOVCX,SI MOVSI,OFFSETBUFLL2: ADDAL,[SI] ADCAH,0;为何?

INCSI LOOP_______LL3: HLT1.标志操作指令完成对标志位的置位、复位等操作,这些指令只影响与其相关的标志位。4.2.7处理器控制指令标志操作指令指令格式:CLC;置CF=0STC;置CF=1CMC;置CF=CFCLD;置DF=0STD;置DF=1CLI;置IF=0STI;置IF=1注意(1)处理器暂停指令指令格式:HLT指令操作:使处理器处于暂时停机状态。CPU控制指令2.指令格式:WAIT指令操作:执行WAIT指令后,处理器处于等待状态,直到检测到TEST引脚信号有效后,才退出等待状态,继续执行后续指令。(2)处理器等待指令2.

(3)处理器交权指令指令格式:ESCEXTOPCD,OP源指令操作:用来为协处理器提供一个操作码和操作数,以便完成主机对协处理器的某种操作要求。指令格式:NOP指令操作:在执行本指令期间,CPU不完成任何操作,只是每执行一条NOP指令,耗费3个时钟周期的时间。(4)空操作指令CPU控制指令2.CPU控制指令此类指令均不影响标志位。(5)总线封锁前缀注意指令格式:LOCK指令操作:当CPU执行带有LOCK前缀的指令时,不允许其他设备对总线进行访问。LOCK可作为任意指令前缀使用。2.输出指令指令格式:OUT端口,累加器指令功能:把AX中的16位数或AL中的8位数输出到指定端口。4.2.8输入输出指令指令格式:IN累加器,端口指令功能:把一个字节/字由输入端口传送到AL/AX中。1.输入指令1.溢出中断指令指令格式:INTO指令功能:检测OF标志位。当OF=1时,产生一个中断类型4

的中断;当OF=0时,本指令不起作用。2.软中断指令指令格式:INTn(n为中断类型号,取值为00H-0FFH)指令功能:产生一个软件中断,把控制转向一个类型号为n的软中断。本指令影响标志位IF、TF。中断指令3.2.93.中断返回指令指令格式:IRET指令功能:CPU执行完中断服务程序后,用此指令使控制正确返回原程序的断点处。4.2.9中断指令此类指令影响所有标志位。注意4.3.180286增强和新增指令1.

80286增强指令(1)使用堆栈的指令PUSHOP;OP可以是16位立即数、寄存器和存储器(2)带符号乘指令功能:1)IMUL寄存器,立即数寄存器的内容*立即数→寄存器。从80286到Pentium系列微处理器的指令系统4.34.3.180286增强和新增指令(3)移位指令SHL寄存器/存储器,计数值计数值可为1~31的任意正整数。其余如SAL、SAR、SHR、ROL、ROR、RCL、RCR等七条指令同SHL。功能:存储器中的内容*立即数→寄存器。操作数均为16位带符号数。若乘积超过16位,则高位丢失,并置CF=OF=1。2)IMUL寄存器,存储器,立即数2.

(1)使用栈的指令PUSHA/POPA指令将所有通用寄存器的值压入/弹出堆栈,压入的顺序是:AX、CX、DX、BX、SP、BP、SI、DI,弹出的顺序与压入相反。(2)字符串输入/输出指令1)INS/OUTS指令A.INS[ES]:目标地址,DXOUTSDX,[段地址:]源地址偏移量B.INSB/OUTBC.INSW/OUTW80286新增指令2)

REPINSREPOUTS(4)登录栈空间和撤销栈空间指令1)

ENTER16位立即数,8位立即数2)

LEAVEBOUND16位寄存器,双字存储器(3)检验边界指令(5)保护控制指令此类指令专为支持保护虚存管理而设置,见表4-12。2.

80286新增指令1.

80386指令的寻址方式80386指令系统详解4.3.2寻址方式立即寻址存储器寻址操作数是立即数操作数在存储单元中,其线性地址由两部分组成,即段基址和有效地址(偏移地址)。寄存器寻址操作数是8、16或32位寄存器

段基址由某一个段寄存器指定,而有效地址则是通过下列4种地址元素计算出来的。1.

80386指令的寻址方式80386指令系统详解4.3.2偏移量:操作码之后的8位、16位或32位的数据。

基址:任何通用寄存器都可以作为基址寄存器,其内容即为基址。变址:除ESP寄存器之外任何通用寄存器均可作为变址寄存器,其值为变址。比例因子:变址寄存器的值可以乘以一个比例因子,比例因子可以取

1、2、4或8。1.

80386指令的寻址方式80386指令系统详解4.3.2(1)直接寻址DECWORDPTR[1000H]

(2)寄存器间接寻址MOV[EBX],ECX(3)基址寻址MOV[EBX+100],ECX(4)变址寻址MOVECX,[ESI+100](5)带比例因子的变址寻址MOVECX,[ESI*4+100]

(6)基址变址寻址MOVECX,[ESI][EBX]

操作数的有效地址EA的计算公式如下:

EA=基址+变址*比例因子+偏移量

以上4个因素的组合形成9种寻址方式。1.

80386指令的寻址方式80386指令系统详解4.3.2(7)基址加比例因子变址寻址

MOVECX,ESI*4][EBX](8)带偏移量的基址变址寻址MOVECX,[ESI][EBX+100](9)带偏移量的基址比例因子变址寻址

MOVECX,[ESI*4][EBX+100]

操作数的有效地址EA的计算公式如下:

EA=基址+变址*比例因子+偏移量以上4个因素的组合形成9种寻址方式。2.

80386指令系统80386指令系统详解4.3.2⑴数据传送指令

1)通用传送指令

①MOV指令功能扩展指令中可以出现32位寄存器操作数,允许使用32位寄存器和存储器操作数新增指令

MOVSXOP目,OP源;带符号数扩展指令

MOVSZOP目,OP源;无符号数扩展指令MOVSX指令将源操作数的内容送到目的操作数中,目的操作数空出的高位用源操作数的符号位来填补;MOVSZ指令同样将源操作数的内容送到目的操作数中,但目的操作数空出的高位用零来填补。要求指令中的目的操作数必须为16位或32位的通用寄存器,源操作数可以是8位或16位的寄存器或存储器操作数。同时明确要求,源操作数的长度要小于目的操作数。

新增指令功能2.

80386指令系统80386指令系统详解4.3.2⑴数据传送指令

1)通用传送指令

②PUSH指令

功能扩展允许立即数入栈,允许使用32位操作数(此时由ESP指向堆栈栈顶,进栈时先将ESP减4,再将源操作数依次压入堆栈)。

新增指令PUSHA;将寄存器AX、CX、DX、BX、;SP、BP、SI、DI依次压入堆栈PSHAD;将寄存器EAX、ECX、EDX、EBX、ESP、

;EBP、ESI、EDI依次压入堆栈2.

80386指令系统80386指令系统详解4.3.2⑴数据传送指令

1)通用传送指令

③POP指令

功能扩展允许弹出32位操作数(此时由ESP指向堆栈栈顶,出栈时先将源操作数依次弹出堆栈,再将ESP加4)。

新增指令POPA;从栈顶弹出8个字分别送入寄存器DI、SI、;BP、SP、BX、DX、CX、AXPOPAD;从栈顶弹出8个字分别送入寄存器EDI、ESI、;EBP、ESP、EBX、EDX、ECX、EAX2.

80386指令系统80386指令系统详解4.3.2⑴数据传送指令

2)地址传送指令①LEA指令允许使用32位操作数。②LDS指令允许从数据段中取出32位的偏移量送ESI,取16位的段基址送DS。

LES指令允许从当前数据段中取48位的地址指针送ES和EDI

寄存器。

新增指令LFS;从当前数据段中取48位的地址指针送FS和ESI寄存;器LGS;从当前数据段中取48位的地址指针送GS和ESI寄存;器LSS;从当前数据段中取48位的地址指针送SS和ESP寄存;器

2.

80386指令系统80386指令系统详解4.3.2⑴数据传送指令

3)标志传送指令除了8086指令系统中的标志传送指令LAHF、SAHF、PUSHF、POPF之外,80386还设置了以下新增指令:

新增指令PUSHFD;将标志寄存器中的32位数据压栈

POPFD;将栈顶的双字弹出到32位的标志寄存器

2.

80386指令系统80386指令系统详解4.3.2⑵算术运算指令1)加法指令。加法指令包括ADD、ADC和INC指令,在

80

温馨提示

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

最新文档

评论

0/150

提交评论