寄存器间接寻址的范围是多少

作者:老电工时间:2015-11-12 05:43:55

一、寄存器间接寻址的范围

寄存器间接寻址是将指定的寄存器内容为地址,由该地址所指定的单元内容作为操作数。
 
MCS-51规定R2或R1为间接寻址寄存器,它可寻址内部RAM低位地址的128个字节单元内容。
 
还可采用数据指针(DPTR)作为间接寻址寄存器,寻址外部数据存储器的64K字节空间,但不能用本寻址方法寻址特殊功能寄存器。

例如,设将内部RAM的65H单元内容(47H)送A,可执行指令:MOV A,@R0,其中R0内容为65H。

指令的执行过程:
当程序执行到本指令时,就以指令中所指定的工作寄存器R0的内容(65H)为指针,将内部数据存储器65H单元的内容(47H)送累加器A。

二、寄存器间接寻址

问题:
MOV AX,[BX]
如果DS=2000H,BX=1000H
则物理地址=20000H+1000H=21000H
寄存器间接寻址,BX不因该存放的是操作数的地址么,应该加上1000H地址存放的操作数啊..为什么直接拿1000H作为操作数了...??

解答:

物理地址=20000H+1000H=21000H。
寄存器间接寻址,BX存放的是操作数的偏移地址。
上面计算出来的物理地址,就是操作数所在的具体地址。
上面的计算,是拿1000H当做地址,并没有拿1000H作为操作数。

三、寄存器直接寻址和间接寻址的区别

寄存器(直接)寻址:指令中指出暂存操作数的寄存器。寄存器的内容就是操作数。如:AX里放1,BX里放2,ADD AX,BX结果为AX=3。

寄存器间接寻址,指令中指明存放操作数偏移地址的寄存器。即操作数放在内存空间的某个地方,这个地方的地址由段地址和寄存器所指出的偏移量进行计算得出。

段地址按照一定的约定给出。若指令中指出的是BX,SI或DI寄存器(未定义附加段)时,说明操作数在数据段中,先用DS的值与寄存器的内容合成物理地址;若指令中指出BP,说明操作数在堆栈段,选用SS的值与寄存器的内容合成物理地址;若定义了附加段,且指令中指出了DI寄存器,那么选用ES与DI合成物理地址;若在指令中有超越段前缀,则选用指令中指出的段寄存器值与寄存器的内容合成物理地址。如:MOV AX,[BX]操作数[BX]为寄存器间接寻址方式。

本站仅提供信息发布平台,文章仅代表作者个人观点。

猜你喜欢

首页 > plc > 三菱plc