文档介绍:指令系统
一组指令的集合
第3章 80x86的指令系统和寻址方式
操作码操作数... 操作数
指令
寻址方式
与数据有关的寻址方式
与转移地址有关的寻址方式
1. 8086的寻址方式
与数据有关的寻址方式:以 MOV 指令为例
立即寻址 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 字段 MOV 40H, AL
* 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
(WORD PTR 是字操作符,以后详细讲)
50
30
32000
AH AL
30
50
(AX) = 3050H
寄存器间接寻址* — 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=3000H,
则: PA = 35000H
假设(35000H)=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
串操作的目的操作数 ES 无 DI
段寄存器的使用规定