什么是单片机的间接寻址方式

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

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

在MCS-51单片机中,为了对寄存器寻址和寄存器间接寻址加以区别,在寄存器名称前加一个符号@来表示寄存器间接寻址,如MOV A,@R0。

第一次寻址得到寄存器R0的值,这个值是一个地址,再通过这个地址,第二次寻址得到存储器储据,即把寄存器里的内容看成地址,然后把这个地址里面的内容赋给累加器A。比如,R0寄存器中的内容是3AH,而3AH这个地址里的内容是77H,那么上条指令执行后累加器A的内容变为77H。所谓“间接”,即A通过“3AH”找到77H。

操作数放在RAM某个单元中,该单元的地址又放在寄存器R0或R1中。如果RAM的地址大于256,则该地址存放在16位寄存器DPTR(数据指针)中,此时在寄存器名前加@符号来表示这种间接寻址,如MOVA,@R0,其他还有变址寻址、相对寻址、位寻址等。如用单片机控制温度时,需要实时将给定的控制温度(如20℃)减去环境温度,而环境温度实时变化,显然无法在程序指令中给出,只有通过一定方式,将其送入某个输入/输出口,再存放在某个寄存器中,这就必须用到寄存器寻址。又如要进行算术运算,要计算每班学员各科成绩的平均值,如果把每个学员的各科都编一个程序,在程序中直接给出该学员各科成绩再求平均值,显然太麻烦。这里可以编一个求平均成绩的通用程序,把每位学员的成绩送入存储器的各个单元中,这时可采取直接寻址,所以寻址方式越多,编制程序就越方便、灵活,适用范围就越广。

寄存器的间接寻址需要以寄存器符号的形式来表示,且在寄存器名称前面加上间接寻址符号“@”。例如,指令MOVA,@R0就使用了寄存器间接寻址方式,这条指令的意义为将地址指针R0指向的内部数据存储器单元中的数据送入累加器A中。

假设R0中的内容为30H,则此指令的功能以R0寄存器的内容30H为地址,把内部RAM30H单元中的内容传送给累加器A。

8051规定,采用R0、R1DPTR作为间接寻址寄存器,可寻址片内数据存储器RAM的低128B单元和片外数据存储器的低256B单元。

采用DPTR作间址寄存器,可寻址片外数据存储器的整个64KB地址空间。堆栈指针SP用于指示堆栈操作的地址,因此PUSH和POP指令也是寄存器间接寻址。

版权声明:本篇文章(包括图片)来自网络,由程序自动采集,著作权(版权)归原作者所有,如有侵权联系我们删除,联系方式(QQ:452038415)。http://www.apmygs.com/1630.html
返回顶部