完整版8086汇编语言速成秘籍.docx
《完整版8086汇编语言速成秘籍.docx》由会员分享,可在线阅读,更多相关《完整版8086汇编语言速成秘籍.docx(32页珍藏版)》请在冰豆网上搜索。
完整版8086汇编语言速成秘籍
一、8086编程结构
8086汇编总结
二、状态标志寄存器F
三、寻址方式{(PA物理地址=实际地址=绝对地址=cpu以实际地址访问存储器)
=段基址*10H+(逻辑地址=偏移地址=有效地址EA=程序以逻辑地址编址)}
寻址方式
操作数物理地址(PA)
指令格式举例
立即寻址
操作数在指令中直接给出
源操作数为地址
MOVDX,100H;(DX)←100H
寄存器寻址
操作数在寄存器中
操作数需要寻址
ADDAX,BX;(AX)←(AX)+(BX)
直接寻址
操作数的有效地址由指令直接给出
操作数需要计算
MOVAX,[100];(AX)←(100)
寄存器间接寻址
PA=(DS)|(SS)×16+
(BX)|(SI)|(DI)|(BP)
给出的均为操作数的逻辑地址,而且将逻辑地址分成几段,经计算才能得到操作数
MOVAX,[BX];
(AX)←((DS)×16+(BX))
寄存器相对寻址
PA=(DS|SS)×16+
(BX|BP|SI|DI)+偏移量
MOVAL,OFFSET[SI];
(AL)←((DS)×16+(SI)+OFFSET)
基址变址寻址
PA=(DS|SS)×16+
(BP|BX)+(SI|DI)
MOVAX,[BX+DI];
(AX)←((DS)×16+(BX)+(DI))
相对基址变址寻址
PA=(DS|SS)×16+(BX|BP)+(SI|DI)+偏移量
MOVAX,OFFSET(BX+DI);
(AX)←((DS)×16+(BX)+(DI)+OFFS
ET)
B——二进制D——十进制Q——八进制H——十六进制
四、符号约定及含义
五、CMP指令的结果判断方法
<0
<0
A>B
0
0
0
(SF异或OF)或
ZF=1
A<=B
A
B
A=B
0
1
0
输入
INAL/AX,port
(acc)←(port)
AX字节,
10
2
直接寻址,port地址范围
输出指
OUTport,AL/AX
(port)←(acc)
AL字,
10
2
0-255(0ffh)
令
INAL/AX,DX
(acc)←((DX))
DX不是操
8
1
间接寻址,端口地址在DX
作数而是地
中,范围0-65535(0ffffh)
OUTport,DX
((DX))←(acc)
8
1
址
地址传送指令
(对逻辑地址操作)
LEAreg,src取
有效地址指令
r16←mem的EA
r16,mem
2+EA
2~4
L为取的意思操作数均为16位
LDSreg,src地
址指针装入DS
r16←m32的底16位
(DS)←m32的高16位
r16,m32
16+EA
2~4
LESreg,src地址
指针装入ES
r16←m32的底16位
(ES)←m32的高16位
r16,m32
16+EA
2~4
标志传
LAHF取标志
(AH)←(F低8位字节)
隐含操作数
4
1
F
送指令
SAHF置标志
(F低8位字节)←(AH)
隐含操作数
4
1
15
7
SF
(唯一
PUSHF标志入栈
(SP)←(SP)-2(先入栈)
隐含操作数,
10
1
14
6
ZF
对F寄
指令
标志寄存器
13
5
存器操
((SP)+1,(SP))←F
入栈
12
4
AF
一、指令表(指令分六大类)
POPF标志弹出指令
F←((SP)+1,(SP))
(SP)←(SP)+2(出栈)
隐含操作数,数据出栈到
标志寄存器
8
1
10
DF
2
PF
9
IF
1
8
TF
0
CF
2、算术运算指令(都对F寄存器产生影响)
类型
汇编指令格式
功
能
操作数说明
时钟周期数
字节数
说明
辅助运
CBW
AX←AL
字节扩展到
不影响标志位
算指
字
AL<80H时AH=00H,AL>=80H时AH=FFH
令
CWD
DXAX←AX
字扩展到双
AX<8000H时DX=0000H,AX>=8000H时DX=FFFFH
字
对于符号数:
最高位为0表示正,为1表示负
BCD
数
(算术运算结果
)调整指令
DAA
(AL)←(AX)/(src)的
4
1
压缩BCD数
商
加法调整
(AH)←(AX)/(src)的
余数
(AX)←(DX,AX)/
(src)的商
(DX)←(DX,AX)/
(src)的余数
DAS
(AL)←(AX)/(src)的
4
1
压缩BCD数
商
减法调整
(AH)←(AX)/(src)的
余数
(AX)←(DX,AX)/
(src)的商
(DX)←(DX,AX)/
(src)的余数
AAA加法
(AL)←AL中的和调整
4
1
ASCII码调整
为组合BCD
AAS减法
(AL)←AL中的差调整
4
1
ASCII码调整
为组合BCD
AAM
(AL)←AL中的和调整为
83
2
乘法
非组合BCD
ASCII码调整
(AH)←(AH)+调整产
生的进位值
AAD
(AL)←AL中的差调整为
60
2
除法
非组合BCD
ASCII码调整
(AH)←(AH)-调整产生
的进位值
除
DIV
src
Src字节AL←AX÷src商,
8位reg
80~90
2
不影响标志位除非溢出
(算术
AH←AX÷src余数,Src
8位mem
(86~96)+EA
2~4
不能是压缩的BCD数
运算指
字AX←DXAX÷src商,
16位reg
144~162
2
令)
DX←DXAX÷src余数
16位mem
(150~168)+EA
2~4
IDIV
src
Src字节AL←AX÷src商,
8位reg
101~112
2
AH←AX÷src余数,Src
8位mem
(107~118)+EA
2~4
字AX←DXAX÷src商,
16位reg
165~184
2
DX←DXAX÷src余数
16位mem
(171~190)+EA
2~4
加
ADDdst,src
(dst)←(src)+(dst)
mem,reg
16+EA
2~4
操作数类型:
(算术
reg,mem
9+EA
2~4
无符号二进制数,
运算指
reg,reg
3
2
带符号位二进制数,
令)
reg,imm
4
3~4
无符号压缩BCD数,
mem,imm
17+EA
3~6
无符号非压缩BCD数。
acc,imm
4
2~3
dest与src不能同时为内存
ADCdst,src
(dst)←(src)+(dst)+
mem,reg
16+EA
2~4
操作数。
带进位加法
CF(最高位进位标志
reg,mem
9+EA
2~4
符,有进位为1,否则
reg,reg
3
2
为0)
reg,imm
4
3~4
mem,imm
17+EA
3~6
acc,imm
4
2~3
INC
dest
(dest)←(dest)+1
reg
2~3
1~2
mem
15+EA
2~4
减
SUBdest,src
(dst)←(src)-(dst)
mem,reg
16+EA
2~4
操作数类型:
(算术
reg,mem
9+EA
2~4
无符号二进制数,
运算指
reg,reg
3
2
带符号位二进制数,
令)
reg,imm
4
3~4
无符号压缩BCD数,
mem,imm
17+EA
3~6
无符号非压缩BCD数。
SBBdest
(dst)←(src)-(dst)-CF
mem,reg
16+EA
2~4
dest与src不能同时为内存
,src
reg,mem
9+EA
2~4
操作数。
带进位减法
reg,reg
3
2
reg,imm
4
3~4
mem,imm
17+EA
3~6
DEG
dest
(dest)←(dest)-1
reg
2~3
1~2
mem
15+EA
2~4
NEGdest
(dest)←0-(dest)
reg
3
2
就是求相反数。
求补指令
mem
16+EA
2~4
按位取反,末位加1.
CMPdest,src
(dest)-(src)
mem,reg
9+EA
2~4
目的操作数减去源操作数。
比较指令
reg,mem
9+EA
2~4
比较结果见附表
reg,reg
3
2
reg,imm
4
3~4
mem,imm
10+EA
3~6
乘
MULsrc
Src为字节:
(AX)←
8位reg
70~77
2
不能是压缩的BCD数
(算术
(AL)*(src)
8位mem
(76~83)+EA
2~4
不能是立即数
运算指
Src为字:
(DX,AX)←
16位reg
118~133
2
仅影响标志位OF\CF
令)
(AX)*(src)
16位mem
(124~139)+EA
2~4
IMULsrc
Src为字节:
(AX)←
8位reg
80~98
2
(AL)*(src)
8位mem
(86~104)+EA
2~4
Src为字:
(DX,AX)←
16位reg
128~154
2
(AX)*(src)
16位mem
(134~160)+EA
2~4
3、位操作指令
逻辑运算指令
ANDdst,src
(dst)←(dst)∧(src)
mem,reg
16+EA
2~4
reg,mem
9+EA
2~4
reg,reg
3
2
reg,imm
4
3~4
mem,imm
17+EA
3~6
acc,imm
4
2~3
ORdst,src
(dst)←(dst)∨(src)
mem,reg
16+EA
2~4
reg,mem
9+EA
2~4
reg,reg
3
2
reg,imm
4
3~4
mem,imm
17+EA
3~6
acc,imm
4
2~3
NOTop1
(op1)←(op1)
reg
3
2
mem
16+EA
2~4
XORdst,src
(dst)←(dst)⊕(src)
mem,reg
16+EA
2~4
reg,mem
9+EA
2~4
reg,reg
3
2
reg,imm
4
3~4
mem,imm
17+EA
3~6
acc,imm
4
2~3
TESTdst,src
(dst)∧(src)
reg,mem
9+EA
2~4
reg,reg
3
2
影响标志位,不保留运算
reg,imm
5
3~4
结果
mem,imm
11+EA
3~6
acc,imm
4
2~3
移位
SHLdst,1
逻辑左移
reg
2
2
指令
mem
15+EA
2~4
SHLdst,CL
reg
8+4/bit
2
可以使数变为原来的2的
mem
20+EA+4/bit
2~4
CL次方倍
SALdst,1
算术左移
reg
2
2
mem
15+EA
2~4
SALdst,CL
reg
8+4/bit
2
mem
20+EA+4/bit
2~4
SHRdst,1
逻辑右移
reg
2
2
mem
15+EA
2~4
可以使数变为原来的2的
SHRdst,CL
reg
8+4/bit
2
CL次方分之一
mem
20+EA+4/bit
2~4
SARdst,1
算术右移
reg
2
2
mem
15+EA
2~4
SARdst,CL
reg
8+4/bit
2
mem
20+EA+4/bit
2~4
循环移位指令
ROLop1,1
不带进位循环左移
reg
2
2
mem
15+EA
2~4
ROLop1,CL
reg
8+4/bit
2
mem
20+EA+4/bit
2~4
RORop1,1
不带进位循环右移
reg
2
2
mem
15+EA
2~4
RORop1,CL
reg
8+4/bit
2
mem
20+EA+4/bit
2~4
RCLop1,1
带进位位的循环左移
reg
2
2
mem
15+EA
2~4
RCLop1,CL
reg
8+4/bit
2
mem
20+EA+4/bit
2~4
RCRop1,1
带进位位的循环右移
reg
2
2
mem
15+EA
2~4
RCRop1,CL
reg
8+4/bit
2
mem
20+EA+4/bit
2~4
4、串操作指令
串
MOVSdest,sr
字节
原串存入数据段DS中
传送
c
((ES:
DI))←((DS:
SI))
不重复:
18
1
目标串存入附加段ES中
MOVSB
(SI)←(SI)±1,
重复:
(DI)←(DI)±1
9+17/rep
指令STD使DF为1
字
指令CLD使DF为0
MOVSW
((ES:
DI))←((DS:
SI))
不重复:
18
1
(SI)←(SI)±2,
重复:
(DI)←(DI)±2
9+17/rep
串送存
STOSdest
字节
不重复:
11
STOSB
((ES:
DI))←(AL)
重复:
1
(DI)←(DI)±1
9+10/rep
STOSW
字
不重复:
11
1
((((ES:
DI))))←(AX)
重复:
(DI)←(DI)±2
9+10/rep
串
LODSsrc
字节
不重复:
12
装入
LODSB
(AL)←((DS:
SI))
重复:
1
(SI)←(SI)±1
9+13/rep
LODSW
字
不重复:
12
1
(AX)←((DS:
SI))
重复:
(SI)←(SI)±2
9+13/rep
CMPS
字节
串比较
src,dest
((DS:
SI))-((ES:
DI))
不重复:
22
1
CMPSB
(SI)←(SI)±1,
重复:
(DI)←(DI)±1
9+22/rep
字
CMPSW
((DS:
SI))-((ES:
DI))
不重复:
22
1
(SI)←(SI)±2,
重复:
(DI)←(DI)±2
9+22/rep
SCASdest
字节
不重复:
15
1
串扫描
SCASB
(AL)-((ES:
DI))
重复:
(DI)←(DI)±1
9+15/rep
SCASW
字
不重复:
15
1
(AX)←((ES:
DI))
重复:
(DI)←(DI)±2
9+15/rep
REP
无条件重复前缀
(CX)=0退出重复,否则(CX)←(CX)-1并执
行其后的串指令
2
1
REPE/REPZ
相等重复前缀
(CX)=0或(ZF)=0退出
重复,否则(CX)←(CX)
-1并执行其后的串指令
2
1
REPNE/REPNZ
不相等重复前缀
(CX)=0或(ZF)=1退出
重复,否则(CX)←(CX)
-1并执行其后的串指令
2
1
5、控制转移指令(分四类)
1
转移指令
无条件跳转
JMPSHORT
无条件转移
15
2
op1
15
3
JMPNEARPTR
15
5
op1
reg
11
2
JMPFARPTR
mem
18+EA
2~4
op1
24+EA
2~4
JMPWORDPTR
op1
JMPDWORDPTRop1
条件跳转
JZ/JEop1
ZF=1则转移
16/4
2
JNZ/JNEop1
ZF=0则转移
16/4
2
JSop1
SF=1则转移
16/4
2
JNSop1
SF=0则转移
16/4
2
JP/JPEop1
PF=1则转移
16/4
2
JNP/JPOop1
PF=0则转移
16/4
2
JCop1
CF=1则转移
16/4
2
JNCop1
CF=0则转移
16/4
2
JOop1
OF=1则转移
16/4
2
JNOop1
OF=0则转移
16/4
2
JB/JNAEop1
CF=1且ZF=0则转移
16/4
2
JNB/JAEop1
CF=0或ZF=1则转移
16/4
2
JBE/JNAop1
CF=1或ZF=1则转移
16/4
2
JNBE/JAop1
CF=0且ZF=0则转移
16/4
2
JL/JNGEop1
SF⊕OF=1则转移
16/4
2
JNL/JGEop1
SF⊕OF=0则转移
16/4
2
JLE/JNGop1
SF⊕OF=1或ZF=1则
16/4
2
转移
JNLE/JGop1
SF⊕OF=0且ZF=0则
16/4
2
转移
JCXZop1
(CX)=0则转移
18/6
2
2
循环控制
循环LOOPop1
(CX)≠0则循环
17/5
2
用CX作循环次数寄存器
op1为循环位置处的标号
相等循环
LOOPZ/LOOPEop1
(CX)≠0且ZF=1则循
环
18/6
2
不相等循环
LOOPNZ/LOOPNEop1
(CX)≠0且ZF=0则循
环
19/5
2
3
过程调用
CALLdst
段内直接:
19
3
(SP)←(SP)-2,((SP)+1,
(SP)←(IP)
(IP)←(IP)+D16段
reg
16
2
内间接:
mem
21+EA
2~4
(SP)←