(完整版)8086汇编语言速成秘籍
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
将逻辑地址分成几段, MOV AL,OFFSET[SI];
经计算才能得到操作 (AL)←((DS)×16+(SI)+OFFSET)
数
MOV AX,[BX+DI];
(AX)←((DS)×16+(BX)+(DI))
1
hing at a time and All things in their being are good for somethin
为 0)
reg, imm
mem, imm
acc, imm
(dest) ← (dest)+1
reg mem
(dst) ← (src) - (dst)
mem, reg reg, mem
reg, reg
reg, imm
mem, imm
(dst) ← (src) - (dst) - CF mem, reg reg, mem
PUSH src 入栈
(SP) ← (SP)-2
r16
((SP)+1, (SP)) ← (src) seg
m16
11 10 16+EA
POP dst 出栈
(dst) ← ((SP)+1, (SP)) r16
(SP) ← (SP)+2
seg
m16
8 8 17+EA
XCHG dest, src 数据交换指令
reg, imm 4
reg, reg
2
mem, reg 9+EA
mem, seg 9+EA
mem, imm 10+EA
seg, reg
2
seg, mem 8+EA
字节数 2
2~4 2~3
2 2~4 2~4 3~6
2 2~4
说明 Cs 不能做目标操作数,不 能被赋值。 段寄存器之间不能传输数据。
目标操作数和源操作数不能 同时为内存操作数(存储器 操作数)。 寄存器中的数为操作数地址 时为内存操作数,如【XX】。
(des) ←→ (src)
reg, mem reg, reg
17+EA 4
mem, reg 3
XLAT
AL←DS 中逻辑地址为
11
换码指令
(BX+AL)的内存单元
输入 输出指 令
IN AL/AX, port OUT port, AL/AX IN AL/AX,DX
(acc) ← (port) (port) ← (acc) (acc) ← ((DX))
000 101 100
001 100
(SF 异或 OF)或 ZF=0
SF 异或 OF=0
A>B A>=B
2
hing at a time and All things in their being are good for somethin
8086 汇编总结
<0 <0 A>B
A B A=B
000 010
(150~168)+EA 101 ~ 112 (107~118)+EA 165 ~ 184
2~4 2
2~4 2
DX←DX AX÷src 余数 16 位 mem (171~190)+EA 2 ~ 4
4
hing at a time and All things in their being are good for somethin
操作数均隐含
2
直接寻址,port 地址范围
2
0-255(0ffh)
1
间接寻址,端口地址在 DX
1
中,范围 0-65535(0ffffh)
2~4 2~4
L 为取的意思 操作数均为 16 位
2~4
1
F
1
15
7 SF
1
14
6 ZF
13
5
12
4 AF
11 OF 3
hing at a time and All things in their being are good for somethin
8086 汇编总结 POPF 标志弹出 指令
类型 辅助运 算指 令
汇编指令格式 CBW
CWD
B
DAA
C
压缩 BCD 数
D
加法调整
数
(
算
术
运
算
DAS
结
压缩 BCD 数
果
减法调整
)
调
整
指
令
AAA 加法 ASCII 码调整
AAS 减法 ASCII 码调整
AAM 乘法
ASCII 码调整
AAD 除法 ASCII 码调整
用 SP 堆栈指针
给出栈顶偏移地址
寄 SI 源变址寄存器
存器 DI
目的变址寄存器
数据寄存器
指针寄存器 堆栈段偏移地址 变址寄存器 数据段偏移地址
标志 F 标志寄存器
,
标志寄存器
总线 段 接口 寄 部件 存 BIU 器
CS 代码段 DS 数据段 ES 附加段 SS 堆栈段
不能被赋值 复位后为 FFFFH 复位后为 0000H
标志寄存器
存器操 作)
((SP)+1, (SP)) ← F
入栈
3
1 1 2~4 1 1 2~4 2~4 2 1 1
栈底为高地址 高字节先入栈 每次两个字节参与(16 位) 基地址在 ss 中 偏移地址在 sp 中 调用或中断时保存返回地址 两者互换,但不能同时为存 储器操作数,存储内容互换 要借助通用寄存器
一个 8 位或 16 位存储器操作数
m32
一个 32 位的存储器操作数
dest
目标操作数
src
源操作数
port
I/O 端口
五、CMP 指令的结果判断方法
大小关系 A-B 相关标志位
ZF
CF
A>B
0
0
ZF=1
立即数
AH AL BH BL CH CL DH DL AX BX CX DX BP SP SI DI DS CS ES SS
NG
PL
PF 奇偶标志
1 底八位有偶数个 1,0 结果有奇数个
PE
PO
1
OF 溢出标志
1 最高位有进位 ,0 最高位没进
OV
NV
位
DF
方向标志
DN
UP
IF
中断允许标志
控制标志位
EI
DI
TF
跟踪标志
三、寻址方式{(PA 物理地址=实际地址=绝对地址=cpu 以实际地址访问存储器)
=段基址*10H+(逻辑地址=偏移地址=有效地址 EA=程序以逻辑地址编址)}
OUT port,DX
((DX)) ← (acc)
AX 字节, 10
AL 字,
10
DX 不是操 8
作数而是地 8 址
地址传 送指令
LEA reg, src 取 r16←mem 的 EA 有效地址指令
r16, mem 2+EA
(对逻 辑地址 操作)
LDS reg, src 地 址指针装入 DS LES reg, src 地址 指针装入 ES
存放堆栈基地址
存储器
IP IP 指令指针寄存器器
指令指针寄存器
二、状态标志寄存器 F
标志位名
功能
为 1 对应符
为 0 对应符
CF 进位标志
1 最高位产生进位
CY
NC
AF 辅助进位标志
1 低四位产生进位
AC
NA
ZF 零标志
1 结果为 0
,0 结果不为 0
ZR
NZ
SF 符号标志
1 结果为负
,0 结果为正
寻址方式
操作数物理地址(PA)
指令格式举例
立即寻址 寄存器寻址 直接寻址 寄存器间接寻址
寄存器相对寻址
基址变址寻址
操作数在指令中直接给出 操作数在寄存器中 操作数的有效地址由指令直接给出 PA=(DS)|(SS)×16+
(BX)|(SI)|(DI)|(BP) PA=(DS|SS)×16+
wk.baidu.com(BX|BP|SI|DI)+偏移量 PA=(DS|SS)×16+
(DX) ← (DX, AX) / (src) 的余数
(AL) ← AL 中的和调整
4
1
为组合 BCD
(AL) ← AL 中的差调整
4
1
为组合 BCD
(AL) ← AL 中的和调整为 非组合BCD
83
2
(AH) ← (AH)+调整产 生的进位值
(AL) ← AL 中的差调整为 非组合BCD
60
2
(AH) ← (AH)-调整产生 的进位值
i8
一个 8 位立即数
i16
一个 16 位立即数
imm
一个 8 位或 16 位立即数
r8
一个 8 位通用寄存器
r16
一个 16 位通用寄存器或专用寄存器
reg
一个 8 位或 16 位通用寄存器或专用寄存器
seg
一个 16 位段寄存器
m8
一个 8 位的存储器操作数
m16
一个 16 位的存储器操作数
mem
4
1
商
(AH) ← (AX) / (src) 的 余数
(AX) ← (DX, AX) / (src) 的商
(DX) ← (DX, AX) / (src) 的余数
(AL) ← (AX) / (src) 的
4
1
商
(AH) ← (AX) / (src) 的 余数
(AX) ← (DX, AX) / (src) 的商
判断依据
无
符
号 A=B
CF=1
A<B
CF 或 ZF=0
A>B
A=B
1
0
CF=0
A>=B
A<B
0
1
CF 或 ZF=1
A<=B
A B 大小关 系
>0 >0 A>B
相关标志位 SF ZF OF 000
判断条件 ZF=1
大小关系 有
符
A=B
号
>0 >0 A<B
100
SF 异或 OF=1
A<B
>0 <0 A>B <0 >0 A<B <0 <0 A<B
8086 汇编总结 相对基址变址寻址
PA=(DS|SS)×16+ (BX|BP)+(SI|DI)+偏移量
程伟整理 MOV AX, OFFSET (BX+DI); (AX)←((DS)×16+(BX)+(DI)+OFFS ET)
B——二进制
D——十进制
Q——八进制
H——十六进制
四、符号约定及含义
符号
含义
hing at a time and All things in their being are good for somethin
8086 汇编总结
程伟整理
8086 汇编总结
一、8086 编程结构
执 通 AX 累加器
行 用 BX 基数寄存器
部 寄 CX 计数器
件
存器 DX
数据寄存器
EU
专 BP 基数指针
说明
AX←AL
字节扩展到
不影响标志位
字
AL<80H 时 AH=00H , AL>=80H 时 AH=FFH
DXAX←AX
字扩展到双 AX<8000H 时 DX=0000H, AX>=8000H 时 DX=FFFFH
字
对于符号数:最高位为 0 表示正,为 1 表示负
(AL) ← (AX) / (src) 的
r16 ←m32 的底 16 位 (DS) ←m32 的高 16 位 r16 ←m32 的底 16 位 (ES) ←m32 的高 16 位
r16, m32 r16, m32
16+EA 16+EA
标志传 送指令 (唯一 对F寄
LAHF 取标志 SAHF 置标志 PUSHF 标志入栈 指令
(AH) ← (F 低 8 位字节) 隐含操作数 4 (F 低 8 位字节) ← (AH) 隐含操作数 4 (SP) ← (SP)-2(先入栈) 隐含操作数, 10
(SF 异或 OF)或 ZF=1
A<=B
程伟整理
一、指 令 表(指令分六大类) 1、数据传送类(只有标志传送指令对 F 寄存器影响)
类型 通 用 数 据 传 送 指 令
汇编指令格式 MOV dest, src 数据传送指令
功
能
(dest) ← (src)
操作数说明 时钟周期数
reg, seg
2
reg, mem 8+EA
8086 汇编总结
加
ADD dst, src
(算术
运算指
令)
ADC dst, src 带进位加法
INC dest
减 (算术 运算指 令)
SUB dest, src
SBBdest ,src 带进位减法
DEG dest
NEG dest 求补指令 CMP dest, src 比较指令
乘 (算术 运算指 令)
Src 字节AL←AX÷src 商, 8 位 reg
80 ~ 90
2
不影响标志位除非溢出
AH←AX÷src 余数,Src 8 位 mem 字 AX←DX AX÷src 商, 16 位 reg
(86~96)+EA 144 ~ 162
2~4 2
不能是压缩的 BCD 数
DX←DX AX÷src 余数 16 位 mem Src 字节AL←AX÷src 商, 8 位 reg AH←AX÷src 余数,Src 8 位 mem 字 AX←DX AX÷src 商, 16 位 reg
除 (算术 运算指 令)
DIV src IDIV src
程伟整理
F← ((SP)+1, (SP)) (SP) ← (SP)+2(出栈)
隐含操作数, 8 数据出栈到 标志寄存器
1
10 DF 2 PF
9 IF 1
8 TF 0 CF
2、算术运算指令 (都对 F 寄存器产生影响)
功
能
操作数说明 时钟周期数 字节数
(BP|BX)+(SI|DI)
源操作数为地址 操作数需要寻址
MOV DX,100H ; (DX)←100H ADD AX,BX ; (AX)←(AX)+(BX)
操作数需要计算 MOV AX,[100] ; (AX)←(100)
给出的均为操作 MOV AX,[BX] ;
数的逻辑地址,而且 (AX)←((DS)×16+(BX))
MUL src IMUL src
(dst) ← (src) + (dst)
mem, reg reg, mem
reg, reg
reg, imm
mem, imm
acc, imm
(dst) ← (src) + (dst) + mem, reg CF(最高位进位标志 reg, mem
符,有进位为 1,否则 reg, reg