微机接口技术
2
3.1 8086的 寻址方式
3.2 8086的指令系统第三章 指令系统
3
3.1 8086的寻址方式
1.操作数的寻址方式
2,转移地址的寻址方式
4
1.操作数的寻址方式
( 1)立即寻址
( 2)寄存器寻址
( 3)直接寻址 *
( 4)寄存器间接寻址
( 5)寄存器相对寻址方式
( 6)基址变址寻址方式
( 7)相对基址变址寻址方式
( 8) 其它
5
( 1)立即寻址
例如,MOV AX,1234H ; 十六进制数 1234H
送入 AX。
如图 3-1所示 。
AH AL
操作码
1 2
3 4
·
·
·
·
·
AX
6
( 2)寄存器寻址
操作数存放在指令规定的寄存器中,对于 16位操作数,
寄存器可以是 AX,BX,CX,DX,SI,DL,SP或 BP;
而对 8位操作数,寄存器可以是 AH,AL,BH,BL,
CH,CL,DH或 DL。
例如,MOV AX,BX ; 将寄存器 BX的内容送入 AX。
如图所示 。
X X X X
AX BX
7
( 3)直接寻址在 IBM PC 机中,把操作数的偏移地址称为有效地址 EA (Effective Address)。
如果指令中没有用前缀指明操作数存放在哪一段,则默认为使用的段寄存器为数据段寄存器
DS,因此,操作数的物理地址为 16× DS+EA,即为
10H× DS+EA。
8
例如,MOV AL,
DS:[2000H] ; 将逻辑地址为 DS:2000单元内的字节送入 AL。
若段基址 DS=4000H,则段起始物理地址为 4000H
左移 4位,即 40000H,此指令将数据段中物理地址为 42000H 单元的内容 56H
传至 AL寄存器 。
如图所示 。
4 0 0 0 H
5 6 H
AX
DS
4 0 0 0 0 H
+
2 0 0 0 H
操作码操作码
0 0 H
2 0 H
5 6 H
·
·
·
·
·
4 2 0 0 0 H
9
段超越前缀:
如果要对代码段堆栈段或附加段寄存器所指出的存储区进行直接寻址,应在指令中指定段 超越前缀 。
例如,数据若放在附加段中,则应在有效地址前加,ES:,,,,,称为属性修改符,计算物理地址时要用 ES作基地址,而不再是默认值 DS。
MOV AX,ES:[500H]
10
符号地址:
MOV AX,AREA1
MOV AX,[AREA1]
11
[]的用法以下几条指令等价:
MOV AX,[COUNT+BX+SI] MOV AX,200H[BX+SI]
MOV AX,200H[BX]+[SI] MOV AX,COUNT[BX+SI]
[]的使用规则:
1)立即数可以出现在方括号内;
2)只有 BX,BP,SI,DI这四个寄存器可以出现在 []内,可以组合出现;
3) []有相加的含义;
4)可以使用短超越前缀。
12
( 4)寄存器间接寻址
例如,MOV AX,[BX] ; BX内容为有效地址 EA( 偏移量 ) 。
若 DS=4000H,BX=100H,此指令将物理地址 40100H 单元的内容传至 AL寄存器 ( 段基地址同样为 40000H) 。
如图所示 。
4 0 0 0 H
3 4 H 2 5 HAX
DS
4 0 0 0 0 H
+
0 1 0 0 H
2 5 H
·
·
·
·
4 0 1 0 0 H
3 4 H
0 1 0 0 H
BX
数据段代码段
·
MOV AX,[BP]
13
( 5)寄存器相对寻址方式
例如,MOV AL,
[BX+5]; 若 DS=6000H,
BX=2000H,BX的内容加上
8位位移量 05H作为操作数的有效地址 。 传送数据段中的一个字节到 AL中 。 如果使用
BP,则隐含地表示操作数存放在堆栈段中 。 如图 3-5所示 。
6 0 0 0 H
9 A HAX
DS
操作码操作码
0 5 H
·
·
·
·
9 A H
2 0 0 0 H
BX
数据段代码段
·
E A =2 0 0 0 H + 0 5 H = 2 0 0 5 H
6 2 0 0 5
6 0 0 0 0
14
( 6)基址变址寻址方式
例如,MOV AX,
[BX+SI]; BX的内容与 SI的内容之和作为操作数的有效地址 。
传送数据段中的一个字 。 如图 3-6所示 。
5 0 0 0 H
A B H 7 8 H
AX
DS
操作码操作码
·
7 8 H
·
·
·
·
A B H
2 0 0 0 H BX
数据段代码段
·
E A =2 0 0 0 H + 0 6 H = 2 0 0 6 H
5 2 0 0 6 H
5 0 0 0 0 H
E A
0 0 0 6 H SI
+
15
( 7)相对基址变址寻址方式
例如,MOV AH,
[BX+DI+1234H] ; BX
的内容加上 DI的内容再加上位移量 1234H作为操作数的有效地址 。 如图 3-7所示 。
4 0 0 0 H
5 0 H AL
AX
DS
3 4 H
1 2 H
·
5 0 H
·
·
·
·
0 2 0 0 H BX
数据段代码段
·
E A =0 2 0 0 H + 0 0 1 0 +
1 2 3 4 H = 1 4 4 4 H
4 1 4 4 4 H
4 0 0 0 0 H
E A
0 0 1 0 H DI
+
操作码操作码
16
( 8 )其 它隐含寻址:指令中隐含有规定的寻址方式。
DAA (AL)
I/O端口寻址:由指令直接提供,8位(直接端口);
由寄存器 DX提供,16位(间接端口)。
IN AL,63H
IN AL,DX
一条指令可能包含多种寻址方式。
17
2,转移地址的寻址方式
( 1)段内直接寻址
( 2)段内间接方式
( 3)段间直接寻址
( 4)段间间接方式
18
( 1)段内直接寻址
段内直接寻址方式也称为相对寻址方式,转移的目标地址是当前 IP内容和一个 8位或 16位的位移量之和,
这个位移量是指令代码的一部分,所以叫相对寻址。
如图 3-8所示位移量当前I P 值操作码指令
+
E A (有效转移地址)
19
( 2)段内间接方式
这种方式也是在段内,其转移的目标地址是寄存器或存储单元的内容,即以寄存器或存储器单元内容来更新 IP的内容,所以是绝对偏移量,注意和段内直接方式的相对偏移量的区别 。 若目标地址为存储单元内容,
则该存储单元本身可由上述与存储器操作数有关的任何寻址方式寻址,只是它里面的内容为新的 IP值 。 如图 3-9所示 。
寻址方式指令
EA
EA
寄存器存储器或
20
( 3)段间直接寻址
这种方式用于段间转移,目标地址的段基值 ( CS) 和偏移地址 ( IP) 都是指令码的组成部分,用来更新当前 CS和 IP。 如图 3-10所示 。
偏移量指令段值
C S
I P
21
( 4)段间间接方式
这种方式同样用于段间转移,只不过当前 CS和 IP由存储器中连续的两个字更新,低位地址的字更新 IP,高位地址的字更新 CS,存放新 IP和 CS的存储单元地址由前述存储器操作数的寻址方式决定 。 见图 2-21所示 。
例如,JMP DWORD PTR [INTER+BX] ; 取 DS
段中偏移为 [INTER+BX]处的双字作为新的 CS和 IP。
22
3.2 8086的指令系统
1,数据传送类 (P94);
2,算术运算类;
3,逻辑运算与移位指令;
4,字符串处理;
5,控制转移指令;
6,处理器控制指令 。
23
1,数据传送类
( 1) 通用数据传送指令
这种指令共 5条。
( 2)条件传送指令( P96)
( 3)交换指令( P97)
( 4) 堆栈操作指令 ( P99)
( 5) 输入输出指令 ( P102)
( 6) 扩展指令 ( P102)
( 7) 目标地指传送指令
这组指令包括三条指令 。
24
表 3-1 通用数据传送指令格式
25
表 3-2 目标地址传送指令格式
26
2.算术运算类
( 1)加法指令 ( P103)
( 2)减法指令 ( P105)
( 3)乘法指令 ( P106)
( 4)除法指令 ( P108)
( 5)增量减量指令( P109)
( 6)取补指令( P110)
( 7) CMP比较指令( P110)
( 8)十进制算术指令( P113)
27
3.逻辑运算与移位指令
( 1)逻辑运算指令 ( P116)
( 2)移位与循环移位指令 ( P119)
表 3-3 逻辑运算指令格式
28
4,字符串处理 ( P128)
8086/8088指令系统为文本处理提供了一组强有力的指令 ( 字符串处理指令 ),对一系列含有字母数字代码的字节 ( 也称字符串 ) 进行处理,
例如传送,比较,查找,插入,删除等,字符串指令为这些处理提供了很大方便 。 字符串指令的寻址方式只用隐含寻址,源串固定使用 SI,
目的串固定使用 DI。
29
5,控制转移指令 ( P124)
( 1) 转移指令,分为无条件转移指令和条件转移指令;
( 2) 循环指令;
( 3) 过程调用与返回指令;
( 4) 中断与返回指令 。
30
6,处理器控制指令主要包括,
标志处理指令 ( P133) ;
段寄存器指令 ( P133) ;
位和字节指令 ( P122) ;
其他处理器控制指令等,
2
3.1 8086的 寻址方式
3.2 8086的指令系统第三章 指令系统
3
3.1 8086的寻址方式
1.操作数的寻址方式
2,转移地址的寻址方式
4
1.操作数的寻址方式
( 1)立即寻址
( 2)寄存器寻址
( 3)直接寻址 *
( 4)寄存器间接寻址
( 5)寄存器相对寻址方式
( 6)基址变址寻址方式
( 7)相对基址变址寻址方式
( 8) 其它
5
( 1)立即寻址
例如,MOV AX,1234H ; 十六进制数 1234H
送入 AX。
如图 3-1所示 。
AH AL
操作码
1 2
3 4
·
·
·
·
·
AX
6
( 2)寄存器寻址
操作数存放在指令规定的寄存器中,对于 16位操作数,
寄存器可以是 AX,BX,CX,DX,SI,DL,SP或 BP;
而对 8位操作数,寄存器可以是 AH,AL,BH,BL,
CH,CL,DH或 DL。
例如,MOV AX,BX ; 将寄存器 BX的内容送入 AX。
如图所示 。
X X X X
AX BX
7
( 3)直接寻址在 IBM PC 机中,把操作数的偏移地址称为有效地址 EA (Effective Address)。
如果指令中没有用前缀指明操作数存放在哪一段,则默认为使用的段寄存器为数据段寄存器
DS,因此,操作数的物理地址为 16× DS+EA,即为
10H× DS+EA。
8
例如,MOV AL,
DS:[2000H] ; 将逻辑地址为 DS:2000单元内的字节送入 AL。
若段基址 DS=4000H,则段起始物理地址为 4000H
左移 4位,即 40000H,此指令将数据段中物理地址为 42000H 单元的内容 56H
传至 AL寄存器 。
如图所示 。
4 0 0 0 H
5 6 H
AX
DS
4 0 0 0 0 H
+
2 0 0 0 H
操作码操作码
0 0 H
2 0 H
5 6 H
·
·
·
·
·
4 2 0 0 0 H
9
段超越前缀:
如果要对代码段堆栈段或附加段寄存器所指出的存储区进行直接寻址,应在指令中指定段 超越前缀 。
例如,数据若放在附加段中,则应在有效地址前加,ES:,,,,,称为属性修改符,计算物理地址时要用 ES作基地址,而不再是默认值 DS。
MOV AX,ES:[500H]
10
符号地址:
MOV AX,AREA1
MOV AX,[AREA1]
11
[]的用法以下几条指令等价:
MOV AX,[COUNT+BX+SI] MOV AX,200H[BX+SI]
MOV AX,200H[BX]+[SI] MOV AX,COUNT[BX+SI]
[]的使用规则:
1)立即数可以出现在方括号内;
2)只有 BX,BP,SI,DI这四个寄存器可以出现在 []内,可以组合出现;
3) []有相加的含义;
4)可以使用短超越前缀。
12
( 4)寄存器间接寻址
例如,MOV AX,[BX] ; BX内容为有效地址 EA( 偏移量 ) 。
若 DS=4000H,BX=100H,此指令将物理地址 40100H 单元的内容传至 AL寄存器 ( 段基地址同样为 40000H) 。
如图所示 。
4 0 0 0 H
3 4 H 2 5 HAX
DS
4 0 0 0 0 H
+
0 1 0 0 H
2 5 H
·
·
·
·
4 0 1 0 0 H
3 4 H
0 1 0 0 H
BX
数据段代码段
·
MOV AX,[BP]
13
( 5)寄存器相对寻址方式
例如,MOV AL,
[BX+5]; 若 DS=6000H,
BX=2000H,BX的内容加上
8位位移量 05H作为操作数的有效地址 。 传送数据段中的一个字节到 AL中 。 如果使用
BP,则隐含地表示操作数存放在堆栈段中 。 如图 3-5所示 。
6 0 0 0 H
9 A HAX
DS
操作码操作码
0 5 H
·
·
·
·
9 A H
2 0 0 0 H
BX
数据段代码段
·
E A =2 0 0 0 H + 0 5 H = 2 0 0 5 H
6 2 0 0 5
6 0 0 0 0
14
( 6)基址变址寻址方式
例如,MOV AX,
[BX+SI]; BX的内容与 SI的内容之和作为操作数的有效地址 。
传送数据段中的一个字 。 如图 3-6所示 。
5 0 0 0 H
A B H 7 8 H
AX
DS
操作码操作码
·
7 8 H
·
·
·
·
A B H
2 0 0 0 H BX
数据段代码段
·
E A =2 0 0 0 H + 0 6 H = 2 0 0 6 H
5 2 0 0 6 H
5 0 0 0 0 H
E A
0 0 0 6 H SI
+
15
( 7)相对基址变址寻址方式
例如,MOV AH,
[BX+DI+1234H] ; BX
的内容加上 DI的内容再加上位移量 1234H作为操作数的有效地址 。 如图 3-7所示 。
4 0 0 0 H
5 0 H AL
AX
DS
3 4 H
1 2 H
·
5 0 H
·
·
·
·
0 2 0 0 H BX
数据段代码段
·
E A =0 2 0 0 H + 0 0 1 0 +
1 2 3 4 H = 1 4 4 4 H
4 1 4 4 4 H
4 0 0 0 0 H
E A
0 0 1 0 H DI
+
操作码操作码
16
( 8 )其 它隐含寻址:指令中隐含有规定的寻址方式。
DAA (AL)
I/O端口寻址:由指令直接提供,8位(直接端口);
由寄存器 DX提供,16位(间接端口)。
IN AL,63H
IN AL,DX
一条指令可能包含多种寻址方式。
17
2,转移地址的寻址方式
( 1)段内直接寻址
( 2)段内间接方式
( 3)段间直接寻址
( 4)段间间接方式
18
( 1)段内直接寻址
段内直接寻址方式也称为相对寻址方式,转移的目标地址是当前 IP内容和一个 8位或 16位的位移量之和,
这个位移量是指令代码的一部分,所以叫相对寻址。
如图 3-8所示位移量当前I P 值操作码指令
+
E A (有效转移地址)
19
( 2)段内间接方式
这种方式也是在段内,其转移的目标地址是寄存器或存储单元的内容,即以寄存器或存储器单元内容来更新 IP的内容,所以是绝对偏移量,注意和段内直接方式的相对偏移量的区别 。 若目标地址为存储单元内容,
则该存储单元本身可由上述与存储器操作数有关的任何寻址方式寻址,只是它里面的内容为新的 IP值 。 如图 3-9所示 。
寻址方式指令
EA
EA
寄存器存储器或
20
( 3)段间直接寻址
这种方式用于段间转移,目标地址的段基值 ( CS) 和偏移地址 ( IP) 都是指令码的组成部分,用来更新当前 CS和 IP。 如图 3-10所示 。
偏移量指令段值
C S
I P
21
( 4)段间间接方式
这种方式同样用于段间转移,只不过当前 CS和 IP由存储器中连续的两个字更新,低位地址的字更新 IP,高位地址的字更新 CS,存放新 IP和 CS的存储单元地址由前述存储器操作数的寻址方式决定 。 见图 2-21所示 。
例如,JMP DWORD PTR [INTER+BX] ; 取 DS
段中偏移为 [INTER+BX]处的双字作为新的 CS和 IP。
22
3.2 8086的指令系统
1,数据传送类 (P94);
2,算术运算类;
3,逻辑运算与移位指令;
4,字符串处理;
5,控制转移指令;
6,处理器控制指令 。
23
1,数据传送类
( 1) 通用数据传送指令
这种指令共 5条。
( 2)条件传送指令( P96)
( 3)交换指令( P97)
( 4) 堆栈操作指令 ( P99)
( 5) 输入输出指令 ( P102)
( 6) 扩展指令 ( P102)
( 7) 目标地指传送指令
这组指令包括三条指令 。
24
表 3-1 通用数据传送指令格式
25
表 3-2 目标地址传送指令格式
26
2.算术运算类
( 1)加法指令 ( P103)
( 2)减法指令 ( P105)
( 3)乘法指令 ( P106)
( 4)除法指令 ( P108)
( 5)增量减量指令( P109)
( 6)取补指令( P110)
( 7) CMP比较指令( P110)
( 8)十进制算术指令( P113)
27
3.逻辑运算与移位指令
( 1)逻辑运算指令 ( P116)
( 2)移位与循环移位指令 ( P119)
表 3-3 逻辑运算指令格式
28
4,字符串处理 ( P128)
8086/8088指令系统为文本处理提供了一组强有力的指令 ( 字符串处理指令 ),对一系列含有字母数字代码的字节 ( 也称字符串 ) 进行处理,
例如传送,比较,查找,插入,删除等,字符串指令为这些处理提供了很大方便 。 字符串指令的寻址方式只用隐含寻址,源串固定使用 SI,
目的串固定使用 DI。
29
5,控制转移指令 ( P124)
( 1) 转移指令,分为无条件转移指令和条件转移指令;
( 2) 循环指令;
( 3) 过程调用与返回指令;
( 4) 中断与返回指令 。
30
6,处理器控制指令主要包括,
标志处理指令 ( P133) ;
段寄存器指令 ( P133) ;
位和字节指令 ( P122) ;
其他处理器控制指令等,