8086寻址方式与指令系统

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第3章 寻址方式与指令系统
指令系统概述 8086寻址方式 8086指令系统
1
指令系统概述
1.指令的基本概念
指令——控制计算机完成指定操作的命令
机器语言指令——指令的二进制代码形式。 例如:B8 34 12
汇编语言指令——助记符形式的指令。 例如:MOV AX,1234H
指令系统——CPU所有指令及其使用规则的集合
5
有效地址EA 存储器操作数所给出的偏移地址即为有效地址,
简称EA。EA是一个16位的无符号数, 代表被寻址的存 储器操作数在存储器中的位置距该段起点(首单元)的字 节数。
操作数的物理地址=段地址16+EA 例: MOV AX,[0100H] ;PA=DS16+0100H MOV AX,[BX] ;PA=DS 16+BX
6
与数据有关的寻址方式:以 MOV指令为例
• 立即寻址
MOV AX , 3069H
• 寄存器寻址
MOV AL , BH
• 直接寻址
MOV AX , [ 2000H ]
• 寄存器间接寻址 MOV AX , [ BX ]
• 变址寻址
MOV AX , COUNT [ SI ]
• 基址变址寻址
MOV AX , [ BP ] [ DI ]
DS 8000 BX 2000 DI 1000
...
操作码



+ DATA 0200
83200
...
83200H
78H
56H
AX AH AL
...
数 据 段
18
段 寄 存 器 的 使 用 规 定
默认的 访问存储器的方式 段寄存器 偏移地址
可跨越的 段寄存器
取指令
CS
IP

堆栈操作
SS
SP

一般数据访问
MOV AL, 5
;将5这一立即数送寄存器AL中。
MOV BL,0B6H
低地址
MOV AX,3069H
操作码 B8
立即数低字节 69
*立即数只能作为源操作数。
立即数高字节 30
*主要用于给寄存器或存储器赋初值。
*字节/字取决于目的操作数 MOV AL,5 ;05H MOV AX,5 ;0005H
高地址
• 段间寻址 段间直接寻址 JMP FAR PTR NEXT
段间间接寻址 JMP DWORD PTR [ BX ]
8086指令系统
共133条基本指令,按功能分为六大类 • 数据传送指令 • 算术运算指令 • 逻辑运算和移位指令 • 串操作指令 • 程序控制指令 • 处理器控制指令
21
重点关注: • 指令的汇编格式 • 指令的基本功能 • 指令支持的寻址方式 • 指令的执行对标志位的影响 • 指令的特殊要求
MOV DS, ES *立即数不能直接送段寄存器
MOV DS, 2000H * DST 不能是立即数和CS * 不影响标志位
24
指令举例:
通用数据传送指令一:寄存器与寄存器之间的数据传送
MOV MOV MOV MOV
AX,BX DL,AH DS,AX CX,DX
通用数据传送指令二:立即数到通用寄存器的数据传送
堆栈是一种单端操作的存储结构,有两种形式: 一种是硬堆栈,即用寄存器组来实现的。另一种是 软堆栈,即用主存的一部分空间作堆栈。堆栈主要 用于暂存数据以及在“过程”调用或处理中断时暂 存断点信息。
27
8086堆栈的构造
栈底(Bottom) 为堆栈空间的高地 址单元。
段地址:SS 0000H
栈顶(TOP) 为低地址单元。
22
1. 数据传送指令
(1)通用数据传送指令: MOV DST, SRC
格式 MOV reg,imm MOV mem,imm MOV reg1,reg2 MOV reg,mem MOV mem,reg MOV segreg,reg MOV segreg,mem MOV reg,segreg MOV mem,segreg
+ DATA 2A00
...
63A00
63A00H 66H

AX AH AL
55H
...
据 段
14
(6) 基址变址寻址方式:由一基址寄存器(BX/BP) 和一变 址寄存器(SI/DI)相加作为参加操作的数所在的有效地址。
有效地址 =
(BX) +
(SI)
(BP) (DI)
4种组合
指令格式:
MOV MOV MOV
;PA = 16d SS + BP
*只有SI、DI、BX和BP可作间址寄存器。
MOV AX, [CX] ;错误
* SRC 和 DST 的字长一致 ,源操作数为立即寻址时,应指
明操作数类型。
MOV DL, [ BX ] ; [BX]指示一个字节单元
MOV DX, [ BX ] ; [BX]指示一个字单元
30 69 AX
8
(2)寄存器寻址方式: 参加操作的数在指令指定的寄存器中,即 寄存器的内容为参加操作的数。
MOV AL, BH;将BH中的值送到寄存器AL中。 MOV AX, BX;将BX中的值送到寄存器AX中。 MOV AX, 3069H;指令中的目标操作数也是寄存器寻址。
可使用的寄存器: 16位:AX、BX、CX、DX、SI、DI、BX、BP 8位:AH、AL、BH、BL、CH、CL、DH、DL
MOV AX,2000H ;AX2000H
MOV AX,[2000H] ;AX字(DS:2000H)
MOV AX,BX
; AXBX
MOV AX,[BX]
; AX字(DS:2000H)
如何根据指令中提供的操作数获得真正参加 操作的数或指令转移的目标地址,称寻址方式。
指令的寻址方式分源操作数寻址方式和目标操 作数寻址方式,通常指源操作数寻址方式。
存储器的数据类型与寄存器要一致
通用数据传送指令四:立即数到存储器的数据传送
MOV WORD PTR [2000H],1000H MOV BYTE PTR[SI],15 MOV ALFA,25 ;ALFA已定义,类型确定
一定要使立即数与存储器数据类型一致
26
(2) 堆栈(Stack)操作指令 什么是堆栈?
DS
有效地址EA CS ES SS
BP作为基址的寻址
SS
BP
CS DS ES
串操作的源操作数
DS
SI
CS ES SS
串操作的目的操作数
ES
DI

19
与转移地址有关的寻址方式(转移指令中介绍) 用来确定转移指令及调用子程序的入口地址。
• 段内寻址 段内直接寻址 段内间接寻址
JMP NEAR PTR NEXT JMP TABLE [ BX ]
MOV BYTE PTR[SI],3 ;字节
MOV WORD PTR[SI],3 ;字
* 一般用于访问表格或字符串。
11
指令操作例:MOV AX,[SI]
•若 DS=6000H, SI=1200H, (61200H)=44H,
(61201H)=33H
•则指令执行后,AX=3344H。
DS
SI
6000
2
2. 指令格式
操作码 MOV ADD ADD
操作数 AX,[2000H] AX,0100H AL,BL
;双操作数,AX字(DS:2000H) ;表示为:操作码 DST,SRC
DEC BX
;单操作数,表示为:操作码 DST
NOP
;无操作数
3
8086寻址方式
注意以下指令的区别:(假设BX=2000H)
节弹到目标操作数低位,高位字节
弹到目标操作数据高位。
SP0100H
栈顶
栈底
28
堆栈操作
0000H
0000H
0000H
0000H
00FAH 00FBH 00FCH 00FDH 00FEH 00FFH SP0100H
• 相对基址变址寻址 MOV AX , MASK [ BX ] [ SI ]
• 串操作数寻址
• 端口寻址
• 隐含寻址
7
(1)立即寻址方式 : 操作数在指令中给出,即指令中的操作数就 是参加操作的数(放在指令代码的操作码之后)。
MOV AX, 3069H ;将3069H这一立即数送寄存器AX中。
MOV AL, ‘A’ ;将41H这一立即数送寄存器AL中。
4
操作数的种类
(1)立即数
MOV AX ,100H ; 源操作数100H即为立即数。
(2)寄存器操作Байду номын сангаас ADD AX , BX
(3)存储器操作数 MOV AX,[100H]
(4)操作数在端口寄存器中 IN AL,80H
(5)隐含的寄存器操作数
DAA
指令中没有给出操作数,但实际上隐含使用了某 些指定的寄存器或段寄存器。
如:MOV AX,BUF 或 MOV AX,[BUF]
10
(4)寄存器间接寻址:由基址寄存器(BX/BP) 或变址寄存器
(SI/DI) 提供参加操作的数所在的有效地址。
MOV AX, [BX]
;PA = 16d DS+ BX
MOV AX, ES:[BX] ;PA = 16d ES + BX
MOV AX, [BP]
堆栈指针SP(Stack Pointer)存放
栈顶的有效地址,段地址在SS中 。
堆栈是按字组织的,即每次在堆栈 中存取数据均是两个字节。
00FAH 00FBH
一个16位数据进栈的规律是:高位
00FCH
字节存入高地址单元,低位字节存
00FDH
入低地址单元。
00FEH
一个16位数据出栈规律是:低位字
00FFH
MOV MOV MOV MOV MOV
AL,25 AX,1000 BX,025AH BYTE PTR [BX],34H WORD PTR [BP],2345H
25
通用数据传送指令三:寄存器与存储器之间的数据传送
MOV MOV MOV MOV MOV MOV
AL,BUFFER;BUFFER为变量 AX,[SI] SI,ES:[BP] DS,DATA[BX+SI] ALFA[BX+DI],ES AL,[2000H]
1200
存储器
60000 +) 1200
61200
61200H
44H

AX
33H
据 段
33H 44H
12
(5) 寄存器相对寻址方式:由基址寄存器(BX/BP) 或变址寄存器 (SI/DI) 与一偏移量相加作为参加操作的数的有效地址。
有效地址 =
(BX)
(BP) 8位
+
(SI)
位移量 16位
(DI)
含义 立即数传送至通用寄存器 立即数传送至存储器 寄存器之间进行数据传送 存储器内容传送至通用寄存器 寄存器内容传送至存储器 寄存器内容传送至段寄存器(除CS) 存储器内容传送至段寄存器(除CS) 段寄存器内容传送至寄存器 段寄存器内容传送至存储器
23
数据传送方向示意图
注意: *操作数类型:SRC:寄存器、存储器、 立即数;DST:寄存器、存储器 * DST、SRC 不能同时为存储器寻址 *段寄存器间不能相互传送
AX, [BX] [DI] AX, [BX+DI] AX, ES:[BX] [SI]
*必须是一个基址寄存器和一个变址寄存器的组合 MOV AX, [BX] [BP] ;错误 MOV AX, [SI] [DI] ;错误
*可用于表格或数组数据的访问 15
指令操作例:MOV AX,[BX][SI]
假定:DS=8000H, BX=2000H, SI=1000H 则物理地址 = 80000H + 2000H + 1000H = 83000H
指令格式: MOV AX, COUNT[SI] 或 MOV AX, [COUNT+SI]
*也可使用段跨越前缀 MOV AX,ES:COUNT[SI] *可用于表格或数组数据的访问
13
指令操作例:MOV AX,DATA[BX]
...
DS 60000 BX 1000
操作码

00 偏移量低 码 2A 偏移量高 段
9
(3) 直接寻址方式:指令中直接提供参加操作的数所在的有效地址 EA(操作数的偏移地址) 。
例:MOV AX, [ 2000H ]
EA=2000H, 假设DS=3000H, 那么PA=32000H
AH
AL
30H 50H
32000H 50H
30H
AX = 3050H
* 直接寻址默认的段为数据段 DS * 可使用段跨越前缀 MOV AX, ES: [2000H] * 编程时,常用符号地址(变量名)代替操作数的偏移量
指令执行后: AX=1234H
DS 8000
...
操作码
BX 2000
+ SI 1000
83000
...
83000H
34H
AX AH AL
12H
...
代码段
数据段
16
( 7 ) 相对基址变址寻址方式:由一基址寄存器(BX/BP) 和一变址 寄存器(SI/DI)和偏移量相加作为参加操作的数所在的有效地址。
有效地址 =
(BX) (SI)
+
+
8位 位移量
(BP) (DI) 16位
如: MOV AX, MASK [BX] [SI] 或 MOV AX, MASK [BX+SI] 或 MOV AX, [MASK+BX+SI]
17
指令操作例:MOV AX,DATA[DI][BX]
若DS=8000H, BX=2000H, DI=1000H, DATA=200H 则指令执行后AX=5678H
相关文档
最新文档