8086CPU指令系统.docx
- 文档编号:5382792
- 上传时间:2022-12-15
- 格式:DOCX
- 页数:24
- 大小:53.27KB
8086CPU指令系统.docx
《8086CPU指令系统.docx》由会员分享,可在线阅读,更多相关《8086CPU指令系统.docx(24页珍藏版)》请在冰豆网上搜索。
8086CPU指令系统
第三章8086CPU指令系统
内容提要:
1.寻址方式:
立即寻址,寄存器寻址,直接寻址,寄存器间接寻址,基址寻址,变址寻址,基址加变址寻址,串寻址,端口寻址,隐含寻址。
2.8086指令系统:
数据传送指令,算术运算指令,移位指令,程序控制指令,串操作指令,处理器控制指令,I/O指令,中断指令。
学习目标:
1.掌握寻址方式;
2.掌握常用指令的功能和用法。
难点:
区别指令的正确与错误。
学时:
14
作业:
一、问答题
1、现有(DS)=2000H,(BX)=0100H,(SI)=0002H,(20100H)=12H,(20101H)=34H,(20102H)=56H,(20103H)=78H,(21200H)=2AH,(21201H)=4CH,(21202H)=0B7H,(21023H)=65H,下列指令执行后填入AX寄存器的内容:
(1)MOVAX,1200H;(AX)=
(2)MOVAX,BX;(AX)=
(3)MOVAX,[1200H];(AX)=
(4)MOVAX,[BX];(AX)=
(1)MOVAX,1100[BX];(AX)=
(2)MOVAX,[BX][SI];(AX)=
(3)MOVAX,1100[BX][SI];(AX)=
2、执行下列指令序列后,完成的功能是将(DX,AX)的值。
MOVCL,04
SHLDX,CL
MOVBL,AH
SHLAX,CL
SHRBL,CL
ORDL,BL
二、填空题
1、执行下列指令序列后,完成的功能是将(DX,AX)的值。
MOVCX,4
NEXT:
SHRDX,1
RCRAX,1
LOOPNEXT
2、下列指令执行后,BX=。
MOVCL,3
MOVBX,4DABH
ROLBX,1
RORBX,CL
三、选择题
1、下列程序:
NEXT:
MOVAL,[SI]
MOVES:
[DI],AL
INCSI
INCDI
LOOPNEXT
可用指令来完成该功能。
A)REPLODSBB)REPSTOSBC)REPESCASBD)REPMOVSB
2、设(AL)=-68,(BL)=86,执行SUBAL,BL指令后,正确的结果是。
A)CF=1B)SF=1C)OF=1D)ZF=1
3、设(SS)=0FFA0H,(SP)=00B0H,(AX)=8057H,(BX)=0F79H,执行指令“PUSHAX”后,(SP)=
(1);再执行指令:
PUSHBX
POPAX
后,(SP)=
(2),(AX)=(3),(BX)=(4)。
4、设(AL)=-68,(BL)=86,执行SUBAL,BL指令后,正确的结果是。
A)SF=1B)ZF=0
C)CF=1D)OF=1
5、假设(SS)=2000H,(SP)=0012H,(AX)=1234H,执行PUSHAX后,=12H
A)20014B)20011HC)20010HD)2000FH
6、若要检查BX寄存器中的D12位是否为1,应该用指令。
A)ORBX,1000HB)TESTBX,1000H
JNZNOJNZYES
C)XORBX,1000HD)ANDBX,1000H
JZYESJNZYES
7、用BP作基址变址寻址时,操作数所在的段是当前。
A)数据段B)代码段C)堆栈段D)附加段
8、执行下列指令后:
MOVAX,1234H
MOVCL,4
ROLAX,CL
DECAX
MOVCX,4
MULCX
HLT
(AX)=
A)8D00HB)9260HC)8CAOHD)0123H
四、判断题
1、MOVAX,[BP]的源操作数的物理地址为16×(DS)+(BP)。
()
2、判断下列指令是否正确,若错误,请指出原因。
(1)CMP[CX],BYTEPTRSTR+1
(2)MOVDI,OFFSET[BX][SI]
(3)LEADI,[BX][SI]
(4)PUSHAL
(5)SHLAX,3
(6)MOVAX,TAB2-TAB1+100
(7)OUTCX,AL
(8)DIV25
(9)MOVCX,BX
(10)POPCS
(11)PUSHWORDPTR20[BX+SI-2]
(12)LEABX,4[BX]
(13)MOVBYTEPTR[BX],1000
(14)MOVAX,[SI][DI]
(15)MOVSAVE_WORD,DS
(16)MOVAX,ARRAY1+ARRAY2
(17)MOVWORD_OP1,WORD_OP1-WORD_OP2
(18)MOVSP,SS:
DATA_WORD[BX][SI]
(19)MOVAH,BX
(20)MULAX,BX
(21)LEADS,35[DI]
(22)MOVSTR[BX][SI],ES:
AX
(23)MOV[BX][BP],AX
(24)ADDAX,ACH
一、 8086指令的一般格式
概述
指令:
是计算机用以控制各部件协调动作的命令;
指令系统:
CPU可执行的指令的集合;
机器指令:
是CPU仅能识别的指令的二进制代码,也称机器码;
指令格式:
由操作码和操作数两部分组成,有些指令无操作数。
操作码规定了指令的操作性质,用助记符表示;操作数规定了指令的操作对象。
指令可分为无操作数指令、单操作数指令、双操作数指令。
例:
HLT无操作数
DAA约定或隐含操作数
INCAL单操作数
MOVAL,BL双操作数,其中逗号前的操作数AL为目的操作数,逗号后的操作数BL为源操作数。
操作数类型有三种:
立即数:
出现在指令中的常数;
寄存器操作数:
操作数在寄存器中;
存储器操作数:
操作数在存储器中。
二、8086寻址方式
是指CPU在执行指令时寻找操作数或操作数地址的方式。
1.立即寻址:
直接放在指令中的常数称为立即数,立即数只能是源操作数,立即数存放在指令操作码之后的存储单元中。
例:
MOVAL,50H
2.寄存器寻址:
存放在寄存器中的数据为操作数,寄存器操作数可以是源操作数,也可以是目的操作数。
例:
MOVAL,BL
以下寻址方式3~8,操作数都在存储器中。
存储器操作数具有类型属性,如字节(BYTE)、字(WORD)、双字(DWORD)等,反映了数据占用存储单元的字节数,指令书写中,约定用方括号内容表示存储器操作数的偏移地址;用类型名PTR偏移地址的形式说明指令中存储器操作数的类型,例:
WORDPTR[1000H];用变量名DB/DW/DD数据序列的形式分别定义具有“变量名”的字节、字或双字存储器操作数,如BUFDB10H,20H。
3.存储器寻址
(1)直接寻址:
存储器操作数的16位偏移地址直接包含在指令的方括号中。
例:
MOVAL,[1000H]约定由DS提供段地址
MOVAL,CS:
[1000H];段超越,由CS提供段地址
MOVAL,SS:
[1000H];段超越,由SS提供段地址
(2)寄存器间接寻址:
操作数所在的存储单元的偏移地址放在指令给出的寄存器中。
可用于这种寻址方式的寄存器只能是SI、DI、BP和BX。
其中,SI、DI、BX约定的段寄存器是DS,而BP约定的段寄存器SS。
例:
MOVAX,[SI];AX←DS:
[SI]
MOV[BX],AX;DS:
[BX]←AX
(3)基址寻址:
操作数的有效地址是指令给定的位移量(8位或16位)与BX、BP内容之和,段寄存器约定同寄存器间接寻址,允许段超越。
例:
MOVAX,[BX+3AH];AX←DS:
[BX+3AH]
MOV[BP+4EB3H],AX;SS:
[BP+4EB3H]←AX
(4)变址寻址:
操作数的有效地址是指令给定的位移量与寄存器SI或DI内容之和,段寄存器约定在DS中,允许段超越。
例:
MOV[DI+12H],AX;DS:
[DI+12H]←AX
MOVBX,SS:
[DI+45H];BX←SS:
[DI+45H]
(5)基址变址寻址:
操作数的有效地址是指令给定的位移量和一个基址寄存器(BX或BP)及一个变址寄存器(SI或DI)的内容之和,段寄存器约定由基址寄存器决定,若为BX,段寄存器约定为DS;若为BP,段寄存器约定为SS,允许段超越。
例:
MOVBX,[DI+BP+45H];BX←SS:
[DI+BP+45H]
MOVAX,ES:
[SI+BX+76H];AX←ES:
[SI+BX+76H]
注意:
基址寄存器BX和BP不能同时出现在一个方括号内,变址寄存器DI和SI亦如此。
(6)串寻址:
用于数据串操作指令,它隐含地运用:
SI指出源串偏移地址,DI指出目的串偏移地址,指令执行后,SI和DI的内容自动加1或减1(操作数为字节类型时)、加2或减2(操作数为字类型时);约定源串段地址在DS中,目的串段地址在ES中。
不允许段超越。
例:
MOVSB;ES:
[DI]←DS:
[SI],SI←SI
1,DI←DI
1
MOVSW;ES:
[DI]←DS:
[SI],SI←SI
2,DI←DI
2
(7)端口寻址:
操作数在外设端口中。
直接端口寻址:
指令中直接给出的8位常数是外设端口地址。
例:
INAL,34H;AL←[34H]
OUT34H,AL;[34H]←AL
间接端口寻址:
指令中外设端口的16位地址在DX中。
例:
MOVDX,280H
INAL,DX;AL←[280H]
OUTDX,AL;[280H]←AL
(8)隐含寻址:
指令中没有给出操作数,但却隐含在固定对象中。
例:
AAA;隐含对AL操作,
三、数据传送指令
1.通用数据传送指令
① MOVdst,src
指令功能:
dst←src,
标志寄存器:
不影响,
操作数:
src:
通用寄存器、段寄存器、存储器操作数、立即数;
dst:
通用寄存器、段寄存器、存储器操作数。
注意点:
src和dst必须类型一致(都是8位或者是16位);
dst不能是立即数;
当操作数不是立即数时,两个操作数不能都是存储器操作数;
源操作数是立即数时,目的操作数不能是段寄存器;
CS不得作目的操作数。
例:
MOVBX,CX;BX←CX
MOV[2000H],BL;DS:
[2000H]←BL
① XCHGdst,src
指令功能:
dst←→src
标志寄存器:
不影响,
操作数:
两操作数可以是通用寄存器和存储器。
注意点:
两操作数不能都是存储器操作数;
两操作数类型必须一致。
例:
XCHGAX,BX;AX←→BX
② PUSHsrc
指令功能:
SP←SP-1,[SP]←srcH,SP←SP-1,[SP]←srcL
标志寄存器:
不影响
操作数:
寄存器(IP除外)或存储单元。
注意点:
源操作数只能是16位,而不能是8位的。
③ POPdst
指令功能:
dstL←[SP],SP←SP+1,dstH←[SP],SP←SP+1
标志寄存器:
不影响,POPF除外
操作数:
同PUSH指令,但CS不能作为目的操作数。
注意点:
目的操作数只能是16位的,而不能是8位的。
④ XLAT(查表指令)
指令功能:
AL←DS:
[BX+AL];
标志寄存器:
不影响;
用途:
用于查表,表首地址的偏移地址在BX中,表长度可达256字节。
2.地址传送指令:
用来传送操作数的地址。
①LEAreg16,src取偏移地址指令
指令功能:
将源操作数的偏移地址送16位通用寄存器;
标志寄存器:
不影响;
操作数:
目的操作数是16位通用寄存器,源操作数是存储器操作数。
②LDSreg16,src和LESreg16,src取地址指针指令
指令功能:
将源操作数的有效地址所对应的双字存储单元的高16位内容送入DS(LES指令送入ES),低16位内容送入指令指定的16位通用寄存器;
标志寄存器:
不影响。
例:
设某双字存储单元偏移地址为3000H,双字数据为12345678H,则
LDSSI,[3000H];DS=1234H,SI=5678H
LESDI,[3000H];ES=1234H,DI=5678H
3.标志传送指令专门用于对标志寄存器进行操作
① LAHF;AH←FL,标志寄存器低8位送AH
② SAHF;FL←AH,AH的内容送标志寄存器低8位
③ PUSHF;标志寄存器内容压栈
④ POPF;栈顶内容送标志寄存器
注意点:
SAHF和POPF指令将直接影响标志位,而其他传送均不会对标志位产生影响。
4.输入/输出指令用于主机与外设端口间的数据传送。
INAL,n;INAL,DX;INAX,n;INAX,DX
指令功能:
从端口(地址为n或在DX中)输入8位数据到AL中或输入16位数据到AX中;
标志寄存器:
不影响。
OUTn,AL;OUTDX,AL;OUTn,AX;OUTDX,AX
指令功能:
从AL中输出8位数据到端口(地址为n或在DX中)或从AX中输出16位数据到端口(地址为n或在DX中)。
标志寄存器:
不影响。
四、算术运算指令
1.加法指令
① ADDdst,src
指令功能:
dst←src+dst
标志寄存器:
影响AF、CF、PF、OF、ZF、SF
操作数:
目的操作数:
通用寄存器、存储器;
源操作数:
通用寄存器、存储器、立即数;
注意点:
两操作数必须类型一致;
两操作数不能同时为存储器操作数。
例:
ADDAX,BX;AX←AX+BX
ADD[BX+DI+64H],AX;[BX+DI+64H]←AX
② ADCdst,src
指令功能:
dst←dst+src+CF
其余同ADD指令。
③ INCdst
指令功能:
dst←dst+1
标志寄存器:
影响OF、SF、ZF、AF、PF;
操作数:
8位/16位通用寄存器或存储器;
注意点:
不影响CF。
2.减法指令
① SUBdst,src
指令功能:
dst←dst-src;
其余同ADD指令。
例:
SUBBX,CX;BX←BX-CX
② SBBdst,src
指令功能:
dst←dst-src-CF;
其余同SUB指令。
例:
SBB[BX+SI],AL;[BX+SI]←[BX+SI]-AL-CF
③ DECdst
指令功能:
dst←dst-1
其余同INC指令。
④ NEGdst
指令功能:
dst←0-dst或det←
+1
标志寄存器:
影响AF、CF、PF、OF、ZF、SF;
操作数:
8位/16位通用寄存器或存储器。
例:
MOVAH,5
NEGAH;AH=11111011B,是-5(补码)
MOVAX,-6
NEGAX;AX=0006H,是+6
⑤ CMPdst,src
指令功能:
dst-src
其余同SUB指令;
注意点:
指令执行后,目的操作数保持原值不变。
3.乘法指令
①MULsrc无符号数乘法指令
指令功能:
AX←AL*src(字节乘法)
DXAX←AX*src(字乘法)
标志寄存器:
字节乘:
若乘积高8位AH
0,则CF=1,OF=1,
若乘积高8位AH=0,则CF=0,OF=0;
字乘:
若乘积高16位DX
0,则CF=1,OF=1,
若乘积高16位DX=0,则CF=0,OF=0;
操作数:
可以是通用寄存器、存储器,不能是立即数。
例:
MULBX;DXAX←AX*BX
MULBYTEPTR[SI];AX←AL*(DS:
[SI])
②IMULsrc带符号数乘法指令
指令功能:
同MUL指令;
标志寄存器:
若乘法结果AH或DX包含有效值,则OF=1、CF=1,
若乘法结果AH或DX只是低半部分的符号扩展,则OF=0、CF=0
操作数:
同MUL指令。
例:
IMULWORDPTR[DI];DXAX←AX*(DS:
[DI])
4.除法指令
①DIVsrc无符号除法指令
指令功能:
字节除:
AL←AX/src,余数在AH中,
字除:
AX←DXAX/src,余数在DX中。
若商超过AL(字节除)或AX(字除)所能存放的最大值(FFH或FFFFH)时,系统会自动产生0类中断,且商和余数都不确定。
操作数的规定与乘法指令相同。
例:
DIVBX;DX,AX←DXAX/BX,DX←余数,AX←商
②IDIVsrc带符号数除法指令
需强调的是余数的符号必须和被除数的符号相同。
当商超过AL或AX所能存放的最大值+127(字节除)或+32767(字除),以及所能存放的最小值-127(字节除)或-32767(字除)时,系统会自动产生0类中断。
操作数的规定与乘法指令相同。
5.符号扩展指令扩展带符号数的字节数
① CBW
指令功能:
将AL中数的符号位扩展到整个AH中。
② CWD
指令功能:
将AX中数的符号位扩展到整个DX中。
例:
MOVAL,-16;AL=0F0H(-16)
CBW;AX=0FFF0H(-16)
CWD;DXAX=0FFFFFFF0H(-16)
IDIVBX;DX←余数,AX←商
6.BCD数调整指令
压缩型BCD数(也称组合BCD数):
一个字节表示两位BCD数;
非压缩型BCD数(也称非组合BCD数):
一个字节表示一位BCD数,有效位在低4位,高4位为零。
①加法的BCD数调整
a.AAA:
加法的非压缩型BCD数调整指令
指令功能:
对在AL中两个非压缩型BCD数相加的结果,调整成非压缩型BCD数在AL中;若AL低4位大于9或AF=1,则AL+6,AH+1,CF和AF置1,AL高4位清0;否则AL高4位清0,CF和AF置0,
标志寄存器:
该指令不影响PF、ZF、SF、OF。
注意点:
必须紧跟在加法指令之后且只能对AL中的内容进行调整。
b.DAA:
压缩型BCD数调整指令
指令功能:
对在AL中两个压缩型BCD数相加的结果,调整成压缩型BCD数在AL中;
标志寄存器:
影响CF、PF、AF、ZF、SF,其中CF=1说明结果大于99。
注意点:
必须紧跟在加法指令之后且只能对AL中的内容进行调整。
例:
MOVBL,35H
MOVAL,85H
ADDBL,AL
DAA
结果AL=20H,CF=1,AF=1,PF=0,ZF=0,SF=0
②减法的BCD数调整
a.AAS:
减法的非压缩型BCD数调整指令
指令功能:
对在AL中两个非压缩型BCD数相减的结果,调整成非压缩型BCD数在AL中;
标志寄存器:
影响AF、CF;
注意点:
必须紧跟在减法指令之后且只能对AL中的内容进行调整。
例:
SUBAL,BL;AL和BL中的非压缩BCD数相减
AAS;调整AL为正确的非压缩BCD数
b.DAS:
减法的压缩型BCD数调整指令
指令功能:
对在AL中两个压缩型BCD数相减的结果,调整成压缩型BCD数在AL中;
标志寄存器:
同DAA指令。
注意点:
必须紧跟在减法指令之后且只能对AL中的内容进行调整。
③ 乘法的BCD数调整
AAM;非压缩型BCD数调整
指令功能:
对AX中两个非压缩型BCD数在相乘的结果调整成两位非压缩型BCD数,高位非压缩型BCD数在AH中,低位非压缩型BCD数在AL中;
标志寄存器:
影响PF、SF、ZF。
注意点:
必须紧跟在乘法指令之后。
④ 除法的BCD数调整
AAD;非压缩型BCD数调整
指令功能:
用在两位非压缩型BCD数在相除之前进行调整,对AX内容进行调整,使两个未组合的十进制数相除之后可得到非组合的BCD数结果,商在AL中,余数在AH中;
标志寄存器:
影响PF、SF、ZF。
注意点:
必须紧跟在除法指令之前。
五、位操作指令(包括逻辑运算指令、移位指令)
1.逻辑运算指令
① ANDdst,src
指令功能:
dst←dst∩src
标志寄存器:
影响SF、ZF、PF,OF=0、CF=0,AF不确定
操作数:
目的操作数:
通用寄存器、存储器;
源操作数:
通用寄存器、存储器、立即数;
注意点:
两操作数不能都是存储器操作数。
例:
MOVBX,0F56H
ANDBL,BH;BL=06H
② ORdst,src
指令功能:
dst←dst∪src
其余同AND指令。
③ NOTdst
指令功能:
dst←
标志寄存器:
不影响;
操作数:
通用寄存器、存储器。
例:
MOVAL,05H
NOTAL;AL=0FAH
④ XORdst,src
指令功能:
dst←dst
src
其余同AND指令。
⑤ TESTdst,src
指令功能:
dst∩src
其余同AND指令
注意点:
指令执行后,目的操作数的值保持不变。
2.移位指令
移位次数cnt可以是1,若移位次数大于1时,必须放在CL中,移位结束后,CL值不变。
影响AF以外的各标志位,而AF不定;当cnt=1时,OF才有意义,当移位前操作数的最高两位相同时,移位后OF=0,当操作数的最高两位不同时,OF=1。
①SALdst,cnt算术左移指令
SHLdst,cnt逻辑左移指令
指令功能:
操作数:
通用寄存器或存储器的8位或16位内容。
②SARdst,cnt算术右移指令
指令功能:
操作数:
通用寄存器或存储器的8位或16位内容。
③SHRdst,cnt逻辑右移指令
指令功能:
操作数:
通用寄存器或存储器的8位或16位内容。
3.循环移位指令
只影响CF和OF,同样只有当cnt=1时,OF才有意义。
操作数同移位指令
①ROLdsr,cnt循环左移指令
指令功能:
②RORdst,cnt循环右移指令
指令功能:
③RCLdst,cnt带进位循环左移指令
指令功能:
④RCRdst,cnt带进位循环右移指令
指令功能:
六、程序控制指令
用来控制程序的执行顺序。
程序的执行顺序是由CS和IP确定的
转移指令可分为:
段间转移(也称远转移):
目标属性为FAR,同时改变CS和
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 8086 CPU 指令系统