文档介绍:第二章 8086/8088的寻址方式与指令系统
指令系统:
计算机提供给用户使用的指令集
双操作数指令格式:
操作码
操作数,
操作数
目的
源
例如:
MOV AX,100
MOV AX,BX
MOV AX,[BX]
要访问操作数,首先必须确定如何形成操作数的地址。
确定获得操作数地址的方法
寻址方式:
操作结果
替代目的操作数
不影响源操作数
寻址方式选择得正确与否,直接影响程序的执行效率。
寻址方式
寻址方式分类:
1)与数据有关的寻址方式
2)与转移地址有关的寻址方式
:确定内存单元的地址
有 7 种与数据有关的寻址方式
:确定转移地址
以MOV指令为例: MOV 目的操作数,源操作数
对源操作数分别使用7 种寻址方式如下:
(1)立即寻址方式(Immediate Addressing )
特点:操作数包含在指令中
操作数是指令的组成部分,可以是8位或16位,取出指令就立即获得操作数——立即数
例1: MOV AL, 5
执行指令后: (AL) = 05H
B0
05
存储器
指令
05
AL
例2: MOV AX, 3045H
执行指令后: (AX) = 3045H
指令
45
AX
OP
45
存储器
30
30
低地址
高地址
用途:给变量或寄存器赋常量值
限制:只能用于源操作数
(2)寄存器寻址方式(Register Addressing )
特点:操作数存在寄存器中
例: MOV AX, BX
执行指令前: (AX) = 3045H (BX) = 4000H
执行指令后: (AX) = 4000H (BX) = 4000H
用途:用寄存器提供操作数时存取速度快
指令
2000H
50
30
…
…
…
…
存储器
代码段
op
00
20
数据段
30000H
32000H
AX
用途: 用于存取单个变量中的操作数
30
50
例:设( DS ) = 3000H
MOV AX, [2000H]
(3)直接寻址方式(Direct Addressing )
特点:操作数的偏移地址包含在指令中
要访问的存储单元物理地址为:
30000H+2000H=32000H
设: (32000H)=3050H
执行指令后: (AX)=3050H
如果2000H单元在附加段,指令为: MOV AX, ES:[2000H]
段跨越前缀: 段寄存器名: ——改变默认使用的段寄存器
MOV AX, NUM
1000H
AX
用途: 可用于处理数组
50
A0
A0
50
…
…
…
存储器
数据段
20000H
21000H
XX
XX
21002H
例:设( DS ) = 2000H
( BX ) = 1000H
指令为: MOV AX, [ BX ]
数组起始地址
(4)寄存器间接寻址方式(Register Indirect Addressing )
特点: (寄存器) = 操作数的偏移地址
计算操作数物理地址的公式:
1) 操作数物理地址=(DS)16+
2) 操作数物理地址=(SS)16+(BP)
(BX)
(SI)
(DI)
20000H+1000H = 21000H
要访问的存储单元
物理地址为:
设: (21000H)=50A0H
执行指令后: (AX)=50A0H
指令
4000H
30000H
AX
(寄存器相对寻址方式)
12
34
例:设( DS ) = 3000H
ARRAY=4000H
( SI ) = 2000H
指令为: MOV AX, ARRAY[ SI ]
34
12
…
…
…
…
存储器
代码段
op
00
40
数据段
36000H
op
…
2000H
数组起始地址
(5)变址寻址方式( Indexed Addressing )
特点: (变址、基址寄存器) +指令中的位移量= 操作数的偏移地址
计算操作数物理地址的公式:
1) 操作数物理地址=(DS)16+
2) 操作数物理地址=( SS)16+ (BP) +
8位位移量
16位位移量
30000H+4000H +2000H= 36000H
要访问的存储单元
物理地址为:
设: (36000H)=1234H
用途: 可用于处理数组
执行指令后: (AX)=1234H
+
(SI)
(DI)
(BX)
8位位移量
16位位移量
0158H
AX
12
34
例:设 ( DS ) = 2100H
( BX