Professional Documents
Culture Documents
本章结构
2.1 操作数类型
2.2 有效地址和段超越
2.3 与数据有关的寻址方式
2.4 与转移地址有关的寻址方式
2.5 寻址方式总结
2.1 操作数类型
2.1.1 立即数
2.1.2 寄存器操作数
2.1.3 存储器操作数
2.1 操作数类型
每种计算机提供给用户使用一组指令集及其相关语法
规则称为该计算机的指令系统。
一条指令提供的信息:完成什么操作、操作数或操作数
地址是什么。
操作码域 : 指定要完成的操作。
2.1 操作数类型
操作数 2 :源操作数,表示参与指令操作的一个对象;
操作数 1 :目的操作数,它不仅可以作为指令操作的一
个对象,还可以用来存放指令操作的结果。
分号后的内容是对指令的解释。
例: MOV AH , 10 ; ( AH )= 10
2.1 操作数类型
2.1.1 立即数
2.1.1 立即数
操作码占 1 个或 2 个字节
后面的各个字节指明操作数:
“mod reg r/m” 字节表明采用的寻址方式,
“ 位移量”字节给出某些寻址方式需要的对
基地址的偏移量,
“ 立即数”字节给出立即寻址方式需要的数
值本身。
2.1 操作数类型
2.1.2 寄存器操作数
操作数的各个字段有多种组合,如表 1 所示
mem—— 代表 m8 或 m16
r8—— 任意一个 8 位通用寄存器
i8—— 一个 8 位立即数
r16—— 任意一个 16 位通用寄存器
i16—— 一个 16 位立即数
reg—— 代表 r8 或 r16
imm—— 代表 i8 或 i16
seg—— 段寄存器 CS/DS/ES/SS
dst /src—— 目的操作数 / 源操作
m8—— 一个 8 位存储器操作数单元 数
m16—— 一个 16 位存储器操作数单元
表 1. 指令操作数的表达
2.1 操作数类型
2.1.3 存储器操作数
存储器操作数的偏移地址可由以下三种成分组合
存储器操作数的偏移地址可由以下三种成分组合
偏移量 + 基址 + 変址 = EA (有效地址)
2.1.3 存储器操作数
如果操作数存放在存储区中 , 这样的操作
数称为存储器操作数。
2.1 操作数类型
2.1.3 存储器操作数
计算机中操作数保存的地方
计算机中操作数保存的地方
当操作数存放在存储器中时,存储器存储单元的物理地
址由两部分组成:偏移地址和段地址。
在 8086/8088 的各种寻址方式中,寻找的存储单元所需的
偏移地址成为有效地址( EA )。
存储器操作数寻址时,存储单元的物理地址的另一部分是
段地址。
2 .2 有效地址和段超越
当被访问的操作数的段基址不在约定使用的段寄存器
中 , 而在其它的段寄存器中时 , 可以使用段跨越前缀指
定其所在的段寄存器。
段跨越前缀的表示形式:
ES: 、 CS: 、 SS: 、 DS :
例: MOV AX,DS:[BP] MOV ES:[BX],AX
2 .2 有效地址和段超越
表 3-1 段基址和偏移量的约定情况
在实模式下提供有效地址需要使用的有关
寄存器分别为:
( 1 )段寄存器 CS 、 DS 、 ES 和 SS
( 2 )通用寄存器 BX
( 3 )基址指针寄存器 BP
( 4 )変址寄存器 SI 和 DI
2 .3 与数据有关的寻址方式
指令系统设 在 8088 /
操作
计了多种操 8086 指令系统中, 数据寻址方
数采取哪一种寻 与数据有关的寻
作数的来源, 式以 MOV
址方式,会影响 址方式可以分为
寻找操作数 DST , SRC 为例
机器运行的速度 7 种,用于确定
的过程就是 讨论。
和效率。 操作数地址,从
操作数的寻
址方式。 而找到操作数。
.
2 .3 与数据有关的寻址方式
2.3.1 立即寻址方式
2.3.2 寄存器寻址方式
2.3.3 直接寻址方式
2.3.4 寄存器间接寻址方式
2.3.5 寄存器相对寻址方式
2.3.6 基址变址寻址方式
2.3.7 相对基址变址寻址方式
2 .3 与数据有关的寻址方式
2.3.1 立即寻址方式
操作:欲将一个常数送到寄存器中或者存储器中的一个单元;
我们可以将操作数直接写在指令中,
如 MOV AH,10
这种提供操作数的方式称为立即寻址方式,把该操作数称为立即数。
2 .3 与数据有关的寻址方式
2.3.1 立即寻址方式
立即寻址方 注意:
式只能出现在
源操作数的位
置。 指令的源操
作数长度应
与目的操作数
长度一致。
2 .3 与数据有关的寻址方式
2.3.1 立即寻址方式
例 1. 程序代码段所在存储器
MOV AL,6
…
; ( AL )= 6 OP AL
06
…
2 .3 与数据有关的寻址方式
2.3.1 立即寻址方式
例 2.
AX
…
MOV AX,1234H
OP 12 34
; ( AX )=
34
1234H
12
…
2 .3 与数据有关的寻址方式
2.3.2 寄存器寻址方式
操作数存放在寄存器中,由指令指定寄存器名的寻址方式。这种寻址方式不需
要访问外部总线,存取速度较高。
可用的寄存器:通用寄存器或段寄存器 (CS 不能用于 DST) 。
对 16 位操作数,可以用 AX,BX,CX,DX,SI,DI,SP 和 BP;
对 8 位操作数,可以用 AL,AH,BL,BH,CL,CH,DL,DH ;
2 .3 与数据有关的寻址方式
2.3.2 寄存器寻址方式
例 3.
MOV BX, AX ; ( BX )( AX )
; AX 中的内容不变
2 .3 与数据有关的寻址方式
2.3.2 寄存器寻址方式
例 5.
MOV AL, 78H ; ( AL ) 78H
2 .3 与数据有关的寻址方式
2.3.2 寄存器寻址方式
2.3.3 直接寻址方式
操作数的有效地址只包含位移量一种成
分,位移量的值即操作数的有效地址。
可以将该变量的有效地址直接写在指令
中
--- 直接寻址方式。
用途: 通用格式:
操作码 DST , EA
存取单个变量。
2 .3 与数据有关的寻址方式
2.3.3 直接寻址方式
例 7.
MOV AX,[0078H] ;缺省段寄存器为 DS 。
其功能与右面两条指令的功能等价:
MOV AX,[0078H]
MOV AL,[0078H]
MOV AH,[0079H]
执行结果如图 3-2(a)所示。
2 .3 与数据有关的寻址方式
2.3.3 直接寻址方式
例 7.
AH AL (DS)
30 50
30078 50 MOV AX,
[0078H]
30079 30
图 3-2(a)
2 .3 与数据有关的寻址方式
2.3.3 直接寻址方式
例 7.
(DS) = 3000H
物理地址 PA = 16d (DS) + EA
=16 3000H+0078H = 30078H
字地址 30078H 中的内容: (30078H )= 3050H
执行结果是 (AX) = 3050H
2 .3 与数据有关的寻址方式
2.3.3 直接寻址方式
非默认段的情况
如果操作数在附加段中,则应指定段跨越前缀如下:
MOV AX , ES : VAR
或 MOV AL, ES:[0078H]
实际上只有在 DEBUG 环境下,才有 [0078H] 这样的表示
。在汇编语言源程序中直接寻址方式都是用符号表示的。
2 .3 与数据有关的寻址方式
2.3.4 寄存器间接寻址方式
操作数在存储器中,而该操作数的有效地
址放在 BX 、 BP 和 SI 、 DI 四个寄存器中提供给
CPU 的寻址方式。
若指令中使用 BX 、 SI 、 DI ,则默认与 DS 段寄
存器配合 ; 若使用 BP, 则默认与 SS 配合。
BX 、 BP 和 SI 、 DI 均允许使用段跨越。
2 .3 与数据有关的寻址方式
2.3.4 寄存器间接寻址方式
例 9.
MOV AX,[BX] ; AX ( DS:[BX] )
注意它与寄存器寻址方式在形式上的区别:
MOV AX , BX ;(AX) (BX)
源操作数的物理地址为:
PA = (DS) × 10H + (BX)
2 .3 与数据有关的寻址方式
2.3.4 寄存器间接寻址方式
例 9.
若 (DS) = 3000H, ( BX )= 78H, ( 30078H )= 12H
则: PA = 3000H×10H + 78H = 30078H
该指令的执行结果是
( AL )= ( 30078H )= 12H
2 .3 与数据有关的寻址方式
2.3.4 寄存器间接寻址方式
寄存器间接寻址方式处理一维数组 X[10]
DS X0
X1
X2
BX + X3
Xi AL
X9 图 3-3 寄存器间接寻址方式执行情况
2 .3 与数据有关的寻址方式
2.3.5 寄存器相对寻址方式
EA =(基址<或变址>寄存器)+ disp
位移量可以是一个字节或一个字的带符号数。
与段寄存器约定配合与寄存器间接寻址约定相同
2 .3 与数据有关的寻址方式
2.3.5 寄存器相对寻址方式
例 11.
MOV AL,TABLE[BX] 或 MOV AL,[BX+TABLE]
其中 TABLE 为位移量的符号表示。
指令执行结果是:
AL ← ( DS:[ BX+TABLE ] )
使用这种寻址方式可以访问一维数组 , 其
中 TABLE 是数组首地址的偏移量 , 寄存器中
存放数组元素的下标乘以元素的长度的积(一个元
素占用的字节数),下标从 0 开始计数。
2 .3 与数据有关的寻址方式
2.3.5 寄存器相对寻址方式
2.3.5 寄存器相对寻址方式
DS 寄存器间接寻址方式处理一维数组
BX +
8
+ 图 3-4 寄存器相对寻址执行情况
MOV AX,[BX+8]
34H AX
12H
2 .3 与数据有关的寻址方式
2.3.6 基址变址寻址方式
操作数的有效地址是一个基址寄存器和一个变址寄存器的
内容之和。 BX SI
EA=
BP + DI
缺省使用段寄存器的情况由基址寄存器决定。允许使用段
跨越前缀。使用段跨越前缀时的格式为: MOV
AX , ES:[BX][SI]
2 .3 与数据有关的寻址方式
2.3.6 基址变址寻址方式
基址变址寻址方式组合
基址 变址
BX SI
EA = BP + DI
2 .3 与数据有关的寻址方式
2.3.6 基址变址寻址方式
例 13. MOV
AL, [BX] [SI]
; ( DS:[BX+SI] )→ AL
该指令可以表示为:
MOV AL,[BX+SI]
使用该寻址方式可以访问一维数组。
用 BX 存放数组起始地址的偏移量, SI 存放数组元素的下标乘以元素
的长度,下标从 0 开始计数。则数组中任一元素的有效地址 = ( BX
) + ( SI )。
因为数组的首地址存放在寄存器中 , 因此可以访问存储器中任意已知
地址指针的数组 .
执行情况如图 3-6 所示。
2 .3 与数据有关的寻址方式
2.3.6 基址变址寻址方式
基址变址寻址方式访问一维数组
DS
BX
+ BX 存放数组起始地址的
偏移量,
SI 存放数组元素的下标
SI
+ 乘以元素的长度,
下标从 0 开始计数。
XX AL
图 3-6 基址变址寻址方式执行情况
2 .3 与数据有关的寻址方式
2.3.7 相对基址变址寻址方
式
有效地址分解成三个部分提供:
有效地址分解成三个部分提供:
= EA
DISP + 基址寄存器 + 変址寄存器
DISP 可以是一个字节、一个字的带符号数。
缺省使用段寄存器的情况由基址寄存器决定。
允许使用段跨越前缀。
2 .3 与数据有关的寻址方式
2.3.7 相对基址変址寻址方
式
例 14.
MOV AL, ARY[BX] [SI]
; ( DS:[BX+SI+ARY] )→ AL
可表示为:
MOV AL, ARY [BX+SI]
或 MOV AL,[BX+SI+ARY]
执行情况如图3-8所示。
2 .3 与数据有关的寻址方式
2.3.7 相对基址変址寻址方
式
相对基址变址寻址方式访问二维数组
设数组在内存中以行的形式存放。
ARY 为数组起始地址的偏移量 ,
基址寄存器为某行首与数组起始地址的距离,
即行下标 × 一行占用的字节数 ,
变址寄存器为某列与所在行首的距离
即列下标 × 元素长度,
若保持基址寄存器不变而变址寄存器改变 , 则可以访问同一行的所有元素 ;
若保持变址寄存器不变而基址寄存器改变,则可以访问同一列的所有元素。
2 .3 与数据有关的寻址方式
2.3.7 相对基址変址寻址方
式
相对基址变址寻址方式访问二维数组图示
DS
BX +
SI +
XX AL
图 3-8 相对基址变址寻址方式
2 .4 与转移地址有关的寻址方式
2.4.1 段内直接寻址
2.4.2 段内间接寻址
2.4.3 段间直接寻址
2.4.4 段间间接寻址
2 .4 与转移地址有关的寻址方式
本节讨论的寻址方式是用来确定转移及调用指令的转向
地址。既根据目标地址所在的位置,用前面介绍的寻址方式将转
移目标地址的地址提供给 CPU 。下面以 8086 / 8088 的无条件转
移指令为例来说明。
无条件转移指令格式:
JMP 目标
功能:无条件转移到目标地址处执行指令。
2 .4 与转移地址有关的寻址方式
与转移地址有关的寻址方式的功能
1 、转移的目标地址有两类 2 、提供目标地址的方法有两类
8位
( IP ) EA =( IP )+ DISP
16 位
段转移与近转移 )
若位移量为 8 位,称为短转移,可以实现距离当前
(IP) 为 [ + 127 ,- 128] 字节范围内的转移,
格式: JMP SHORT LAB
若位移量为 16 位,称为近转移 , 可以实现距离当前 (IP) 为
±32K 字节范围内的转移,
格式: JMP LAB
或 JMP NEAR PTR LAB
2 .4 与转移地址有关的寻址方式
2.4.2 段内间接寻址方式
程序转向的有效地址存放在一个寄存器或内存单
元中,该寄存器号或内存地址按前面介绍的与操
作数有关的寻址方式(立即寻址方式除外)获得。
取到其中的有效地址送给 IP ,实现转移。指令格式
及举例见表 3-1 。
2 .4 与转移地址有关的寻址方式
2.4.2 段内间接寻址方式
格 式 举 例 注 释
JMP
JMP BX 16 位转向地址在 BX 中
通用寄存器
16 位转向地址在 VAR 字型
JMP JMP VAR 内存变量中
内存单元 16 位转向地址在 BX 所指向
JMP WORD PTR [BX]的内存变量中
表 3-1 段内间接寻址方式
2 .4 与转移地址有关的寻址方式
2.4.2 段内间接寻址方式
指令中直接给出转向的 4 字节的偏移量和段基址 ,
只需把它们分别送给 IP 和 CS 后即可实现段间转移。
指令格式: JMP FAR PTR LAB
;(IP) ←LAB 的 EA
;(CS) ←LAB 的段基址
字节 0 字节 1 字节 2 字节 3 字节 4
图 3-11 段间直接寻址方式
2 .4 与转移地址有关的寻址方式
2.4.4 段间间接寻址方式