寻址方式
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
寻址方式就是寻找操作数或操作数地址的方式。8086提供了与操作数有关和与I/O端口地址有关的两类寻址方式。与操作数有关的寻址方式有七种,分别是立即寻址,寄存器寻址,直接寻址,寄存器间接寻址,寄存器相对寻址,基址加变址寻址,相对基址加变址寻址;与I/0端口有关的寻址方式有直接端口寻址和间接端口寻址方式。
目录
与操作数有关的寻址方式
与I/0端口有关的寻址方式
展开
编辑本段与操作数有关的寻址方式
立即数寻址方式
操作数直接存放在指令中,紧跟在操作码之后的寻址方式就是立即数寻址方式。
例如:
MOV AX,2345H
MOV AL,0EH
寄存器寻址
操作数存放在CPU的内存寄存器时,可在指令中指出寄存器名,这就是寄存器寻址方式。
例如:
MOV AX,BX
ADD AX,BX
存储器寻址方式
8086指令系统提供了以下5种针对存储器的寻址方式。
直接寻址、寄存器间接寻址、寄存器相对寻址、基址加变址寻址和相对基址加变址寻址。用于说明操作数所在存储单元的地址。由于总线接口单元BIU能根据需要自动引用段寄存器得到段值,所以这五种方式也就是确定存放操作数的存储单元有效地址EA的方法。有效地址EA是一个16位的无符号数,在利用这五种方法计算有效地址时,所得的结果认为是一个无符号数。
(1).直接寻址:
指令中给出的地址码即为操作数的有效地址,就是直接寻址方式。
例子: MOV AX,[2000H] -->2000H为存放操作数单元号的符号地址
MOV AX,2000H -->2000H为源操作数,立即数
上面两者是不等效的
(2).寄存器间接寻址方式:
你就想成:你已经站在你要找的"门户号(家)"的"单元号",你要找到它,必须知道它在当前"单元号"几楼.假如它在6楼,那你就上到6楼就OK了!!注意,最高只有16楼,因为什么呢?那就用DEBUG的D命令看看呀,慢慢数哦,呵呵!!
例子: 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*(SI)+(BX)+16位位移量
物理地址=16d*(DI)+(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指定的端口
立即寻址
mcs-51单片机的一种寻址方式,操作数就写在指令中,和操作码一起放在程序
存贮器中。把“#”号放在立即数前面,以表示该寻址方式为立即寻址,如#20H。
51单片机中的汇编例子:
MOV R1,#02H
MOV @R0,#02H
其含义是将十六进制数02H直接放入目标寄存器中,当然也可以是二进制数或十进制数。
在8086等CPU处理器中可按下面例子。
立即数可以是8位、16位或32位,该数值紧跟在操作码之后。如果立即数为16位或32位,那么,它将按“高高低低”的原则进行存储。例如:
MOV AH, 80H ADD AX, 1234H MOV ECX, 123456H
MOV B1, 12H MOV W1, 3456H ADD D1, 32123456H
其中:B1、W1和D1分别是字节、字和双字单元。
以上指令中的第二操作数都是立即数,在汇编语言中,规定:立即数不能作为指
令中的第二操作数。该规定与高级语言中“赋值语句的左边不能是常量”的规定相一致。
立即数寻址方式通常用于对通用寄存器或内存单元赋初值。
变址寻址(indexed addressing)
是计算机中的一种寻址方式。
在变址寻址操作时,将计算机指令的第二个字节与变址寄存器中的内容相加,得到有效的地址。
该指令为双字节指令。
编辑本段变址寻址方式
在通用寄存器中,有些寄存器可作为变址寄存器。把变址寄存器的内容(通常是首地址)与指令地址码部分给出的地址(通常是位移量)之和作为操作数的地址来获得所需要的操作数就称为变址寻址。
OPCODE
。。。
R
A