寄存器间接寻址

Download Report

Transcript 寄存器间接寻址

指令格式与寻址方式
指令的助记符格式
操作码
操作数1,操作数2
;注释
• 操作数1,成被称为目的操作数dest,它不仅可以
作为指令操作的一个对象,还可以用来存放指令
操作的结果
• 操作数2,常被称为源操作数src,它表示参与指
令操作的一个对象
问题
指令解决什么问题?
汇编语言指令要解决的两个问题:
要指出进行什么操作——操作码;
要指出操作数和操作结果放在何处——寻址方式。
指令的操作码和操作数
• 每种指令的操作码:
– 用一个助记符表示(指令功能的英文缩写)
– 对应着机器指令的一个或多个二进制编码
• 指令中的操作数:
– 可以是一个具体的数值
– 可以是存放数据的寄存器
– 或指明数据在主存位置的存储器地址
• 操作数可以有一个操作数、两个操作数或隐含在
助记符中(形式上无操作数)。
2.2 8086的寻址方式
• 根据操作数所在位置,8086寻址方式
分为三大类:
– 立即数寻址
– 寄存器寻址
– 存储器寻址
• 根据8086的指令格式的不同,存储器寻址方式又
可分为:
– 直接寻址
– 寄存器间接寻址
– 寄存器相对寻址
– 基址变址寻址
– 相对基址变址寻址
8
0
8
6
寻
址
方
式
立即数寻址
寄存器寻址 直接寻址
与数据相关的寻址方式
寄存器间接
存储器寻址 寄存器相对
基址加变址
相对基址加变址
段内直接寻址
段内寻址
与地址相关的寻址方
式
段内间接寻址
段间寻址 段间直接寻址
段间间接寻址
1)立即数寻址
操作数就在指令中提供,叫立即寻址方式。
比如:
;将1090H送AX,AH中为10H,AL中为90H
AH
AL
MOV AX,1090H
AX
10H
90H
代码段
mov
90H
10H
• 操作数紧跟在操作码的后面,与操作码一起放在存储器的
代码段区域中。在取出指令的同时,也就取出了操作数。
它主要用来给寄存器或存储单元赋初值,也可以与寄存器
操作数或存储器操作数进行算术逻辑运算。
2) 寄存器寻址
操作数在CPU内部的寄存器中,指令中操作数
用内部寄存器——寄存器寻址方式。
例如:
MOV AX, BX ;将BX的内容复制到AX
AX
BX
ADD AL, BH ;将BH的内容加到AL的内容中
INC CX ;将CX的内容加1
ROL AH,1 ;将AH中的内容循环左移一位
2) 寄存器寻址(续)
16位的操作数通常用8个16位通用寄存器
(段寄存器仅用在部分传送指令中),因通用寄存
器是处理器的一部分,因此寄存器寻址方式可以
提高工作效率。其中AX称为累加器,若操作数存
放在AX中的话,通常指令执行时间要短些。
 8位的操作数必须用AH、AL、BH、BL、CH、CL、DH
、DL等8个8位寄存器。
3)存储器寻址方式
• 操作数在主存储器中,用主存地址表示
• 程序设计时,8086采用逻辑地址表示主存地址
– 段地址在默认的或用段超越前缀指定的段寄存器中
– 指令中只需给出操作数的偏移地址(有效地址EA)
• 8086设计了多种存储器寻址方式
1、直接寻址方式
2、寄存器间接寻址方式
3、寄存器相对寻址方式
4、基址变址寻址方式
5、相对基址变址寻址方式
8086的存储器
• 存储器是计算机存储信息的地方。
掌握数据存储格式,以及存储器的分段
管理对以后的汇编程序设计非常重要。
你能区别寄存器、存储器(主存)? 答案
区别寄存器、存储器(主存)
答案
• 寄存器是微处理器(CPU)内部暂存数据
的存储单元,以名称表示,例如:AX,
BX..….等
• 存储器也就是平时所说的主存,也叫内存
,可直接与CPU进行数据交换。主存利用
地址区别。指令中用‘[
]’表示。方括
号内为内存单元地址。
存储单元及其存储内容
• 每个存储单元都有一个编号;
被称为存储器地址,指令中用‘[
]’表
示。方括号内为内存单元地址。
• 每个存储单元存放一个字节的内容
例:
 存 储 器 地 址 为 1 2 0 0 H单元存放有一个数据
34H
 表达为 [1200H]=34H
存储器中的数据存放
• 多字节数据在存储器中占连续的
多个存储单元:
– 存放时,低字节存入
低地址,高字节存入高地址;
– 表达时用它的低地址表示
多字节数据占据的地址空间。
 0002H号“字节”单元的内容:
[0002H] = 34H
 0002H号“双字”单元的内容:
[0002H] = 1234H
 0002H号“双字”单元的内容:
[0002H] = 78561234H
有效地址
D7
D0
0006H
78H
0005H
56H
0004H
12H
0003H
34H
0002H
0001H
0000H
存储器中的数据存放(续)
• 同一个存储器地址可以是字节单元地址、
字单元地址、双字单元地址等等。
(视具体情况来确定)
• 字单元安排在偶地址(xxx0B)、双字单元安排在
模4地址(xx00B)等,被称为“地址对齐(Align)”
存储器的分段管理
• 8086CPU有20条地址线
– 最大可寻址空间为220=1MB
– 每个存储单元具有一个唯一的20位编号,
即物理地址
– 物理地址范围从00000H~FFFFFH
• 8086CPU将1MB空间分成许多逻辑段(Segment)
– 每个段最大限制为64KB
– 段地址的低4位为0000B
• 每个存储单元还具有多个逻辑地址
形式为 段基地址 : 段内偏移地址
物理地址、逻辑地址、有效地址(偏移地址)
• 段地址说明逻辑段在主存中的起始位置,
用16位段寄存器表达段地址
• 偏移地址说明主存单元距离段起始位置的
偏移量,偏移地址可以用16位寄存器或16
位数据表示
• 将逻辑地址中的段地址左移4位,加上偏移
地址就得到20位物理地址
• 一个物理地址可以有多个逻辑地址
例如
逻辑地址 2350H:100H 和 1200H:0FA0H
段地址左移4位
23500H
12000H
加上偏移地址
+ 100H
+ FA0H
得到物理地址
23600H
12FA0H
物理地址 23600H 和 12FA0H
3)存储器寻址——直接寻址
数据在存储器中,有效地址由指令直接给出
——直接寻址。
比如:
操作 码
;将DS段的1070H和1071H
00H
两单元的内容取到AX中
10H
MOV AX,[1070H]
AX
AH
AL
12H
34H
默认段地址为DS段
1070H
34H
1071H
12H
代
码
段
数
据
段
3)存储器寻址——寄存器间接寻址
寄存器间接寻址可分为四种:
(1) 以BX寄存器进行间接寻址—数据段基址寻址
MOV AX,[BX]
ES:MOV CX,[BX]
(2) 以BP寄存器进行间接寻址—堆栈段基址寻址
MOV BX,[BP]
(3) 以SI寄存器进行间接寻址——变址寻址
MOV BX,[SI]
(4) 以DI寄存器进行间接寻址——变址寻址
MOV BX,[DI]
3)存储器寻址——寄存器间接寻址(续)
操作数在某个存储单元中,其偏移地址
在指令给出的方括号中的寄存器中,即寄存器的
内容为操作数的偏移地址。
所使用的段寄存器由指令中的间址寄存器确定。
1.若用BX、SI、DI寄存器间址,则操作数在当前
数据段中,即段地址在DS中。
2.若用BP间址,则操作数在堆栈段SS中。
3.只有上述4个寄存器可以用于间接寻址。
间接寻址的优点:只要对间址用的寄存器作适当
修改,一条指令就可以对许多不同的存储单元进
行访问。循环程序设计中,多用间接寻址。
3)存储器寻址——寄存器相对寻址
• 4个用于间接寻址的寄存器的内容与一个
位移量相加
如:
[BX]
MOV CL, [BX+10]
[BP]
8位偏移量
EA =
+ 16位偏移量
[SI]
或写成:
[DI]
MOV CL, 10[BX]
MOV CL, [BX]+10
• 操作数在某个存储单元中,其偏移地址是指定的
寄存器的内容与指令中给出的位移量相加之和。
段地址依据使用的寄存器的不同而不同
3)存储器寻址——基址变址寻址
• 操作数在某个存储器单元中,其偏移地址是指令
中指定的基址寄存器和变址寄存器的内容与位移
量3项相加之和。段地址由基址寄存器约定在哪一
个段寄存器中。
• 2个基址寄存器与2个变址寄存器组合有四种:
[BX+SI] 或写成:[BX][SI]
[BX+DI]
[BP+SI]
[BP+DI]
[SI]
[BX]
EA =
+
[DI]
[BP]
8位偏移量
+
16位偏移量
3)存储器寻址——相对基址变址寻址
基址寄存器与变址寄存器组合,再加上
一个位移量
例:
MOV CL, [BX+SI+10]
• 有效地址=BX/BP+SI/DI+8/16位位移量
• 段地址对应BX基址寄存器默认是DS,对应BP基
址寄存器默认是SS;可用段超越前缀改变
例:
设 BX=0158H, DI=10A5H, 位移量=1B57H,
DS=2100H,
求下列寻址方式下的有效地址和物理地址:
① 直接寻址
② 寄存器间接寻址(寄存器为BX)
③ BX寄存器相对间接寻址
④ 变址寻址(寄存器为DI)
⑤ DI寄存器相对变址寻址
⑥ 基址加变址的寻址
⑦ 相对的基址加变址的寻址(BX为基址寄存器,DI
为变址寄存器)
答案
① 直接寻址:
有效地址=1B57H
物理地址=21000H+1B57H=22B57H
② 寄存器间接寻址(寄存器为BX):
有效地址=0158H
物理地址=21000H+0158H=21158H
③ BX寄存器相对间接寻址:
有效地址=0158H+1B57H=1CAFH
物理地址=21000H+1CAFH=22CAFH
答案
④ 变址寻址(寄存器为DI):
有效地址=10A5H
物理地址=21000H+10A5H=220A5H
⑤ DI寄存器相对变址寻址:
有效地址=10A5H+1B57H=2BFCH
物理地址=21000H+2BFCH=23BFCH
⑥ 基址加变址的寻址(BX为基址寄存器,DI为变址
寄存器):
有效地址=0158H+10A5H=11FDH
物理地址=21000H+11FDH=221FDH
答案
⑦ 相对的基址加变址的寻址(BX为基址寄存
器,DI为变址寄存器):
有效地址
= 0158H+10A5H+1B57H=2D54H
物理地址=21000H+2D54H=23D54H
寻址方式演示
寻址方式演示
寻址方式演示
寻址方式演示
寻址方式演示
寻址方式演示
寻址方式演示
总结:
• 方括号“[ ]”运算符
• a. 方括号的内容表示存储器操作数的偏移地址;
• b. 有多对方括号顺序排列时,操作数的偏移地址等于各方
括号
• 内容之和;
• c. 一个常量后面跟有方括号时,偏移地址等于该常量与方
括号
• 内容之和;
• d.一个变量后面跟有方括号时,偏移地址等于该变量的偏
移地址
• 与方括号内容之和。
总结:
• 带方括号的地址表达式遵循的规则:
a.寄存器中只有BX、BP、SI、DI可在方括号中出现;
b.不允许BX、BP同时出现在同一个地址表达式中;
c.不允许SI、DI同时出现在同一个地址表达式中;
d.当多个寄存器出现在方括号中时,只能作加运算;
e. 当方括号中包含BP,则隐含使用SS提供段地址,
否则均隐含使用DS提供段地址。