1
ALU
执行部分控制电路输入 /输出控制电路地址加法器
20位
16位指令队列缓冲器8位执行部件 ( EU) 总线接口部件 ( BIU)
外部总线16位运算寄存器标志寄存器通用寄存器段寄存器DLCL
BL
AL
SI
DI
BP
SP
DH
CH
BH
AH
内部暂存器
IP
ES
SS
DS
CS
8086有几个通用寄存器,专用寄存器,段地址寄存器,都是什么?
2
8086有几个通用寄存器,专用寄存器,
段地址寄存器,都是什么?
3
第三章 8086指令系统与寻址方式控制类指令
You Can Try……
指令格式和寻址方式传送类指令数据操作类指令串操作类指令
4指令的基本构成说明 要执行的是什么操作操作对象,
可以有 0个、
1个或 2个目的 源
5指令举例:
ADD AX,[SI+6]
MOV AX,BX
操作码 操作数
INC [BX]
HLT
6
双操作数指令 ADD AX,BX
大多数运算型指令都是双操作数指令,对这种指令,有的机器(大中型)使用“三地址”指令:
除给出参加运算的两个操作数外,还要指出运算结果的存放地址。
现代微型计算机中多采用二地址指令,两个操作数分别称为,源操作数” 和,目的操作数”,指令执行后,把运算结果放到目的操作数的地址之中。
7
二,8088/8086的操作数分为 3类
1,立即数(常数)
取值范围如下表:
8位 16位无符号数 00H-FFH(0-255) 0000H-FFFFH(0-65535)
带符号数 80H-7FH(-128~127) 8000H-7FFFH(-32768~32767)
MOV AX,0FA00H ;正确
MOV 8000H,DX ;错误
8
2,寄存器操作数放在 8个 通用寄存器 或 4个 段寄存器 中的操作数 16 位
AX AH AL
16 位
BX BH BL
16 位
CX CH CL
16 位
DX DH DL
9
只能存放字操作数段寄存器存放当前操作数的段基地址不允许将立即数传送到段寄存器
SI
DI
BP
SP
CS
DS
ES
SS
10
3,存储器操作数存储器操作数字节字双字
1
2
4
类型 存储单元个数一般 不允许 两个 操作数同时为存储器操作数
11
存储单元的 物理地址 = 段基地址 + 偏移地址
若指令中没有指明所涉及的段寄存器,CPU就采用默认的段寄存器来确定操作数所在的段。
存储器操作数的偏移地址(也称有效地址)可以通过不同的寻址方式由指令给出。
例如,若 (BX)=2000H,(SI)=0A00H,(DI)=2A00H,则以下指令的结果是一样的:
MOV AL,[2A00H]
MOV AL,[BX+0A00H]
MOV AL,[BX][SI]
MOV AL,[DI]
12
一条指令的执行时间 =∑
指令的执行时间取指令取操作数执行指令传送结果单位用时钟周期数表示结论:
1)尽量使用寄存器作为操作数
2)若有可能,用移位代替乘除法
3)尽量使用简单的寻址方式
13
寻址方式 —— 寻找操作数的方法寻找操作数的地址在 8086指令系统中,说明操作数所在地址的寻址方式可分为 8种,
① 立即寻址 ⑤ 寄存器相对寻址
② 直接寻址 ⑥ 基址 -变址寻址
③ 寄存器寻址 ⑦ 相对的基址 -变址寻址
④ 间接寻址 ⑧ 隐含寻址三,8086的寻址方式
14立即数寻址定义:
8086指令系统中,有一部分指令所用的 8位或 16位操作数就 在指令中提供,这种方式叫立即数寻址方式。
特点:
★ 主要用来对寄存器赋值; 速度快 。
★ 立即数只能是 整数,8或 16位,不能是其他类型的数据。
★ 立即数只能作为 源操作数 。
15
MOV AL,7 ;将十进制数 7送入 AL
ADD AL,10
立即数寻址示例
MOV AX,im
MOV AX,1090H;将 1090H送入 AX,AH中为 10H,AL中为 90H
★
m ov b x,00 50 ha,b x,D S,[ 00 50 h ],[ b x ]D A TA S E G M E N TO RG 00 5 0 HB 0A A H,6 6 H,7 7 H,5 5 H?,? E N D SC O D E S E G M E N TA S UM E C S,C O D E,D S,
立即数操作码低 8位高 8位存储器
MOV操作码
02H
31H
AH AL
代码段代码段立即寻址指令在存储器中的存放形式
AX
指令操作例,MOV AX,3102H ; AX 3102H
执行后,(AH) = 31H,(AL) = 02H
17寄存器寻址定义:
操作数就在 CPU的内部寄存器中,寄存器名在指令中指出的寻址方式。
特点:
对 16位操作数来说,寄存器可以为 AX,BX,CX,DX,SI、
DI,SP、或者 BP,而对8位操作数来说,寄存器可为 AH、
AL,BH,BL,CH,CL,DH,DL。
速度快,因为操作就在 CPU内部进行,不需要使用总线周期。
一条指令中,可以对源操作数、目的操作数或两者都采用寄存器寻址方式。
18寄存器寻址示例
MOV AX,BX ;将 BX的内容送到 AX中
AX BX
INC CX ; 将 CX的内容加1
ROL AH,1 ; 将 AH中的内容循环左移一位
19直接寻址定义:
数据存储单元的有效地址由指令 直接指出 的寻址方式。
特点:
采用直接寻址方式时,如果指令前面没有用前缀指明操作数在哪一段,则默认为 段寄存器 是数据段寄存器
DS。
如果要对其它段寄存器所指出的存储区进行直接寻址,
则本条指令前 必须用前缀 指出段寄存器名。
20直接寻址示例
MOV BX,[3000H];将 DS段的 3000H和 3001H单元的内容送 BX
MOV BX,ES:[3000H];将 ES段的 54000H和 54001H两单元的内容取出送 BX。
设 DS为 3000H,ES为 5100H
比较下列两条指令执行果,
★ MOV AX,[2000H]
把 DS:2000H,DS:2001H处的内容送 AX(设 DS=3000H)
★ MOV AL,[17H] ;把 DS:0017H处的内容送 AL
21
指令操作例,MOV AX,[3102H]
AL (3102H),AH (3103H)
如果 (DS)=2000H,(23102H) = CDH,(23103H) = ABH
则 操作数 的 物理地址 为,
20000H+3102H = 23102H
指令执行后,(AX) = ABCDH MOV操作码
02H
31HAH AL
23102H CDH
ABH
存储器代码段数据段
..
22
4,寄存器间接寻址
操作数 的 偏移地址 (有效地址 EA)放在 寄存器 中
只有 SI,DI,BX和 BP可作间址寄存器
例,MOV AX,[BX]
MOV CL,CS:[DI]
错误例,
× MOV AX,[DX]
× MOV CL,[AX]
EA =
(BX)
(BP)
(SI)
(DI)
23
(1) EA =
[BX]
[SI]
[DI]
若没有前缀指明具体的段寄存器,
则操作数在数据段中
(2) EA = [BP] 若没有前缀指明具体的段寄存器,
则操作数在堆栈段。
24?指令操作例,MOV AX,[SI]
若 (DS)=6000H,(SI)=1200H,(61200H)=44H,
(61201H)=33H
则指令执行后,(AX)=3344H。
44H
33H
6000 1200
DS SI
60000
61200 61200H
AX
存储器数据段
+) 1200
44H33H
25
5,寄存器相对寻址(包括基址寻址和变址寻址)
EA=间址寄存器的内容加上一个 8/16位的位移量寄存器相对寻址 常用于存取表格或一维数组中的元素 ——把表格的起始地址作为位移量,元素的下标值放在间址寄存器中 (或反之)
EA =
(BX)
(BP)
(SI)
(DI)
+ 8位16位 位移量
26
(1) 若 EA =
[BX]
[SI]
[DI]
+ 8位或 16位偏移量则操作数地址 DS,EA
(2) 若 EA = [BP] + 8位或 16位偏移量则操作数地址,SS,EA
27
例,MOV AX,[BX+8]
MOV CX,TABLE[SI]
MOV AX,[BP] ; 默认段寄存器为
SS
指令操作例,MOV AX,DATA[BX]
若 (DS)=6000H,(BX)=1000H,DATA=2A00H,
(63A00H)=66H,(63A01H)=55H
则物理地址 = 60000H + 1000H + 2A00H = 63A00H
指令执行后,( AX) =5566H
( 见下页图示 )
28
操作码
00 偏移量低
2A 偏移量高
DS 6000
BX 1000
+ DATA 2A00
63A00 63A00H
AH ALAX
代码段数据段
..
.
..
.
..
.
66H
55H
MOV AX,DATA[BX]
296,基址 -变址寻址
若操作数的偏移地址:
由 基址寄存器 (BX或 BP)给出 —— 基址寻址方式由 变址寄存器 (SI或 DI)给出 —— 变址寻址方式
由一个基址寄存器 的 内容 和一个变址寄存器 的 内容相加 而 形成 操作数的 偏移地址,称为 基址 -变址寻址。
EA = (BX)(BP) + (SI)(DI)
同一组内的寄存器不能同时出现 。
30
例:
MOV AX,[BX] [SI]
MOV AX,[BX+SI]
MOV AX,DS,[BP] [DI]
错误例:
× MOV AX,[BX] [BP]
× MOV AX,[DI] [SI]
31
83000
操作码DS 8000
BX 2000
+ SI 1000
83000H
AH ALAX
代码段数据段
..
.
..
.
..
.
YY
XX
指令操作例,MOV AX,[BX][SI]
假定,(DS)=8000H,(BX)=2000H,SI=1000H
则物理地址 = 80000H + 2000H + 1000H = 83000H
指令执行后,(AL)=[83000H]
(AH)=[83001H]
327,相对的基址 -变址寻址
在 基址 -变址寻址的基础上再加上一个相对位 移量
注意事项同 基址 -变址寻址
EA = (BX)(BP) + (SI)(DI) + 8位16位 位移量
例,MOV AX,BASE [SI] [BX]
MOV AX,[BX+BASE] [SI]
MOV AX,[BX+SI+BASE]
MOV AX,[BX] BASE [SI]
MOV AX,[BX+SI] BASE
33指令 操作例,MOV AX,DATA[DI][BX]
若 (DS)=8000H,(BX)=2000H,(DI)=1000H,DATA=200H
则指令执行后 (AH)=[83201H],(AL)=[83200H]
83200
83200H
AH ALAX
+ DATA 0200
操作码 代码段数据段
..
.
..
.
..
.
YY
XX
DS 8000
BX 2000
DI 1000
34使用相对的基址 -变址寻址方式可以很方便地访问二维数组 。
基址寄存器数组首地址变址寄存器数组元素行址位移量数组元素列址
(偏移地址)
35
8,隐含寻址
指令操作数是隐含的,在指令中未显式地指明。
例,MUL BL
指令隐含了被乘数 AL及乘积 AX
类似的指令还有,DIV,CBW,MOVS等
( AL)×( BL) →AX
36
小结指令由( )和( )构成如何取得操作数 —— 称为( )
操作码 操作数寻址
37
寄存器间接、寄存器相对、基址变址、相对基址变址四种寻址方式的比较:
寻址方式 指令操作数形式?
寄存器间接 —— 只有一个寄存器( BX/BP/SI/DI之一)
寄存器相对 —— 一个寄存器加上位移量
基址 — 变址 —— 两个不同类别的寄存器
相对基址 -变址 —— 两个不同类别的寄存器加上位移量
ALU
执行部分控制电路输入 /输出控制电路地址加法器
20位
16位指令队列缓冲器8位执行部件 ( EU) 总线接口部件 ( BIU)
外部总线16位运算寄存器标志寄存器通用寄存器段寄存器DLCL
BL
AL
SI
DI
BP
SP
DH
CH
BH
AH
内部暂存器
IP
ES
SS
DS
CS
8086有几个通用寄存器,专用寄存器,段地址寄存器,都是什么?
2
8086有几个通用寄存器,专用寄存器,
段地址寄存器,都是什么?
3
第三章 8086指令系统与寻址方式控制类指令
You Can Try……
指令格式和寻址方式传送类指令数据操作类指令串操作类指令
4指令的基本构成说明 要执行的是什么操作操作对象,
可以有 0个、
1个或 2个目的 源
5指令举例:
ADD AX,[SI+6]
MOV AX,BX
操作码 操作数
INC [BX]
HLT
6
双操作数指令 ADD AX,BX
大多数运算型指令都是双操作数指令,对这种指令,有的机器(大中型)使用“三地址”指令:
除给出参加运算的两个操作数外,还要指出运算结果的存放地址。
现代微型计算机中多采用二地址指令,两个操作数分别称为,源操作数” 和,目的操作数”,指令执行后,把运算结果放到目的操作数的地址之中。
7
二,8088/8086的操作数分为 3类
1,立即数(常数)
取值范围如下表:
8位 16位无符号数 00H-FFH(0-255) 0000H-FFFFH(0-65535)
带符号数 80H-7FH(-128~127) 8000H-7FFFH(-32768~32767)
MOV AX,0FA00H ;正确
MOV 8000H,DX ;错误
8
2,寄存器操作数放在 8个 通用寄存器 或 4个 段寄存器 中的操作数 16 位
AX AH AL
16 位
BX BH BL
16 位
CX CH CL
16 位
DX DH DL
9
只能存放字操作数段寄存器存放当前操作数的段基地址不允许将立即数传送到段寄存器
SI
DI
BP
SP
CS
DS
ES
SS
10
3,存储器操作数存储器操作数字节字双字
1
2
4
类型 存储单元个数一般 不允许 两个 操作数同时为存储器操作数
11
存储单元的 物理地址 = 段基地址 + 偏移地址
若指令中没有指明所涉及的段寄存器,CPU就采用默认的段寄存器来确定操作数所在的段。
存储器操作数的偏移地址(也称有效地址)可以通过不同的寻址方式由指令给出。
例如,若 (BX)=2000H,(SI)=0A00H,(DI)=2A00H,则以下指令的结果是一样的:
MOV AL,[2A00H]
MOV AL,[BX+0A00H]
MOV AL,[BX][SI]
MOV AL,[DI]
12
一条指令的执行时间 =∑
指令的执行时间取指令取操作数执行指令传送结果单位用时钟周期数表示结论:
1)尽量使用寄存器作为操作数
2)若有可能,用移位代替乘除法
3)尽量使用简单的寻址方式
13
寻址方式 —— 寻找操作数的方法寻找操作数的地址在 8086指令系统中,说明操作数所在地址的寻址方式可分为 8种,
① 立即寻址 ⑤ 寄存器相对寻址
② 直接寻址 ⑥ 基址 -变址寻址
③ 寄存器寻址 ⑦ 相对的基址 -变址寻址
④ 间接寻址 ⑧ 隐含寻址三,8086的寻址方式
14立即数寻址定义:
8086指令系统中,有一部分指令所用的 8位或 16位操作数就 在指令中提供,这种方式叫立即数寻址方式。
特点:
★ 主要用来对寄存器赋值; 速度快 。
★ 立即数只能是 整数,8或 16位,不能是其他类型的数据。
★ 立即数只能作为 源操作数 。
15
MOV AL,7 ;将十进制数 7送入 AL
ADD AL,10
立即数寻址示例
MOV AX,im
MOV AX,1090H;将 1090H送入 AX,AH中为 10H,AL中为 90H
★
m ov b x,00 50 ha,b x,D S,[ 00 50 h ],[ b x ]D A TA S E G M E N TO RG 00 5 0 HB 0A A H,6 6 H,7 7 H,5 5 H?,? E N D SC O D E S E G M E N TA S UM E C S,C O D E,D S,
立即数操作码低 8位高 8位存储器
MOV操作码
02H
31H
AH AL
代码段代码段立即寻址指令在存储器中的存放形式
AX
指令操作例,MOV AX,3102H ; AX 3102H
执行后,(AH) = 31H,(AL) = 02H
17寄存器寻址定义:
操作数就在 CPU的内部寄存器中,寄存器名在指令中指出的寻址方式。
特点:
对 16位操作数来说,寄存器可以为 AX,BX,CX,DX,SI、
DI,SP、或者 BP,而对8位操作数来说,寄存器可为 AH、
AL,BH,BL,CH,CL,DH,DL。
速度快,因为操作就在 CPU内部进行,不需要使用总线周期。
一条指令中,可以对源操作数、目的操作数或两者都采用寄存器寻址方式。
18寄存器寻址示例
MOV AX,BX ;将 BX的内容送到 AX中
AX BX
INC CX ; 将 CX的内容加1
ROL AH,1 ; 将 AH中的内容循环左移一位
19直接寻址定义:
数据存储单元的有效地址由指令 直接指出 的寻址方式。
特点:
采用直接寻址方式时,如果指令前面没有用前缀指明操作数在哪一段,则默认为 段寄存器 是数据段寄存器
DS。
如果要对其它段寄存器所指出的存储区进行直接寻址,
则本条指令前 必须用前缀 指出段寄存器名。
20直接寻址示例
MOV BX,[3000H];将 DS段的 3000H和 3001H单元的内容送 BX
MOV BX,ES:[3000H];将 ES段的 54000H和 54001H两单元的内容取出送 BX。
设 DS为 3000H,ES为 5100H
比较下列两条指令执行果,
★ MOV AX,[2000H]
把 DS:2000H,DS:2001H处的内容送 AX(设 DS=3000H)
★ MOV AL,[17H] ;把 DS:0017H处的内容送 AL
21
指令操作例,MOV AX,[3102H]
AL (3102H),AH (3103H)
如果 (DS)=2000H,(23102H) = CDH,(23103H) = ABH
则 操作数 的 物理地址 为,
20000H+3102H = 23102H
指令执行后,(AX) = ABCDH MOV操作码
02H
31HAH AL
23102H CDH
ABH
存储器代码段数据段
..
22
4,寄存器间接寻址
操作数 的 偏移地址 (有效地址 EA)放在 寄存器 中
只有 SI,DI,BX和 BP可作间址寄存器
例,MOV AX,[BX]
MOV CL,CS:[DI]
错误例,
× MOV AX,[DX]
× MOV CL,[AX]
EA =
(BX)
(BP)
(SI)
(DI)
23
(1) EA =
[BX]
[SI]
[DI]
若没有前缀指明具体的段寄存器,
则操作数在数据段中
(2) EA = [BP] 若没有前缀指明具体的段寄存器,
则操作数在堆栈段。
24?指令操作例,MOV AX,[SI]
若 (DS)=6000H,(SI)=1200H,(61200H)=44H,
(61201H)=33H
则指令执行后,(AX)=3344H。
44H
33H
6000 1200
DS SI
60000
61200 61200H
AX
存储器数据段
+) 1200
44H33H
25
5,寄存器相对寻址(包括基址寻址和变址寻址)
EA=间址寄存器的内容加上一个 8/16位的位移量寄存器相对寻址 常用于存取表格或一维数组中的元素 ——把表格的起始地址作为位移量,元素的下标值放在间址寄存器中 (或反之)
EA =
(BX)
(BP)
(SI)
(DI)
+ 8位16位 位移量
26
(1) 若 EA =
[BX]
[SI]
[DI]
+ 8位或 16位偏移量则操作数地址 DS,EA
(2) 若 EA = [BP] + 8位或 16位偏移量则操作数地址,SS,EA
27
例,MOV AX,[BX+8]
MOV CX,TABLE[SI]
MOV AX,[BP] ; 默认段寄存器为
SS
指令操作例,MOV AX,DATA[BX]
若 (DS)=6000H,(BX)=1000H,DATA=2A00H,
(63A00H)=66H,(63A01H)=55H
则物理地址 = 60000H + 1000H + 2A00H = 63A00H
指令执行后,( AX) =5566H
( 见下页图示 )
28
操作码
00 偏移量低
2A 偏移量高
DS 6000
BX 1000
+ DATA 2A00
63A00 63A00H
AH ALAX
代码段数据段
..
.
..
.
..
.
66H
55H
MOV AX,DATA[BX]
296,基址 -变址寻址
若操作数的偏移地址:
由 基址寄存器 (BX或 BP)给出 —— 基址寻址方式由 变址寄存器 (SI或 DI)给出 —— 变址寻址方式
由一个基址寄存器 的 内容 和一个变址寄存器 的 内容相加 而 形成 操作数的 偏移地址,称为 基址 -变址寻址。
EA = (BX)(BP) + (SI)(DI)
同一组内的寄存器不能同时出现 。
30
例:
MOV AX,[BX] [SI]
MOV AX,[BX+SI]
MOV AX,DS,[BP] [DI]
错误例:
× MOV AX,[BX] [BP]
× MOV AX,[DI] [SI]
31
83000
操作码DS 8000
BX 2000
+ SI 1000
83000H
AH ALAX
代码段数据段
..
.
..
.
..
.
YY
XX
指令操作例,MOV AX,[BX][SI]
假定,(DS)=8000H,(BX)=2000H,SI=1000H
则物理地址 = 80000H + 2000H + 1000H = 83000H
指令执行后,(AL)=[83000H]
(AH)=[83001H]
327,相对的基址 -变址寻址
在 基址 -变址寻址的基础上再加上一个相对位 移量
注意事项同 基址 -变址寻址
EA = (BX)(BP) + (SI)(DI) + 8位16位 位移量
例,MOV AX,BASE [SI] [BX]
MOV AX,[BX+BASE] [SI]
MOV AX,[BX+SI+BASE]
MOV AX,[BX] BASE [SI]
MOV AX,[BX+SI] BASE
33指令 操作例,MOV AX,DATA[DI][BX]
若 (DS)=8000H,(BX)=2000H,(DI)=1000H,DATA=200H
则指令执行后 (AH)=[83201H],(AL)=[83200H]
83200
83200H
AH ALAX
+ DATA 0200
操作码 代码段数据段
..
.
..
.
..
.
YY
XX
DS 8000
BX 2000
DI 1000
34使用相对的基址 -变址寻址方式可以很方便地访问二维数组 。
基址寄存器数组首地址变址寄存器数组元素行址位移量数组元素列址
(偏移地址)
35
8,隐含寻址
指令操作数是隐含的,在指令中未显式地指明。
例,MUL BL
指令隐含了被乘数 AL及乘积 AX
类似的指令还有,DIV,CBW,MOVS等
( AL)×( BL) →AX
36
小结指令由( )和( )构成如何取得操作数 —— 称为( )
操作码 操作数寻址
37
寄存器间接、寄存器相对、基址变址、相对基址变址四种寻址方式的比较:
寻址方式 指令操作数形式?
寄存器间接 —— 只有一个寄存器( BX/BP/SI/DI之一)
寄存器相对 —— 一个寄存器加上位移量
基址 — 变址 —— 两个不同类别的寄存器
相对基址 -变址 —— 两个不同类别的寄存器加上位移量