微机接口技术
2004,3,10
2
3.1 寻址方式
3.2 8086的指令系统
3.3 汇编语言程序设计第三章 指令系统与 汇编程序设计
3
3.1 寻址方式
1.操作数的寻址方式
2,转移地址的寻址方式
4
1.操作数的寻址方式
( 1)立即寻址
( 2)寄存器寻址
( 3)直接寻址
( 4)寄存器间接寻址
( 5)寄存器相对寻址方式
( 6)基址变址寻址方式
( 7)相对基址变址寻址方式
5
( 1)立即寻址
例如,MOV AX,1234H ; 十六进制数 1234H
送入 AX。
如图 3-11所示 。
AH AL
操作码
1 2
3 4
·
·
·
·
·
AX
6
( 2)寄存器寻址
操作数存放在指令规定的寄存器中,对于 16位操作数,
寄存器可以是 AX,BX,CX,DX,SI,DI,SP或 BP;
而对 8位操作数,寄存器可以是 AH,AL,BH,BL,
CH,CL,DH或 DL。
例如,MOV AX,BX ; 将寄存器 BX的内容送入 AX。
如图所示 。
X X X X
AX BX
7
( 3)直接寻址
例如,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
8
( 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
数据段代码段
·
9
( 5)寄存器相对寻址方式
例如,MOV AL,
[BX+5]; 若 DS=6000H,
BX=2000H,BX的内容加上
8位位移量 05H作为操作数的有效地址 。 传送数据段中的一个字节到 AL中 。 如果使用
BP,则隐含地表示操作数存放在堆栈段中 。 如图 3-15所示 。
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
10
( 6)基址变址寻址方式
例如,MOV AX,
[BX+SI]; BX的内容与 SI的内容之和作为操作数的有效地址 。
传送数据段中的一个字 。 如图 3-16所示 。
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

11
( 7)相对基址变址寻址方式
例如,MOV AH,
[BX+DI+1234H] ; BX
的内容加上 DI的内容再加上位移量 1234H作为操作数的有效地址 。 如图 3-17所示 。
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

操作码操作码
12
2,转移地址的寻址方式
( 1)段内直接寻址
( 2)段内间接方式
( 3)段间直接寻址
( 4)段间间接方式
13
( 1)段内直接寻址
段内直接寻址方式也称为相对寻址方式,转移的目标地址是当前 IP内容和一个 8位或 16位的位移量之和,
这个位移量是指令代码的一部分,所以叫相对寻址。
如图 3-18所示位移量当前I P 值操作码指令

E A (有效转移地址)
14
( 2)段内间接方式
这种方式也是在段内,其转移的目标地址是寄存器或存储单元的内容,即以寄存器或存储器单元内容来更新 IP的内容,所以是绝对偏移量,注意和段内直接方式的相对偏移量的区别 。 若目标地址为存储单元内容,
则该存储单元本身可由上述与存储器操作数有关的任何寻址方式寻址,只是它里面的内容为新的 IP值 。 如图 3-19所示 。
寻址方式指令
EA
EA
寄存器存储器或
15
( 3)段间直接寻址
这种方式用于段间转移,目标地址的段基值 ( CS) 和偏移地址 ( IP) 都是指令码的组成部分,用来更新当前 CS和 IP。 如图 3-20所示 。
偏移量指令段值
C S
I P
16
( 4)段间间接方式
这种方式同样用于段间转移,只不过当前 CS和 IP由存储器中连续的两个字更新,低位地址的字更新 IP,高位地址的字更新 CS,存放新 IP和 CS的存储单元地址由前述存储器操作数的寻址方式决定 。 见图 3-21所示 。
例如,JMP DWORD PTR [INTER+BX] ; 取 DS
段中偏移为 [INTER+BX]处的双字作为新的 CS和 IP。
17
3.2 8086的指令系统
1,数据传送类
2,算术运算类
3,逻辑运算与移位指令
4,字符串处理
5,控制转移指令
6,处理器控制指令
18
1,数据传送类
( 1) 通用数据传送指令;
这种指令共 5条,如表 3-4所示。
( 2) 输入 /输出指令;
( 3) 目标地指传送指令;
这组指令包括三条指令,如表 3-5
所示 。
( 4) 标志位传送指令 。
19
表 3-4 通用数据传送指令格式
20
表 3-5 目标地址传送指令格式
21
2.算术运算类
( 1)加法指令;
( 2)减法指令;
( 3)乘法指令;
( 4)除法指令。
22
3.逻辑运算与移位指令
( 1)逻辑运算指令;
( 2)移位与循环移位指令 。
表 3-6 逻辑运算指令格式
23
4,字符串处理
8086/8088指令系统为文本处理提供了一组强有力的指令 ( 字符串处理指令 ),对一系列含有字母数字代码的字节 ( 也称字符串 ) 进行处理,
例如传送,比较,查找,插入,删除等 。 字符串指令为这些处理提供了很大方便 。 字符串指令的寻址方式只用隐含寻址,源串固定使用 SI,
目的串固定使用 DI。
24
5,控制转移指令
( 1) 转移指令,分为无条件转移指令和条件转移指令;
( 2) 循环指令;
( 3) 过程调用与返回指令;
( 4) 中断与返回指令 。
25
6,处理器控制指令
主要包括标志处理指令 7条和其他处理器控制指令 5条 。 详细内容同样参见指令一览表 。
26
3.3 汇编语言程序设计
1,汇编语言指令
2.汇编语言基本语法
3.汇编语言程序结构
4,标准汇编语言程序框架
27
1,汇编语言指令
8086汇编语言中,有多种伪指令,包括:
数据定义伪指令;
结构定义伪指令;
记录定义伪指令;
段定义伪指令;
程序终结伪指令;
过程定义伪指令;
访问外部标识符伪指令;
宏操作伪指令。
28
2.汇编语言基本语法
( 1) ASM-86的字符集;
( 2)关键字;
( 3)语句;
( 4)表达式;
( 5)指令性语句中的操作数。
29
3,汇编语言程序结构
汇编语言源程序是由语句序列组成的,包括:
数据 ( 程序要处理的对象 ) ;
处理数据的实体;
承上启下的记录 。
8086/8088 微处理器系统的存储结构是分段式访问结构,因此,8086/8088 汇编语言程序必须具备:
代码段(处理数据的对象);
数据段(定义加工处理对象);
堆栈段。
30
4,标准汇编语言程序框架
通常,一个源程序都有大体相同的结构或框架,下面给出一个源程序的框架结构,该程序是在 PC-DOS环境下运行的 。;定义堆栈段
STACK_SEG SEGMENT PARA STACK 'STACK'
··· ;定义堆栈深度与堆栈段变量
STACK_SEG ENDS;定义数据段
DATA_SEG SEGMENT PARA PUBLIC 'DATA'
··· ;定义变量
DATA_SEG ENDS
31;定义代码段
CODE_SEG SEGMENT PARA PUBLIC 'CODE'
MAIN PROC FAR
ASSUME CS:CODE_SEG,DS:DATA_SEG
ASSUME SS:STACK_SEG
START,PUSH DS
MOV AX,0
PUSH AX
MOV AX,DATA_SEG
MOV DS,AX
32
··· ;主过程内容
RET
MAIN ENDP
PROC_A PROC NEAR
··· ;子过程 A内容,A为主过程调用
PROC_A ENDP
··· ;其他过程内容
CODE_SEG ENDS
END START
33
图 3-22 DOS下内存的分配示意图