一、寄存器间接寻址的范围
寄存器间接寻址是将指定的寄存器内容为地址,由该地址所指定的单元内容作为操作数。
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]为寄存器间接寻址方式。
本站仅提供信息发布平台,文章仅代表作者个人观点。