寻址方式
寻址方式
就是寻找操作数或操作数地址的
方式
。
8086提供了
与操作数有关
和
与I/O端口
地址有关的两类寻址方式。
与I/0端口有关的寻址方式有直接端口寻址和间接端口寻址方式。另外还有隐含寻址,即把要寻找的地址包含在操作码中。
立即数寻址方式
操作数直接存放在指令中,紧跟在操作码之后的寻址方式就是立即数寻址方式,这种寻址方式的操作码后面的字节内容就是操作数本身,不需要在其他地址单元去取。 例如: MOV AX,2345H MOV AL,0EH寄存器寻址
指令所要的操作数已存储在某寄存器中,或把目标操作数存入寄存器。把在指令中指出所使用寄存器(即:寄存器的助忆符)的 寻址方式 称为寄存器寻址方式。 例如: MOV AX,BX ADD AX,BX
存储器寻址方式
8086
指令系统
提供了以下5种针对存储器的寻址方式。
直接寻址、寄存器间接寻址、
寄存器相对寻址
、基址加变址寻址和相对基址加变址寻址。用于说明操作数所在
存储单元
的地址。由于总线接口单元BIU能根据需要自动引用
段寄存器
得到段值,所以这五种方式也就是确定存放操作数的存储单元有效地址EA的方法。有效地址EA是一个16位的无符号数,在利用这五种方法计算有效地址时,所得的结果认为是一个无符号数。
(1).直接寻址:
指令中给出的地址码即为操作数的有效地址,就是
直接寻址方式
。
例子: MOV AX,[2000H] -->2000H为存放操作数单元号的符号地址
MOV AX,2000H -->2000H为源操作数,立即数
上面两者是不等效的
(2).寄存器间接寻址方式:
操作数在存储器中,操作数的有效地址用SI,DI,BX和BP 四个寄存器之一来指定 例子: MOV AX,[BX] 计算公式: 物理地址=16d*(DS)+(BX) 物理地址=16d*(DS)+(SI) 物理地址=16d*(DS)+(DI) 物理地址=16d*(SS)+(BP)(3).寄存器相对寻址方式:
你就想成:你要找的"门户号(家)"其实就在你家的楼上或者楼下,你要找到它,就 必须知道它在你楼上几楼,或者在楼下几楼!就OK了! 例子: MOV AX,COUNT[SI] MOV AX,[COUNT+SI] 其中 COUNT为位移量的符号地址 计算公式: 物理地址=16d*(DS)+(BX)+8位位移量 物理地址=16d*(DS)+(BX)+16位位移量 物理地址=16d*(DS)+(BX)+16位位移量 物理地址=16d*(SS)+(BP)+8位偏移量(4).基址变址寻址方式:
你就想成:你要找的"门户号(家)"是跟住在同一栋楼的不同"单元号",你要找到它,就必须知道它是该栋的哪个"单元号",并且住在几楼!那样你就可以找到它了 ! 例子: MOV AX,[BX][DI] MOV AX,[BX+DI] 计算公式: 物理地址=16d*(DS)+(BX)+(SI) 物理地址=16d*(DS)+(BX)+(DI) 物理地址=16d*(SS)+(BP)+(SI) 物理地址=16d*(SS)+(BP)+(DI)(5).相对基址变址寻址方式:
你就想成:你要找的"门户号(家)"是跟住在同一栋楼的不同"单元号",它比你高几层楼或者低几层楼,然后用的你目前的楼数+/-就可以得出你要找的住在几楼了! 例子: MOV AX,MASK[BX][SI] MOV AX,MASK[BX+SI] MOV AX,[MASK+BX+SI] 以上三个例子是等效的!! 计算公式: 物理地址=16d*(DS)+(BX)+(SI)+8位位移量 物理地址=16d*(DS)+(BX)+(DI)+16位位移量 物理地址=16d*(SS)+(BP)+(SI)+8位位移量 物理地址=16d*(SS)+(BP)+(DI)+16位位移量 上述共计七种操作数寻址方式,与 80C51单片机 的完全一致。
与I/0端口有关的寻址方式
8086微处理器采用独立编址的I/0端口,有专门的输入指令IN和输出指令OUT,寻址方式有以下两种。
直接端口寻址
直接端口寻址是在指令中直接给出要访问的端口地址,一般采用2位十六进制数表示,也可以是符号,访问的端口范围0~255. 例如: IN AL,20H 表示从I/0端口地址为20H的端口中取数据送入AL寄存器中。间接端口寻址
若访问的端口地址大于255时,就要用间接寻址方式。可以访问的端口范围0~65535. 例如: MOV DX,356H ;将端口地址356H送入DX寄存器 OUT DX,AL ;将AL中的内容输出到DX指定的端口
隐含寻址
不是明显的给出操作数地址,而是在指令中隐含着操作数的地址, 即要寻找的地址包含在操作码中。例如在单地址指令格式中,就是不明显的给出第二操作数的地址,而是以隐含的方式规定累加器作为第二操作数的地址。
如DAA ;指令的操作对象为AL,结果也存于AL中。
-
扩展阅读
-
- 1
基址寻址:在基址寻址中,有效地址由两部分组成。一部分在基址寄存器中,另一部分为常量 。
- 2
① 基址寻址的地址表达式:
- 3
段寄存器:[基址寄存器+位移量]
- 4
或 段寄存器: 位移量[基址寄存器]
- 5
物理地址=段寄存器内容×16+基址寄存器+位移量
- 6
② 访问约定的逻辑段,简化的地址表达式:
- 7
[基址寄存器+位移量]
- 8
物理地址=约定的段寄存器内容×16+基址寄存器+位移量
- 9
变址寻址:
- 10
① 有比例因子的变址寻址其地址表达式为
- 11
段寄存器:[比例因子*变址寄存器+位移量]
- 12
或 段寄存器: 位移量[比例因子*变址寄存器]
- 13
② 物理地址=段寄存器×16+比例因子×变址寄存器+位移量
- 14
没有比例因子的变址寻址其地址表达式为:
- 15
段寄存器:[变址寄存器+位移量]
- 16
访问约定的逻辑段可简化为 :
- 17
[变址寄存器+位移量]
- 18
物理地址=约定的段寄存器×16+变址寄存器+位移量
- 1