8086指令系统.docx
- 文档编号:8727498
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:22
- 大小:24.36KB
8086指令系统.docx
《8086指令系统.docx》由会员分享,可在线阅读,更多相关《8086指令系统.docx(22页珍藏版)》请在冰豆网上搜索。
8086指令系统
通用寄存器:
数据寄存器:
累加器AX,基址寄存器BX,计数器CX,数据寄存器DX
变址寄存器:
源地址寄存器SI,目的变址寄存器DI
指针寄存器:
基址指针BP,堆栈指针SP
段寄存器:
代码段寄存器CS,堆栈段寄存器SS,数据段寄存器DS,附加段寄存器ES
标志寄存器:
FLAGS,指令指针:
IP
数据寄存器
8086有4个16位数据寄存器:
AX,BX,CX,DX;它们都可以分为两个独立的8位寄存器:
AH/AL,BH/BL,CH/CL,DH/DL;对其中的某8位操作,并不影响另外对应8位寄存器的数
据.数据寄存器是通用的,用来存放计算结果和操作数,但每个寄存器又有它们各自专用目的,主要是:
AX称为累加器,使用程度最高,用于算术,逻辑运算及与外设传送信息等;
BX称为基地址寄存器,常用做存放存储器的地址;
CX称为计数器,作为循环和串操作等指今中隐含的计数器;
DX称为数据寄存器,常用来存放双字节长数据的高16位,或存放外设端口地址.
指针及变址寄存器
指针及变址寄存器包括SI,DI,BP,SP四个16位寄存器,常用于存储器寻址时提供地址.SI源变址寄存器,DI目的变址寄存器,一般与DS联用确定数据段中某一存储单元地址.SP堆栈指针寄存器,指示栈顶的偏移地址;BP基址指针寄存器,表示堆栈段中的基地址.IP16位指令指针寄存器,指示代码段中指令的偏移地址,它与代码段寄存器CS联用,以确定下一条指令的物理地址.处理器利用CS:
IP取得下一条要执行的指令,然后修改IP的内容,使之指向下一条指令的存储器地址.
标志寄存器(FLAGS)也称为状志标志寄存器PSW
0 CF(CarryFlag)进位标志
1
2 PF(ParityFlag)零标志
3
4 AF(AuxiliaryCarryFlag)辅助进位标志
5
6 ZF(ZeroFlag)零标志
7 SF(SignFlag)符号标志:
运算结果最高有效位的状态就是符号位的状态.
8 TF(TrapFlag)陷井标志
9 IF(Interrupt-enableFlag)中断允许标志
10 DF(DirectionFlag)方向标志
11 OF(OverflowFlag)溢出标志
12
13
14
15
状态标志:
CF,ZF,SF,PF,OF,AF
控制标志:
DF,IF,TF
8086的字长是16位的,但其地址线是32位的.
8086处理器将1M存储器空间分成许多逻辑段(Segment),每个段的最大限为16KB.这样,每个存储单元就可以用"段地址:
段内偏移地址"表达其准确的物理位置."段地址:
偏移地址"的形式称为逻辑地址.将逻辑地址中的段地址左移4位(这是对二进制而言,若是十六进制,只要左移一位),加上偏移地址就得到20位物理地址.例如逻辑地址"1460H:
100H"表示物理地址14700H,同一个物理地址可以有多个逻辑地址形式.
8位通用寄存器AH/AL/BH/BL/CH/CL/DH/DL
16位的通用寄存器AX/BX/CX/DX.
DST 目的操作数
SRC 源操作数
一.通用数据传送指令
1.传送指令MOV(move)
格式:
MOVDST,SRC
操作:
(DST)←(SRC)将原操作数(字节或字)传送到目的地址。
操作数要求:
目的操作数和源操作数不能同时用存储器寻址方式,这个限制适用于所有指令。
对标志位的影响:
不影响标志位。
指令的特殊要求:
目的操作数DST和源操作数SRC不允许同时为段寄存器;不能同时为存储器操作数,源操作数SRC立即数方式,目的操作数DST不能是段寄存器,IP.CS不能作为目标操作数。
2.进栈指令PUSH(pushontothestack)
出栈指令POP(popfromthestack)
格式:
PUSHSRC;POPDST
操作:
PUSH指令在程序中常用来暂存某些数据,而POP指令又可将这些数据恢复。
PUSHSRC(SP)←(SP)-2;(SP)←(SRC)
POPDST(DST)←((SP));(SP)←(SP)
操作数要求:
push和pop指令不能使用立即数寻址方式。
对标志位的影响:
PUSH和POP指令都不影响标志位。
指令的特殊要求:
PUSH和POP指令只能是字操作,因此,存取字数据后,SP的修改必须是+2或者-2;POP指令的目的操作数DST不允许是CS寄存器;
3.交换指令XCHG(exchange)
格式:
XCHGOPR1,OPR2
操作:
(OPR1)←→(OPR2)
操作数要求:
一个操作数必须在寄存器中,另一个操作数可以在寄存器或存储器中。
指令对标志位的影戏:
不影响标志位。
指令的特殊要求:
不允许使用段寄存器。
二.累加器专用传送指令
4.输入指令IN(input)
输出指令OUT(output)
格式:
INac,portport≤0FFH
INac,DXport>0FFH
OUTport,acport≤0FFH
OUTDX,acport>0FFH
操作:
对8086及其后继机型的微处理机,所有I/O端口与CPU之间的通信都由输入输出指令IN和OUT来完成。
IN指令将信息从I/O输入到CPU,OUT指令将信息从CPU输出到I/O端口,因此,IN和OUT指令都要指出I/O端口地址。
INac,portport≤0FFH(AL)←(port)传送字节或(AX)←(port+1,port)传送字
INac,DXport>0FFH(AL)←((DX))传送字节或(AX)←((DX)+1,(DX))传送字
OUTport,acport≤0FFH(port)←(AL)传送字节或(port+1,port)←(AX)传送字
OUTDX,acport>0FFH(DX)←(AL)传送字节或((DX)+1,(DX))←(AX)传送字
对标志位的影响:
不影响标志位。
指令的特殊要求:
只限于在AL或AX与I/O端口之间传送信息。
传送16位信息用AX,传送8位信息用AL,这取决于外设端口的宽度。
5.换码指令XLAT(translate)
格式:
XLATopr或XLAT
操作:
这条指令根据AL寄存器提供的位移量,将BX指示的字节表格中的代码换存在AL中。
BX代表表格首地址,AL为表内位移量,BX+AL偏移地址送给AL。
(AL)←((DS)*10H+(BX)+(AL))
对标志位的影响:
不影响标志位。
指令的特殊要求:
所建字节表格的长度不能超过256字节,因为存放位移量的是8位寄存器AL。
opr为表格的首地址,因为opr所表示的偏移地址已存入BX寄存器,所以opr在换码指令中可有可无,有则提高程序的可读性。
三.地址传送指令
6.有效地址传送器LEA(loadeffectiveaddress)
格式:
LEAreg,src
操作:
LEA指令把源操作数的有效地址送到指定的寄存器,这个有效地址是由src选定的一种存储器寻址方式确定的。
操作数要求:
各种存储器寻址方式。
对标志位的影响:
不影响标志位。
指令的特出要求:
指令中reg不能是段寄存器;
7.指针送寄存器和DSLDS(loadDSwithpoint)
指针送寄存器和ESLES(loadESwithpoint)
格式:
LDSreg,src
LESreg,src
操作:
LDS和LES指令把确定内存单元位置的偏移地址送寄存器,段地址DS或ES。
这个偏移地址和段地址(也称地址指针)是由src指定的两个相继字单元提供的。
LDSreg,src(reg)←(src)(DS)←(src+2)
LESreg,src(reg)←(src)(ES)←(src+2)
操作数要求:
src必须为存储器寻址方式
对标志位的影响:
不影响标志位。
指令的特殊要求:
指令中REG不能是段寄存器;
四.标志寄存器传送指令
8.标志寄存器的低字节送AHLAHF(loadAHwithFLAGS)
格式:
LAHF
操作:
(AH)←(FLAGS)0-7
对标志位的影响:
不影响标志位
9.AH送标志寄存器低字节SAHF(storeAHintoFLAGS)
格式:
SAHF
操作:
(FLAGS)0-7←(AH)
对标志位的影响:
由装入值来确定标志位的值。
10.标志进栈PUSHF(pushtheflags)
格式:
PUSHF
操作:
(SP)←(SP)-2((SP)+1,(SP))←(FLAGS)0-15
对标志位的影响:
不影响标志位。
11.标志出栈POPF(poptheFLAGES)
格式:
POPF
操作:
(FLAGS)0-15←((SP)+1,(SP))(SP)←(SP)+2
对标志位的影响:
由装入值来确定标志位的值。
[算术指令]
一.加法指令
12.加法指令ADD(addition)
格式:
ADDdst,src
操作:
(dst)←(src)+(dst)
操作数要求:
他们两个操作数不能同时为存储器寻址。
即为除源操作数为立即数的情况外,源操作数和目地操作数必须有一个寄存器寻址方式。
对标志位影响:
SF=1加法结果为负数(符号位为1)
SF=0加法结果为正数(符号位为0)
ZF=1加法结果为零
ZF=0加法结果不为零
CF=1最高有效位向高位有进位
CF=0最高有效位向高位无进位
OF=1两个同符号数相加(正数+正数或负数+负数),结果符号与其相反。
OF=0两个不同符号数相加,或同符号数相加,结果符号与其相同。
13.带进位加法指令ADC(addwithcarry)
格式:
ADDdst,src
操作:
(dst)←(src)+(dst)+CF
操作数要求:
他们两个操作数不能同时为存储器寻址。
即除源操作数为立即数的情况外,源操作数和目地操作数必须有一个寄存器寻址方式。
对标志位的影响:
SF=1加法结果为负数
SF=0加法结果为正数
ZF=1加法结果为零
ZF=0加法结果不为零
CF=1最高有效位向高位有进位
CF=0最低有效位相高位无进位
OF=1两个同符号数相加,结果符号与其相反,
OF=0两个同符号数相加,或同符号相加,结果符号与其相同
14.加1指令INC(increament)
格式:
INCopr
操作:
(opr)←(opr)+1
操作数要求可以使用除立即数方式外的任何寻址方式
对标志位的影响:
SF=1加法结果为负数
SF=0加法结果为正数
ZF=1加法结果为零
ZF=0加法结果不为零
OF=1两个同符号数相加,结果符号与其相反,
OF=0两个同符号数相加,或同符号相加,结果符号与其相同。
二.减法指令
15.减法指令SUB(subtract)
格式:
SUBdst,src
操作:
(dst)←(dst)-(src)
操作数要求:
他们两个操作数不能同时为存储器寻址。
即为除源操作数为立即数的情况外,源操作数和目地操作数必须有一个寄存器寻址方式。
对标志位的影响:
SF=1减法结果为负数(符号位为1)
SF=0减法结果为正数(符号位为0)
ZF=1减法结果为零
ZF=0减法结果不为零
CF=1二进制减法运算中最高有效位向高位有借位(被减数小于减数,不够减的情况)
CF=0二进制减法运算中最高有效为向高位无借位(被减数>=减数,够减的情况)
OF=1两数符号相反(正数-负数,或负数-正数),而结果符号与减数相同。
OF=0同符号数相减时,或不同符号数相减,其结果符号与减数不同。
16.带借位减法指令SBB(subtractwithborrow)
格式:
SBBdst,src
操作:
(dst)←(dst)-(src)-CF
操作数要求:
他们两个操作数不能同时为存储器寻址。
即为除源操作数为立即数的情况外,源操作数和目地操作数必须有一个寄存器寻址方式。
对标志位的影响:
SF=1减法结果为负数(符号位为1)
SF=0减法结果为正数(符号位为0)
ZF=1减法结果为零
ZF=0减法结果不为零
CF=1二进制减法运算中最高有效位向高位有借位(被减数小于减数,不够减的情况)
CF=0二进制减法运算中最高有效为向高位无借位(被减数>=减数,够减的情况)
OF=1两数符号相反(正数-负数,或负数-正数),而结果符号与减数相同。
OF=0同符号数相减时,或不同符号数相减,其结果符号与减数不同。
17.减1指令DEC(decrement)
格式:
DECopr
操作:
(opr)←(opr)-1
操作数要求:
可以使用除立即数方式外的任何寻址方式。
对标志位的影响:
SF=1减法结果为负数(符号位为1)
SF=0减法结果为正数(符号位为0)
ZF=1减法结果为零
ZF=0减法结果不为零
OF=1两数符号相反(正数-负数,或负数-正数),而结果符号与减数相同。
OF=0同符号数相减时,或不同符号数相减,其结果符号与减数不同。
18.比较指令CMP(compare)
格式:
CMPopr1,opr2
操作:
(opr1)-(opr2),根据相减结果设置条件码,但不回送结果。
操作数要求:
他们两个操作数不能同时为存储器寻址。
即为除源操作数为立即数的情况外,源操作数和目地操作数必须有一个寄存器寻址方式。
对标志位的影响:
SF=1减法结果为负数(符号位为1)
SF=0减法结果为正数(符号位为0)
ZF=1减法结果为零
ZF=0减法结果不为零
CF=1二进制减法运算中最高有效位向高位有借位(被减数小于减数,不够减的情况)
CF=0二进制减法运算中最高有效为向高位无借位(被减数>=减数,够减的情况)
OF=1两数符号相反(正数-负数,或负数-正数),而结果符号与减数相同。
OF=0同符号数相减时,或不同符号数相减,其结果符号与减数不同。
19.求补指令NEG(negate)
格式:
NEGopr
操作:
(opr)←0-(opr)
操作数要求:
可以使用除立即数方式外的任何寻址方式。
对标志位的影响:
CF=1 不为0的操作数求补时
CF=0 为0的操作数求补时
OF=1操作数为-128(字节运算)或操作数为-32768(字运算)
OF=0当求补运算的操作数不为-128(字节)或-32768(字)时
三.乘法指令
20.无符号乘法指令NUL(unsignedmultiple)
有符号乘法指令IMUL(signedmuliple)
格式:
NULsrc
IMULsrc
操作:
(AX)←(AL)*(src)
(DX,AX)←(AX)*(src)
操作数要求:
src可以使用除立即数方式以外的任一种寻址方式。
对标志位的影响:
乘法指令只影响标志位CF和OF,其他条件码位无定义。
MUL指令的条件码设置为:
CFOF=00乘积的高一半为0(字节操作的(AH)或字操作的(DX))
CFOF=11乘积的高一半不为0
IMUL指令的条件码设置为:
CFOF=00乘积的高一半为低一半的符号扩展.
CFOF=11其他情况
指令的特殊要求:
MUL和IMUL指令的区别仅在于操作数是无符号还是带符号数,它们的共同点是,指令中只给出源操作数src,目的操作数是隐含的,它只能是累加器(字运算为AX,字节运算为AL)。
隐含的乘积寄存器是AX或DX(高位)和AX(低位)。
四.符号扩展指令
21.节扩展为字CBW(convertbytetoword)
格式:
CBW
操作:
(AH)=00H当(AL)的最高有效位为0时
(AH)=FFH当(AL)的最高有效位为1时
对标志位的影响:
不影响标志位
指令的特殊要求:
这是条无操作数的指令,进行符号扩展的操作数必须存放在AL寄存器或AX寄存器中。
22.字扩展为双字CWD(convertwordtodoubleword)
格式:
CWD
操作:
(DX)=0000H当(AX)的最高有效位为0时
(DX)=FFFFH当(AX)的最高有效位为1时
对标志位的影响:
不影响标志位
指令的特殊要求:
这是条无操作数的指令,进行符号扩展的操作数必须存放在AL寄存器或AX寄存器中。
五.除法指令
23.无符号数除法DIV(unsigneddivide)
带符号数除法IDIV(singeddivide)
格式:
DIVsrc
IDIVsrc
操作:
字操作
(AL)←(AX)/src的商
(AH)←(AX)/src的余数
字节操作
(AX)←(DX,AX)/src的商
(DX)←(DX,AX)/src的余数
操作数要求:
src作为除数,可用除立即数以外的任一种寻址方式来取得。
对标志位的影响:
不影响条件码。
指令的特殊要求:
除法指令要求字操作时,被除数必须为32位,除数是16位,商和余数是16位的;字节操作时,被除数必须为16位,除数是8位,得到的商和余数是8位的。
六.十进制调整指令
[逻辑指令]
一.逻辑运算
24.逻辑与AND(logicand)
格式:
ANDdst,src
操作:
(dst)←(dst)与(src)
操作数要求:
两个操作数不能同时为存储器寻址。
即为除源操作数为立即数的情况外,源操作数和目地操作数必须有一个寄存器寻址方式。
对标志位的影响:
指令执行后CF和OF置零,AF无定义。
SF=1指令执行后的结果为负数(符号位为1)
SF=0指令执行后的结果为正数(符号位为0)
ZF=1指令执行后的结果为零
ZF=0指令执行后的结果不为零
PF=1结果操作数中1的个数为偶数时置1
PF=0结果操作数中1的个数为奇数时置0
25.逻辑或OR(logicor)
格式:
ORdst,src
操作:
(dst)←(dst)或(src)
操作数要求:
两个操作数不能同时为存储器寻址。
即为除源操作数为立即数的情况外,原操作数和目的操作数必须有一个寄存器寻址方式。
对标志位的影响:
指令执行后CF和OF置零,AF无定义。
SF=1指令执行后的结果为负数(符号位为1)
SF=0指令执行后的结果为正数(符号位为0)
ZF=1指令执行后的结果为零
ZF=0指令执行后的结果不为零
PF=1结果操作数中1的个数为偶数时置1
PF=0结果操作数中1的个数为奇数时置0
26.逻辑非NOT(logicnot)
格式:
NOTorc
操作:
(dst)←(opr)
操作数要求:
除立即数寻址方式以外的其余寻址方式
对标志位的影响:
对标志位无影响
27.异或XOR(exclusiceor)
格式:
XORdst,src
操作:
(dst)←(dst)异或(src)
操作数要求:
两个操作数不能同时为存储器寻址。
即为除源操作数为立即数的情况外,原操作数和目的操作数必须有一个寄存器寻址方式。
对标志位的影响:
令执行后CF和OF置零,AF无定义。
SF=1指令执行后的结果为负数(符号位为1)
SF=0指令执行后的结果为正数(符号位为0)
ZF=1指令执行后的结果为零
ZF=0指令执行后的结果不为零
PF=1结果操作数中1的个数为偶数时置1
PF=0结果操作数中1的个数为奇数时置0
28.测试指令TEST
格式:
TESTopr1,opr2
操作:
(opr1)与(opr2)
操作数要求:
两个操作数不能同时为存储器寻址,即为除源操作数为立即数的情况外,源操作数和目的操作数必须有一个寄存器寻址方式。
对标志位的影响:
令执行后CF和OF置零,AF无定义。
SF=1指令执行后的结果为负数(符号位为1)
SF=0指令执行后的结果为正数(符号位为0)
ZF=1指令执行后的结果为零
ZF=0指令执行后的结果不为零
PF=1结果操作数中1的个数为偶数时置1
PF=0结果操作数中1的个数为奇数时置0
二.移位指令
29.逻辑左移SHL(shiftlogicalleft)
格式:
SHLdst,cnt
操作:
SHL指令向左逐位移动cnt次,每次逐位移动后,最低位用0来补充,最高位移入CF。
操作数要求:
目的操作数dst可以是除立即数外的任何寻址方式。
移位次数(或位数)cnt=1时,1可以直接写在指令中,cnt>1时,cnt必须放入CL寄存器中。
对标志位的影响:
CF=移入的数值
OF=1当cnt=1时,移动后最高位的值发生变化。
OF=0当cnt=1时,移动时最高位的值未发生变化。
SF.ZF.PF根据移动后的结果设置。
30.逻辑右移SHR(shiftlogicalright)
格式:
SHRdst,cnt
操作:
SHR指令向右逐位移动cnt次,每次逐位移动后,最高位用0来补充,最低位移入CF。
操作数要求:
目的操作数dst可以是除立即数外的任何寻址方式。
移位次数(或位数)cnt=1时,1可以直接写在指令中,cnt>1时,cnt必须放入CL寄存器中。
对标志位的影响:
CF=移入的数值
OF=1当cnt=1时,移动后最高位的值发生变化。
OF=0当cnt=1时,移动时最高位的值未发生变化。
SF.ZF.PF根据移动后的结果设置。
31.算术左移SAL(shiftarithmeticleft)
格式:
SALdstcnt
操作:
SAL指令向左逐位移动cnt次,每次逐位移动后,最低位用0来补充,最高位移入CF。
操作数要求:
目的操作数dst可以是除立即数外的任何寻址方式。
移位次数(或位数)cnt=1时,1可以直接写在指令中,cnt>1时,cnt必须放入CL寄存器中。
对标志位的影响:
CF=移入的数值
OF=1当cnt=1时,移动后最高位的值发生变化。
OF=0当cnt=1时,移动时最高位的值未发生变化。
SF.ZF.PF根据移动后的结果设置。
32.算术右移SAR(shiftarithmeticright)
格式:
SARdst,cnt
操作:
SAR指令向右逐位移动cnt次,每次逐位移动后,最高位用符号位来补充,最低位移入CF。
操作数要求:
目的操作数dst可以是除立即数外的任何寻址方式。
移位次数(或位数)cnt=1时,1可以直接写在指令中,cnt>1时,cnt必须放入CL寄存器中。
对标志位的影响:
CF=移入的数值
OF=1当cnt=1时,移动后最高位的值发生变化。
OF=0当cnt=1时,移动时最高位的值未发生变化。
SF.ZF.PF根据移动后的结果设置。
33.循环左移ROL(rotateleft)
格式:
ROL
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 8086 指令系统