第3章 8086CPU指令系统Word格式.docx
- 文档编号:16559905
- 上传时间:2022-11-24
- 格式:DOCX
- 页数:21
- 大小:49.31KB
第3章 8086CPU指令系统Word格式.docx
《第3章 8086CPU指令系统Word格式.docx》由会员分享,可在线阅读,更多相关《第3章 8086CPU指令系统Word格式.docx(21页珍藏版)》请在冰豆网上搜索。
MOVAL,CS:
[1000H];
段超越,由CS提供段地址
MOVAL,SS:
段超越,由SS提供段地址
②寄存器间接寻址
操作数所在的存储单元的偏移地址放在指令给出的寄存器中。
可用于这种寻址方式的寄存器只能是SI、DI、BP和BX。
其中,SI、DI、BX约定的段寄存器是DS,而BP约定的段寄存器SS。
MOVAX,[SI];
AX←DS:
[SI]
MOV[BX],AX;
DS:
[BX]←AX
③基址寻址
操作数的有效地址是指令给定的位移量(8位或16位)与BX、BP内容之和,段寄存器约定同寄存器间接寻址,允许段超越。
MOVAX,[BX+3AH];
[BX+3AH]
MOV[BP+4EB3H],AX;
SS:
[BP+4EB3H]←AX
④变址寻址
操作数的有效地址是指令给定的位移量与寄存器SI或DI内容之和,段寄存器约定在DS中,允许段超越。
MOV[DI+12H],AX;
[DI+12H]←AX
MOVBX,SS:
[DI+45H];
BX←SS:
[DI+45H]
⑤基址变址寻址
操作数的有效地址是指令给定的位移量和一个基址寄存器(BX或BP)及一个变址寄存器(SI或DI)的内容之和,段寄存器约定由基址寄存器决定,若为BX,段寄存器约定为DS;
若为BP,段寄存器约定为SS,允许段超越。
MOVBX,[DI+BP+45H];
[DI+BP+45H]
MOVAX,ES:
[SI+BX+76H];
AX←ES:
[SI+BX+76H]
注意:
基址寄存器BX和BP不能同时出现在一个方括号内,变址寄存器DI和SI亦如此。
⑥串寻址
用于数据串操作指令,它隐含地运用:
SI指出源串偏移地址,DI指出目的串偏移地址,指令执行后,SI和DI的内容自动加1或减1(操作数为字节类型时)、加2或减2(操作数为字类型时);
约定源串段地址在DS中,目的串段地址在ES中。
不允许段超越。
MOVSB;
ES:
[DI]←DS:
[SI],SI←SI
1,DI←DI
1
MOVSW;
2,DI←DI
2
⑦端口寻址
操作数在外设端口中。
●直接端口寻址:
指令中直接给出的8位常数是外设端口地址。
INAL,34H;
AL←[34H]
OUT34H,AL;
[34H]←AL
●间接端口寻址:
指令中外设端口的16位地址在DX中。
MOVDX,280H
INAL,DX;
AL←[280H]
OUTDX,AL;
[280H]←AL
⑧隐含寻址
指令中没有给出操作数,但却隐含在固定对象中。
AAA;
隐含对AL操作,
三数据传送指令
⒈通用数据传送指令
①
MOVdst,src
指令功能:
dst←src,
标志寄存器:
不影响,
操作数:
src:
通用寄存器、段寄存器、存储器操作数、立即数;
dst:
通用寄存器、段寄存器、存储器操作数。
src和dst必须类型一致(都是8位或者是16位);
dst不能是立即数;
当操作数不是立即数时,两个操作数不能都是存储器操作数;
源操作数是立即数时,目的操作数不能是段寄存器;
CS不得作目的操作数。
MOVBX,CX;
BX←CX
MOV[2000H],BL;
[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字节。
⒉地址传送指令
用来传送操作数的地址。
①LEAreg16,src取偏移地址指令
将源操作数的偏移地址送16位通用寄存器;
目的操作数是16位通用寄存器,源操作数是存储器操作数。
②LDSreg16,src和LESreg16,src取地址指针指令
指令功能:
将源操作数的有效地址所对应的双字存储单元的高16位内容送入DS(LES指令送入ES),低16位内容送入指令指定的16位通用寄存器;
不影响。
设某双字存储单元偏移地址为3000H,双字数据为H,则
LDSSI,[3000H];
DS=1234H,SI=5678H
LESDI,[3000H];
ES=1234H,DI=5678H
⒊标志传送指令
专门用于对标志寄存器进行操作
LAHF;
AH←FL,标志寄存器低8位送AH
SAHF;
FL←AH,AH的内容送标志寄存器低8位
③
PUSHF;
标志寄存器内容压栈
POPF;
栈顶内容送标志寄存器
SAHF和POPF指令将直接影响标志位,而其他传送均不会对标志位产生影响。
⒋输入/输出指令
用于主机与外设端口间的数据传送。
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中)。
四算术运算指令
⒈加法指令
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。
⒉减法指令
SUBdst,src
dst←(dst)-(src);
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=B,是-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
若乘积高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])
⒋除法指令
①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类中断。
⒌符号扩展指令
扩展带符号数的字节数
CBW
将AL中数的符号位扩展到整个AH中。
CWD
将AX中数的符号位扩展到整个DX中。
MOVAL,-16;
AL=0F0H(-16)
CBW;
AX=0FFF0H(-16)
CWD;
DXAX=0FFFFFFF0H(-16)
IDIVBX;
DX←余数,AX←商
⒍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,只影响AF、CF。
必须紧跟在加法指令之后且只能对AL中的内容进行调整。
b.DAA:
压缩型BCD数调整指令
对在AL中两个压缩型BCD数相加的结果,调整成压缩型BCD数在AL中;
如果AL中的低4位大于9或AF=1,那么,AL←AL+06H,AF←1;
如果AL中的高4位大于9或CF=1,那么,AL←AL+60H,CF←1;
影响CF、PF、AF、ZF、SF,其中CF=1说明结果大于99。
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中;
如果AL中的低4位大于9或AF=1,那么,AL←AL-06H,AH←AH-1,AF←1,CF←1,AL的高4位清0;
否则不进行操作。
影响AF、CF;
必须紧跟在减法指令之后且只能对AL中的内容进行调整。
SUBAL,BL;
AL和BL中的非压缩BCD数相减
AAS;
调整AL为正确的非压缩BCD数
b.DAS:
减法的压缩型BCD数调整指令
对在AL中两个压缩型BCD数相减的结果,调整成压缩型BCD数在AL中;
如果AL中的低4位大于9或AF=1,AL←AL-06H,AF←1;
如果AL中的高4位大于9或CF=1,AL←AL-60H,CF←1。
同DAA指令。
乘法的BCD数调整
AAM;
非压缩型BCD数调整
对AX中两个非压缩型BCD数在相乘的结果调整成两位非压缩型BCD数,高位非压缩型BCD数在AH中,低位非压缩型BCD数在AL中;
具体调整如下:
将AL中的内容除以10,商送入AH中,余数送入AL中。
影响PF、SF、ZF。
必须紧跟在乘法指令之后。
除法的BCD数调整
AAD;
用在两位非压缩型BCD数在相除之前进行调整,对AX内容进行调整,使两个未组合的十进制数相除之后可得到非组合的BCD数结果,商在AL中,余数在AH中;
AL←AH×
10+AL,AH←0。
必须紧跟在除法指令之前。
五位操作指令(包括逻辑运算指令、移位指令)
⒈逻辑运算指令
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)
⑤
TESTdst,src
(dst)∩(src)
其余同AND指令
指令执行后,目的操作数的值保持不变。
⒉移位指令
移位次数cnt可以是1,若移位次数大于1时,必须放在CL中,移位结束后,CL值不变。
影响AF以外的各标志位,而AF不定;
当cnt=1时,OF才有意义,当移位前操作数的最高两位相同时,移位后OF=0,当操作数的最高两位不同时,OF=1。
①SALdst,cnt算术左移指令
SHLdst,cnt逻辑左移指令
通用寄存器或存储器的8位或16位内容。
②SARdst,cnt算术右移指令
③SHRdst,cnt逻辑右移指令
⒊循环移位指令
只影响CF和OF,同样只有当cnt=1时,OF才有意义。
操作数同移位指令
①ROLdsr,cnt循环左移指令
②RORdst,cnt循环右移指令
③RCLdst,cnt带进位循环左移指令
④RCRdst,cnt带进位循环右移指令
六程序控制指令
用来控制程序的执行顺序。
程序的执行顺序是由CS和IP确定的
转移指令可分为:
段间转移(也称远转移):
目标属性为FAR,同时改变CS和IP;
段内转移(也称近转移):
目标属性为NEAR,仅改变IP。
无论是段间转移还是段内转移都有直接转移和间接转移之分:
直接转移:
在转移指令中直接指明目标地址;
间接转移:
转移的目标地址间接存储于某一寄存器或存储单元中,若用寄存器间接转移,只能完成段内间接转移。
转移还有绝对转移和相对转移之分:
段内相对转移:
目标地址是IP当前值加一个偏移量;
段内绝对转移:
以新的值代替当前值。
在8086指令系统中,段内直接转移都是相对转移;
段内间接转移都是绝对转移;
段间转移都是绝对转移。
8086提供了四种程序控制指令,即:
无条件转移指令、条件转移指令、循环控制指令和中断指令。
除中断指令外,其它转移指令都不影响状态标志。
⒈无条件转移指令
JMPtarget
无条件转移指令到目标地址target去执行程序。
目标地址的形式有五种:
短标号:
段内直接转移,范围不超过-128~+127字节,属相对转移;
近标号:
段内直接转移,范围是段内任何地方,属相对转移;
远标号:
段间直接转移,范围是存储器任何地方,属绝对转移;
通用寄存器:
段内间接转移,范围是段内任何地方,属绝对转移;
存储器变量:
当是字类型时,为段内间接转移,,属绝对转移;
当是双字类型时,为段间间接转移,,属绝对转移。
CALLproc-name
保护程序断点:
段内调用:
当前IP内容压栈;
段间调用:
先把CS内容压栈,再把IP内容压栈。
无条件转移到目标地址:
IP←目标地址偏移地址或寄存器内容;
IP←目标地址偏移地址或DS:
[寄存器]低字;
CS←目标地址的段地址或DS:
[寄存器]高字。
目标地址的形式只是没有段内直接短调用,其余同JMP指令,但子程序名(过程名)必须定义类型名(近过程还是远过程)。
RETpop-val
执行与CALL指令相反的操作,从子程序返回到主程序。
若该指令不带操作数:
段内返回:
IP←栈顶字,SP←SP+2;
短间返回:
CS←栈顶字,SP←SP+2。
若该指令带有立即操作数:
在上述功能完成后,再SP←SP+立即数。
⒉条件转移指令
是以标志位的状态或者以标志位的逻辑运算结果作为转移条件,如果满足转移条件,则转移到指定的目标地址,如果不满足转移条件,则继续执行下一条指令。
全部条件转移指令都是段内直接转移,转移地址的偏移量限制在-128~+127范围内。
指令中,条件缩写字母的含义是:
A:
Above高于B:
Below低于C:
Carry进位E:
Equal等于
G:
Greater大于L:
Less小于N:
Not无O:
Over溢出
S:
Sign符号PE:
ParityEven奇偶性偶PO:
ParityOdd奇偶性奇
分为单个状态条件转移,无符号数条件转移,有符号数条件转移三种。
见表3.1
表3.1程序控制指令
分类
指令格式
功能
条件
说明
无条
件转
移
JMPtarget
CALLproc-name
RETpop-val
无条件转移
调用子程序
返回主程序
条
件
转
JZ/JEshort-label
JNZ/JNEshort-label
JP/JPEshort-label
JNP/JPOshort-label
JOshort-label
JNOshort-label
JCshort-label
JNCshort-label
JSshort-label
JNSshort-label
JB/JNAEshort-label
JNB/JAEshort-label
JA/JNBEshort-label
JNA/JBEshort-label
JL/JNGEshort-label
JNL/JGEshort-label
JG/JNLEshort-label
JNG/JLEshort-label
相等转移
不相等转移
结果为偶转移
结果为奇转移
溢出转移
无溢出转移
有进(借)位转移
无进(借)位转移
符号位为1转
符号位为0转
低于/不高于等于转
不低于/高于等于转
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第3章 8086CPU指令系统 8086 CPU 指令系统
![提示](https://static.bdocx.com/images/bang_tan.gif)