文档介绍:指令系统一组指令的集合
第三章 80x86的指令系统和寻址方式
操作码操作数... 操作数
指令:
寻址方式
与数据有关的寻址方式
与转移地址有关的寻址方式
1. 8086 的寻址方式
与数据有关的寻址方式:
立即寻址 MOV AX , 3069H
寄存器寻址 MOV AL , BH
直接寻址 MOV AX , [ 2000H ]
寄存器间接寻址 MOV AX , [ BX ]
寄存器相对寻址 MOV AX , COUNT [ SI ]
基址变址寻址 MOV AX , [ BP ] [ DI ]
相对基址变址寻址 MOV AX , MASK [ BX ] [ SI ]
存储器寻址
(1) 立即寻址方式* ——操作数在指令中给出
MOV AL , 5
MOV AX , 3064H
MOV AL , ‘A’
* 只能用于 SRC 字段
* SRC 和 DST 的字长一致 MOV AH , 3064H
(2) 寄存器寻址方式* ——操作数在指定的寄存器中
MOV AX , BX
MOV AL , BH
MOV AX , 3064H
* 字节寄存器只有 AH AL BH BL CH CL DH DL
* SRC 和 DST 的字长一致 MOV AH , BX
* CS 不能用 MOV 指令改变 MOV CS , AX
(3) 直接寻址方式* ——有效地址 EA 由指令直接给出
例:MOV AX , [ 2000H ]
EA = 2000H , 假设(DS) = 3000H , 那么 PA = 32000H
* 隐含的段为数据段 DS
* 可使用段跨越前缀 MOV AX , ES: [ 2000H ]
* 操作数地址可由变量(符号地址)表示
VALUE DB 10
MOV AH , VALUE
MOV AX , VALUE
MOV AX , WORD PTR VALUE
50H
30H
32000
AH AL
30
50
(AX) = 3050H
(4) 寄存器间接寻址* —— EA 在基址寄存器( BX / BP )
或变址寄存器( SI / DI ) 中
MOV AX , [ BX ] PA = 16d ( DS ) + ( BX )
MOV AX , ES: [ BX ] PA = 16d ( ES ) + ( BX )
MOV AX , [ BP ] PA = 16d ( SS ) + ( BP )
* 不允许使用AX、CX、DX 存放 EA
MOV AX , [ CX ]
* SRC 和 DST 的字长一致
MOV DL , [ BX ] ; [ BX ] 指示一个字节单元
MOV DX , [ BX ] ; [ BX ] 指示一个字单元
* 适于数组、字符串、表格的处理
有效地址=
( BX )
( BP ) 8 位
( SI ) 16 位
( DI )
+
位移量
(5) 寄存器相对寻址方式*
例: MOV AX , COUNT [ SI ] 或 MOV AX , [ COUNT + SI ]
假设( DS ) = 3000H, ( SI ) = 2000H, COUNT = 100H,
那么 PA = 32100H
假设( 32100H ) = 1234H, 那么( AX ) = 1234H
* 适于数组、字符串、表格的处理
(6) 基址变址寻址方式*
MOV AX , [ BX ] [ DI ]
或 MOV AX , [ BX + DI ]
MOV AX , ES: [ BX ] [ SI ]
* 适于数组、字符串、表格的处理
* 必须是一个基址寄存器和一个变址寄存器的组合
MOV AX , [ BX ] [ BP ]
MOV AX , [ SI ] [ DI ]
有效地址=
( BX ) ( SI )
( BP ) ( DI )
+
(7) 相对基址变址寻址方式
MOV AX , MASK [ BX ] [ SI ]
或 MOV AX , MASK [ BX + SI ]
或 MOV AX , [ MASK + BX + SI ]
有效地址=
( BX ) ( SI ) 8位
( BP ) ( DI ) 16位
+
+
位移量
访问存储器的方式
默认的
段寄存器
可跨越的
段寄存器
偏移地址
取指令 CS 无 IP
堆栈操作 SS 无 SP
一般数据访问 DS CS ES SS 有效地址 EA
BP 作为基址的寻址 SS CS DS ES BP
串操作的源操作数 DS CS ES SS SI
串操