寻址方式
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第4章 80x86指令系统
①直接寻址方式 最简单,直观;指令中直接以位移量形式,给 出操作数的有效地址EA;执行速度快,主要 用于存取位于存储器中的简单变量。 MOV AL, [1064H],设当前(DS)=2000H
操作码
(DS)*10H=20000H + 1064H 21064H
64 10
代 码 段
物理地址=
CS DS SS × 10H + EA ES
第4章 80x86指令系统
计算EA的通式为:
EA=基地址[BX或BP]+变址值[SI或DI]+位移量[0或8位或16位]
第4章 80x86指令系统 有效地址可以由以下三种地址分量组成:
● 位移量 (Displacement) :它是存放在指令中的一个 8 位或 16 位的数,但它不是立即数,而是一个地址。 ● 基址(Base Address):它是存放在基址寄存器BX或BP中的 内容。
M
31000H
…
AX
40000H
AL
30000H
…
42000H
50 40
31000H
…
64H
40
50
64H
…
第4章 80x86指令系统
③寄存器间接寻址-变址寻址方式 MOV CL, [SI]
(DI) EA= (SI)
操作码
64 10
代 码 段
DS 20000H SI 1000H + 21000H 20000H … CL 45 21000H 45 …
DS DS,SS DS,ES DS SS DS SS
3. 寄存器 [SI/DI] 变址寻址 4. 基址+变址 [BX+SI/DI] 寻址 [BP+SI/DI] 5. 基址+变址 [BX+SI/DI+disp] +位移量 [BP+SI/DI+disp]
第4章 80x86指令系统
五. 举例
例:设当前有关寄存器的内容为:(BX)=6000H, (BP)=4000H, (SI)=2000H, (DS)=3000H, (ES)=3500H, (SS)=5000H, 试确定下列指令中存储器方式的 操作数在内存中的逻辑地址和物理地址。
第4章 80x86指令系统 4.1.2 8086/8088的寻址方式 所谓寻址方式就是寻找操作数存放地址(位置)的方法。 在8086/8088系统中操作数存放的位置用以下几种: ①固定寻址 ②操作数包含在指令字节中。即指令格式中操作数部分 就是操作数本身。这种操作数叫立即数操作数。 ③ 操作数存放在CPU的某个内部寄存器中。这种操作数 叫寄存器操作数。 ④ 操作数在内存的数据区中。这种操作数叫存储器操作 数。包括直接寻址、寄存器间接寻址、寄存器相对寻址;基址 变址寻址、基址变址相对寻址方式。 ⑤其它寻址方式:包括串操作指令寻址、I/O端口寻址、 转移类指令寻址。
(BX) EA= (BP) +
(DI) (SI)
8位 disp + 16位 disp
操作码
MOV [BX+DI+1234H], AH DS:40000H BX: 0200H DI: 0010H 1234H + 41444H
34 12
40000H … … 45
代 码 段
AH
45 41444H
数 据 段
第4章 80x86指令系统
② 寄存器间接寻址-基址寻址方式
设当前(DS)=3000H, (BP)=2000H, (BX)=1000H,(SS)=4000H MOV [BX], AL MOV AX, [BP]
M
(SS)*10H=40000H + (BP)= 2000H 42000H
+
DS 30000H BX 1000H
MOV AX, [0520H] MOV AX, [BX]
MOV AX, [SI+1000H]
MOV AX, [BP+6060H]
MOV AX, ES: [BX+SI+0050H]
其它寻址方式 1)I/O端口寻址方式(以8位立 即数的方式在指令中直接给出,端口号范围0255)
第4章 80x86指令系统
第4章 80x86指令系统
存储器寻址方式小结
操作数
偏移地址 (有效地址) 隐含的 段寄存器
1. 直接寻址 2. 寄存器 基址寻址
[disp] [BX]/[BP]
disp 寄存器值 寄存器值 (BX)+ (SI)/(DI) (BP)+(SI)/(DI) (BX)+(SI)/(DI)+disp (BP)+(SI)/(DI)+disp
● 变址(Index Addess):它是存放在变址寄存器SI或DI中的内 容。
对于某条具体指令,这三个地址分量可有不同的组合。如果 存在两个或两个以上的分量,那么就需要进行加法运算,求出操 作数的有效地址(EA),进而求出物理地址(PA)。正是因为这三种 地址分量有不同的组合,才使得对存储器操作数的寻址产生了若 干种不同的方式。
第4章 80x86指令系统
1)固定寻址方式 有些单字节指令,规定CPU对某个固定的寄存器进
行。
例如:十进制加法的调整指令AAA,规定被调整的 数总位于AL中。 该指令用来调整AL中的结果,指令编码为:
OP 0011 0111
37H
第4章 80x86指令系统
2)立即数寻址方式 操作数就在指令中,当执行指令时,CPU直接从指 令队列中取得立即数,而不必执行总线周期。立即数 可以是8位的或16位的;只能是整数类型的源操作数; 主要用来给寄存器赋初值;指令执行速度快。 例如:MOV AL, 80H MOV AX, 1234H
①直接端口寻址方式
IN AL, 21H I/O接口 (表示从地址 21H的端口中读取数据到AL中)
01H
02H
…… 操作码
代 码 段
21H AL
80x86指令系统
1)I/O端口寻址方式——② 间接端口寻址方式(通过DX间接寻址, 16位端口地址放在DX中,端口范围0-65535) OUT DX, AL (将AL中的内容输出到地址由DX寄存器内容所指令的端口中)
存储器
AL
80H
存储器 操作码字节 指 令 码
AH 12
AL 34
操作码字节
34H 34
80H 80H
12H 12
指 令 码
第4章 80x86指令系统
3)寄存器寻址方式 操作数在CPU的寄存器中,指令中给出寄存器名。 源操作数和目的操作数均可采用寄存器寻址的方式。 寻址的指令长度短;操作数就在CPU内部进行,不需 要使用总线周期;指令执行速度快。 例如:MOV AX, CX
存储器 AX
CX
89 C1
指令码 (包括操作数)
第4章 80x86指令系统
4)存储器寻址方式 存储器寻址方式的操作数存放在存储器单元中。 因此,要存取操作数就必须知道其存储器的单元地 址。在指令中可以直接给出或间接给出操作数的地 址,以达到存取操作数的目的。 指令中给出的地址只是操作数的有效地址 (EA),并且是放在方括号(“[ ]”)中。若要 从存储器中存取操作数还须得到实际的地址(物理 地址)。物理地址=段基址左移四位+有效地址
I/O接口 0001H
DX 12 34
0002H
……
AL
1234H 80
80
AL
45
20000H
… 21064H 45
数 据 段
第4章 80x86指令系统
如果没有特殊指明,直接寻址方式的操作数一般在存储器的 数据段中,即隐含的段寄存器是 DS 。但是 8086/8088 也允许段超 越,此时需要在指令中特别标明,方法是在有关操作数的前面写 上操作数所在段的段寄存器名,再加上冒号。例如,若以上指令 中源操作数不在数据段而在附加数据段中,则指令应写为如下形 式: MOV AL,ES:[1064H] 在汇编语言指令中,可以用符号地址来表示位移量。例如: MOV AL,[value] 或MOV AL,value 此时value为存储单元的符号地址。
数 据 段
第4章 80x86指令系统
④ 基址加变址寻址方式
(BX) EA= (BP) +
(DI) (SI)
SS:40000H BP: 2000H + SI: 1200H 43200H 40000H
MOV AH, [BP+SI]
M
AH
…
56H
56H
…
43200H
第4章 80x86指令系统
⑤基址加变址加位移量