汇编语言速成秘籍.docx
- 文档编号:23137234
- 上传时间:2023-05-08
- 格式:DOCX
- 页数:60
- 大小:28.02KB
汇编语言速成秘籍.docx
《汇编语言速成秘籍.docx》由会员分享,可在线阅读,更多相关《汇编语言速成秘籍.docx(60页珍藏版)》请在冰豆网上搜索。
汇编语言速成秘籍
8086汇编_总结
一、8086编程结构
执
行
部
件
EU
通用寄存器
AX
累加器
数据寄存器
BX
基数寄存器
CX
计数器
DX
数据寄存器
专用寄存器
BP
基数指针
指针寄存器
堆栈段偏移地址
SP
堆栈指针
给出栈顶偏移地址
SI
源变址寄存器
变址寄存器
数据段偏移地址
DI
目的变址寄存器
标志
F
标志寄存器
标志寄存器
总线
接口
部件
BIU
段
寄
存
器
CS
代码段
不能被赋值复位后为FFFFH
存储器
DS
数据段
复位后为0000H
ES
附加段
SS
堆栈段
存放堆栈基地址
IP
IP
指令指针寄存器器
指令指针寄存器
二、状态标志寄存器F
标志位名
功能
为1对应符
为0对应符
CF
进位标志
1最高位产生进位
CY
NC
AF
辅助进位标志
1低四位产生进位
AC
NA
ZF
零标志
1结果为0,0结果不为0
ZR
NZ
SF
符号标志
1结果为负,0结果为正
NG
PL
PF
奇偶标志
1底八位有偶数个1,0结果有奇数个1
PE
PO
OF
溢出标志
1最高位有进位,0最高位没进位
OV
NV
DF
方向标志
控制标志位
DN
UP
IF
中断允许标志
EI
DI
TF
跟踪标志
三、寻址方式{(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)+OFFSET)
B——二进制D——十进制Q——八进制H——十六进制
四、符号约定及含义
符号
含义
i8
一个8位立即数
立即数
i16
一个16位立即数
imm
一个8位或16位立即数
r8
一个8位通用寄存器
AHALBHBLCHCLDHDL
r16
一个16位通用寄存器或专用寄存器
AXBXCXDXBPSPSIDI
reg
一个8位或16位通用寄存器或专用寄存器
seg
一个16位段寄存器
DSCSESSS
m8
一个8位的存储器操作数
m16
一个16位的存储器操作数
mem
一个8位或16位存储器操作数
m32
一个32位的存储器操作数
dest
目标操作数
src
源操作数
port
I/O端口
五、CMP指令的结果判断方法
大小关系A-B
相关标志位
判断依据
无符号
ZF
CF
A>B
0
0
ZF=1
A=B
CF=1
A
CF或ZF=0
A>B
A=B
1
0
CF=0
A>=B
A
0
1
CF或ZF=1
A<=B
A
B
大小关系
相关标志位
判断条件
大小关系
有符号
SF
ZF
OF
>0
>0
A>B
0
0
0
ZF=1
A=B
>0
>0
A
1
0
0
SF异或OF=1
A
>0
<0
A>B
0
0
0
(SF异或OF)或ZF=0
A>B
1
0
1
<0
>0
A
1
0
0
0
0
1
<0
<0
A
1
0
0
SF异或OF=0
A>=B
<0
<0
A>B
0
0
0
(SF异或OF)或ZF=1
A<=B
A
B
A=B
0
1
0
一、指令表(指令分六大类)
1、数据传送类(只有标志传送指令对F寄存器影响)
类型
汇编指令格式
功能
操作数说明
时钟周期数
字节数
说明
通
用
数
据
传
送
指
令
MOVdest,src
数据传送指令
(dest)←(src)
reg,seg
reg,mem
reg,imm
reg,reg
mem,reg
mem,seg
mem,imm
seg,reg
seg,mem
2
8+EA
4
2
9+EA
9+EA
10+EA
2
8+EA
2
2~4
2~3
2
2~4
2~4
3~6
2
2~4
Cs不能做目标操作数,不能被赋值。
段寄存器之间不能传输数据。
目标操作数和源操作数不能同时为内存操作数(存储器操作数)。
寄存器中的数为操作数地址时为内存操作数,如【XX】。
PUSHsrc
入栈
(SP)←(SP)-2
((SP)+1,(SP))←(src)
r16
seg
m16
11
10
16+EA
1
1
2~4
栈底为高地址
高字节先入栈
每次两个字节参与(16位)
基地址在ss中
偏移地址在sp中
调用或中断时保存返回地址
POPdst
出栈
(dst)←((SP)+1,(SP))
(SP)←(SP)+2
r16
seg
m16
8
8
17+EA
1
1
2~4
XCHGdest,src
数据交换指令
(des)←→(src)
reg,mem
reg,reg
mem,reg
17+EA
4
3
2~4
2
1
两者互换,但不能同时为存储器操作数,存储内容互换要借助通用寄存器
XLAT
换码指令
AL←DS中逻辑地址为(BX+AL)的内存单元
11
1
操作数均隐含
输入输出指令
INAL/AX,port
(acc)←(port)
AX字节,AL字,DX不是操作数而是地址
10
2
直接寻址,port地址范围
0-255(0ffh)
OUTport,AL/AX
(port)←(acc)
10
2
INAL/AX,DX
(acc)←((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
标志传送指令
(唯一对F寄存器操作)
LAHF取标志
(AH)←(F低8位字节)
隐含操作数
4
1
F
15
7
SF
14
6
ZF
13
5
12
4
AF
11
OF
3
10
DF
2
PF
9
IF
1
8
TF
0
CF
SAHF置标志
(F低8位字节)←(AH)
隐含操作数
4
1
PUSHF标志入栈指令
(SP)←(SP)-2(先入栈)
((SP)+1,(SP))←F
隐含操作数,标志寄存器入栈
10
1
POPF标志弹出指令
F←((SP)+1,(SP))
(SP)←(SP)+2(出栈)
隐含操作数,数据出栈到标志寄存器
8
1
2、算术运算指令(都对F寄存器产生影响)
类型
汇编指令格式
功能
操作数说明
时钟周期数
字节数
说明
辅助运算指令
CBW
AX←AL
字节扩展到字
不影响标志位
AL<80H时AH=00H,AL>=80H时AH=FFH
AX<8000H时DX=0000H,AX>=8000H时DX=FFFFH
对于符号数:
最高位为0表示正,为1表示负
CWD
DXAX←AX
字扩展到双字
B
C
D
数
(
算
术
运
算
结
果
)
调
整
指
令
DAA
压缩BCD数加法调整
(AL)←(AX)/(src)的商
(AH)←(AX)/(src)的余数
(AX)←(DX,AX)/(src)的商
(DX)←(DX,AX)/(src)的余数
4
1
DAS
压缩BCD数减法调整
(AL)←(AX)/(src)的商
(AH)←(AX)/(src)的余数
(AX)←(DX,AX)/(src)的商
(DX)←(DX,AX)/(src)的余数
4
1
AAA加法
ASCII码调整
(AL)←AL中的和调整为组合BCD
4
1
AAS减法
ASCII码调整
(AL)←AL中的差调整为组合BCD
4
1
AAM
乘法
ASCII码调整
(AL)←AL中的和调整为非组合BCD
(AH)←(AH)+调整产生的进位值
83
2
AAD
除法
ASCII码调整
(AL)←AL中的差调整为非组合BCD
(AH)←(AH)-调整产生的进位值
60
2
除
(算术运算指令)
DIVsrc
Src字节AL←AX÷src商,AH←AX÷src余数,Src字AX←DXAX÷src商,DX←DXAX÷src余数
8位reg
8位mem
16位reg
16位mem
80~90
(86~96)+EA
144~162
(150~168)+EA
2
2~4
2
2~4
不影响标志位除非溢出
不能是压缩的BCD数
IDIVsrc
Src字节AL←AX÷src商,AH←AX÷src余数,Src字AX←DXAX÷src商,DX←DXAX÷src余数
8位reg
8位mem
16位reg
16位mem
101~112
(107~118)+EA
165~184
(171~190)+EA
2
2~4
2
2~4
加
(算术运算指令)
ADDdst,src
(dst)←(src)+(dst)
mem,reg
reg,mem
reg,reg
reg,imm
mem,imm
acc,imm
16+EA
9+EA
3
4
17+EA
4
2~4
2~4
2
3~4
3~6
2~3
操作数类型:
无符号二进制数,
带符号位二进制数,
无符号压缩BCD数,
无符号非压缩BCD数。
dest与src不能同时为内存操作数。
ADCdst,src
带进位加法
(dst)←(src)+(dst)+CF(最高位进位标志符,有进位为1,否则为0)
mem,reg
reg,mem
reg,reg
reg,imm
mem,imm
acc,imm
16+EA
9+EA
3
4
17+EA
4
2~4
2~4
2
3~4
3~6
2~3
INCdest
(dest)←(dest)+1
reg
mem
2~3
15+EA
1~2
2~4
减
(算术运算指令)
SUBdest,src
(dst)←(src)-(dst)
mem,reg
reg,mem
reg,reg
reg,imm
mem,imm
16+EA
9+EA
3
4
17+EA
2~4
2~4
2
3~4
3~6
操作数类型:
无符号二进制数,
带符号位二进制数,
无符号压缩BCD数,
无符号非压缩BCD数。
dest与src不能同时为内存操作数。
SBBdest,src
带进位减法
(dst)←(src)-(dst)-CF
mem,reg
reg,mem
reg,reg
reg,imm
mem,imm
16+EA
9+EA
3
4
17+EA
2~4
2~4
2
3~4
3~6
DEGdest
(dest)←(dest)-1
reg
mem
2~3
15+EA
1~2
2~4
NEGdest
求补指令
(dest)←0-(dest)
reg
mem
3
16+EA
2
2~4
就是求相反数。
按位取反,末位加1.
CMPdest,src
比较指令
(dest)-(src)
mem,reg
reg,mem
reg,reg
reg,imm
mem,imm
9+EA
9+EA
3
4
10+EA
2~4
2~4
2
3~4
3~6
目的操作数减去源操作数。
比较结果见附表
乘
(算术运算指令)
MULsrc
Src为字节:
(AX)←(AL)*(src)
Src为字:
(DX,AX)←(AX)*(src)
8位reg
8位mem
16位reg
16位mem
70~77
(76~83)+EA
118~133
(124~139)+EA
2
2~4
2
2~4
不能是压缩的BCD数
不能是立即数
仅影响标志位OF\CF
IMULsrc
Src为字节:
(AX)←(AL)*(src)
Src为字:
(DX,AX)←(AX)*(src)
8位reg
8位mem
16位reg
16位mem
80~98
(86~104)+EA
128~154
(134~160)+EA
2
2~4
2
2~4
3、位操作指令
逻
辑
运
算
指
令
ANDdst,src
(dst)←(dst)∧(src)
mem,reg
reg,mem
reg,reg
reg,imm
mem,imm
acc,imm
16+EA
9+EA
3
4
17+EA
4
2~4
2~4
2
3~4
3~6
2~3
ORdst,src
(dst)←(dst)∨(src)
mem,reg
reg,mem
reg,reg
reg,imm
mem,imm
acc,imm
16+EA
9+EA
3
4
17+EA
4
2~4
2~4
2
3~4
3~6
2~3
NOTop1
(op1)←(
)
reg
mem
3
16+EA
2
2~4
XORdst,src
(dst)←(dst)⊕(src)
mem,reg
reg,mem
reg,reg
reg,imm
mem,imm
acc,imm
16+EA
9+EA
3
4
17+EA
4
2~4
2~4
2
3~4
3~6
2~3
TESTdst,src
(dst)∧(src)
reg,mem
reg,reg
reg,imm
mem,imm
acc,imm
9+EA
3
5
11+EA
4
2~4
2
3~4
3~6
2~3
影响标志位,不保留运算结果
移位指令
SHLdst,1
SHLdst,CL
逻辑左移
reg
mem
reg
mem
2
15+EA
8+4/bit
20+EA+4/bit
2
2~4
2
2~4
可以使数变为原来的2的CL次方倍
SALdst,1
SALdst,CL
算术左移
reg
mem
reg
mem
2
15+EA
8+4/bit
20+EA+4/bit
2
2~4
2
2~4
SHRdst,1
SHRdst,CL
逻辑右移
reg
mem
reg
mem
2
15+EA
8+4/bit
20+EA+4/bit
2
2~4
2
2~4
可以使数变为原来的2的CL次方分之一
SARdst,1
SARdst,CL
算术右移
reg
mem
reg
mem
2
15+EA
8+4/bit
20+EA+4/bit
2
2~4
2
2~4
循环
移位
指令
ROLop1,1
ROLop1,CL
不带进位循环左移
reg
mem
reg
mem
2
15+EA
8+4/bit
20+EA+4/bit
2
2~4
2
2~4
RORop1,1
RORop1,CL
不带进位循环右移
reg
mem
reg
mem
2
15+EA
8+4/bit
20+EA+4/bit
2
2~4
2
2~4
RCLop1,1
RCLop1,CL
带进位位的循环左移
reg
mem
reg
mem
2
15+EA
8+4/bit
20+EA+4/bit
2
2~4
2
2~4
RCRop1,1
RCRop1,CL
带进位位的循环右移
reg
mem
reg
mem
2
15+EA
8+4/bit
20+EA+4/bit
2
2~4
2
2~4
4、串操作指令
串传送
MOVSdest,src
MOVSB
MOVSW
字节
((ES:
DI))←((DS:
SI))
(SI)←(SI)±1,
(DI)←(DI)±1
字
((ES:
DI))←((DS:
SI))
(SI)←(SI)±2,
(DI)←(DI)±2
不重复:
18
重复:
9+17/rep
不重复:
18
重复:
9+17/rep
1
1
原串存入数据段DS中
目标串存入附加段ES中
指令STD使DF为1
指令CLD使DF为0
串送存
STOSdest
STOSB
STOSW
字节
((ES:
DI))←(AL)
(DI)←(DI)±1
字
((((ES:
DI))))←(AX)
(DI)←(DI)±2
不重复:
11
重复:
9+10/rep
不重复:
11
重复:
9+10/rep
1
1
串装入
LODSsrc
LODSB
LODSW
字节
(AL)←((DS:
SI))
(SI)←(SI)±1
字
(AX)←((DS:
SI))
(SI)←(SI)±2
不重复:
12
重复:
9+13/rep
不重复:
12
重复:
9+13/rep
1
1
串比较
CMPSsrc,dest
CMPSB
CMPSW
字节
((DS:
SI))-((ES:
DI))
(SI)←(SI)±1,
(DI)←(DI)±1
字
((DS:
SI))-((ES:
DI))
(SI)←(SI)±2,
(DI)←(DI)±2
不重复:
22
重复:
9+22/rep
不重复:
22
重复:
9+22/rep
1
1
串扫描
SCASdest
SCASB
SCASW
字节
(AL)-((ES:
DI))
(DI)←(DI)±1
字
(AX)←((ES:
DI))
(DI)←(DI)±2
不重复:
15
重复:
9+15/rep
不重复:
15
重复:
9+15/rep
1
1
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转移指令
无条件跳转
JMPSHORTop1
JMPNEARPTRop1
JMPFARPTRop1
JMPWORDPTRop1
JMPDWORDPTRop1
无条件转移
reg
mem
15
15
15
11
18+EA
24+EA
2
3
5
2
2~4
2~4
条件跳转
JZ/JEop1
ZF=1则转移
16/4
2
JNZ/JNEop1
ZF=0则转移
16/4
2
JSop1
SF=1则转移
16/4
2
JNSop1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 速成 秘籍