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

如题所述

一、方式不同

1、直接寻址:在指令格式的地址的字段中直接指出操作数在内存的地址。

2、间接寻址:指令地址字段的形式地址D不是操作数的真正地址,而是操作数地址的指示器,或者说是D单元的内容才是操作数的有效地址。

二、特点不同

1、直接寻址:操作数的地址直接给出而不需要经过某种变换,在指令中直接给出参与运算的操作数及运算结果所存放的主存地址,即在指令中直接给出有效地址。

2、间接寻址:需要以寄存器符号的形式来表示,且在寄存器名称前面加上间接寻址符号“@”。


三、原理不同

1、直接寻址:操作数存放在数据段中,所以,其物理地址将由数据段寄存器DS和指令中给出的有效地址直接形成,但如果使用段超越前缀,那么,操作数可存放在其它段。

2、间接寻址:在直接寻址的基础上面建立起来的,也就是直接寻址得到的数据是一个地址,通过这个地址找到最终的数据,也就是两次寻址,第一次得到的是地址,第二次才是目标数据。


参考资料来源:百度百科-间接寻址

参考资料来源:百度百科-直接寻址

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-06-09

寄存器直接寻址和间接寻址区别:

一、存放操作数的地址不同

寄存器直接寻址指令直接包含有操作数的有效地址(偏移地址),即直接给出操作数地址。而寄存器间接寻址指令以寄存器中的内容为地址,该地址的内容为操作数,即寄存器间接寻址方式中,寄存器内存放的是操作数的地址,而不是操作数本身。

二、寄存器对象不同

寄存器直接寻址对象为内部数据寄存器和特殊功能寄存器SFR。而寄存器间接寻址对象为R0、R1、DPTR,用前面加@表示,如@R0、@R1、@DPTR。

扩展资料:

直接寻址方式:

在指令格式的地址字段中直接指出操作数在内存的地址ID 。在通常情况下,操作数存放在数据段中,所以,其物理地址将由数据段寄存器DS和指令中给出的有效地址直接形成,但如果使用段超越前缀,那么,操作数可存放在其它段。

直接寻址方式常用于处理内存单元的数据,其操作数是内存变量的值。指令中直接给出操作数地址的寻址方式称为直接寻址。

寻址对象为:

1、内部数据存储器,在指令中以直接地址表示;

2、特殊功能寄存器SFR,在指令中用寄存器名称表示。

寄存器间接寻址方式:

以寄存器中的内容为地址,该地址的内容为操作数的寻址方式称为寄存器间接寻址。能够进行寄存器间接寻址的寄存器有:R0、R1、DPTR,用前面加@表示,如@R0、@R1、@DPTR。

寄存器间接寻址的存储空间包括内部数据存储器和外部数据存储器。由于内部数据存储器共有128字节,因此用一字节的R0和R1可间接寻址整个空间。

而外部数据存储器最大可达64K,仅R0或R1无法寻址整个空间,为此需要由P2端口提供外部RAM高8位地址,由R0或R1提供低8位地址,由此共同寻址64K字节范围。也可用16位的DPTR寄存器间接寻址64K字节存储空间。

参考资料来源:寄存器直接寻址-百度百科

寄存器间接寻址-百度百科

本回答被网友采纳
第2个回答  推荐于2018-02-24
寄存器(直接)寻址:指令中指出暂存操作数的寄存器。寄存器的内容就是操作数。如:AX里放1,BX里放2,ADD AX,BX结果为AX=3。寄存器间接寻址,指令中指明存放操作数偏移地址的寄存器。即操作数放在内存空间的某个地方,这个地方的地址由段地址和寄存器所指出的偏移量进行计算得出。段地址按照一定的约定给出。若指令中指出的是BX,SI或DI寄存器(未定义附加段)时,说明操作数在数据段中,先用DS的值与寄存器的内容合成物理地址;若指令中指出BP,说明操作数在堆栈段,选用SS的值与寄存器的内容合成物理地址;若定义了附加段,且指令中指出了DI寄存器,那么选用ES与DI合成物理地址;若在指令中有超越段前缀,则选用指令中指出的段寄存器值与寄存器的内容合成物理地址。如:MOV AX,[BX]操作数[BX]为寄存器间接寻址方式。本回答被提问者和网友采纳
第3个回答  2018-02-24
寄存器寻址方式:
操作数在CPU内部的寄存器中,指令指定寄存器号。对于16位操作数,寄存器可以是:AX、BX、CX、DX、SI、DI、SP和BP等。对于8位操作数,寄存器可以是AL、AH、BL、BH、CL、CH、DL、DH。这种寻址方式由于操作数就在寄存器中,不需要访问存储器来取得操作数。因而可以取得较高的运算数度。

直接寻址方式:

操作数在寄存器中,指令直接包含有操作数的有效地址(偏移地址)。注:操作数一般存放在数据段。所以操作数的地址由DS加上指令中直接给出的16位偏移得到。如果采用段超越前缀,则操作数也可含在数据段外的其他段中。
相似回答