| |
我要投稿 | 资讯 | 机械 | 电气 | 设计 | |
| 机电专业技术网>电子电气>单片机>单片机基础讲解 | |
单片机基础讲解指令的寻址方式
指令的操作对象大多是各类数据,而数据在寄存器、存储器中可以用多种方式存取。指令执行过程中寻找操作数的方式,称为指令的寻址方式。
为了弄清楚什么是寻址方式,从以下的指令着手进行研究。
MOV P1,#0FFH
MOV R7,#0FFH
这些指令都是将一些数据送到相应的位置中去,分析MOV P1,#0FFH这条指令可以看到,MOV 是命令动词,决定做什么事情。这条指令的用途是数据的传递。数据传递必须要有一个源――要送什么数,还要有一个目的――要把这个数送到什么地方去。在上述指令中,要送的数是0FFH,而要送达的地方(目的地)是P1这个寄存器。在数据传递类指令中,一般都将目的地写在紧跟择令的后面,而将源操作数写在最后。
一、立即寻址
在这种寻址方式中,指令中的操作数给出的是参与运算或传送的数据本身,所以又称为立即数,因此就把这种寻址方式称为立即寻址。
例如:MOV A,#30
![]() 就是一条立即寻址方式的指令,它的功能是把数据30传送到累加器A。
二、直接寻址
在这种寻址方式中,操作数直接给出的是参与运算或传送的数据所在的地址,即该地址单元的内容是操作的对象。
例如:MOV A,30H
![]() 指令中的30H操作数就是直接寻址方式,它的功能是把RAM中的30H单元的内容传送到累加器A中 。
三、寄存器寻址
寄存器寻址是指操作数存放于寄存器中,对寄存器中的数据进行操作,寄存器包括通用寄存器R0~R7、累加器A,寄存器B,地址指针DPTR和进位标志位CY。
工作寄存器的选择有程序状态字寄存器中的RS0、RS1决定。
例如:MOV A,R1
![]() 指令中的操作数在R1中,因此在指令中指定了R1,就能从中取得操作数,其功能是把寄存器R1的内容传送到累加器A中。
四、寄存器间接寻址
寄存器间接寻址方式的寄存器中存放的是操作数的地址,即操作数是通过寄存器间接得到的,因此称之为寄存器间接寻址。
在这种寻址方式中,寄存器名称前面加前缀标志@.可作为间接寻址用的通用工作寄存器有R0和R1、堆盏指针寄存器SP、地址指针寄存器DPTR。
假定R0寄存器的内容是30H,则指令的功能是以R0寄存器内容30H为地址,把30H地址单元中的内容送到累加器A.
例如:MOV A,@R0
![]() 五、变址寻址
这种寻址方式是以DPTR或PC为基地址寄存器,以累加器A为变址寄存器,两者内容相加形成操作数所在的单元地址。
例如:MOVC A,@A+DPTR
其功能是把DPTR和A中的内容相加,其和为操作数所在的地址,把该地址单元的内容传送到A.假设A中原有内容为34H,DPTR的内容为1200H,则该指令源操作数的地址为1200H+34H=1234H.又设ROM的1234H单元的内容为0AH,则指令执行的结果累加器A的值改变为0AH.
![]() 六、位寻址
MCS—51系列单片机具有位处理功能,可以对数据位进行操作,因此就有了位寻址方式。即对一位二进制进行操作时,可以在指令中直接给出位地址,这种寻址方式称为位寻址。例如:SETB 20H
指令的功能是将位地址20H置1的操作。可以进行位寻址的地址空间有片内RAM中的位寻址区(20H~2FH单元)和可以位寻址的特殊功能寄存器。
七、相对寻址
相对寻址以程序计数器PC的当前值作为基地址。与指令中给定的相对偏移量REL进行相加,把所得之和作为程序的转移地址。
例如:JZ 30H
当A=0时,PC←PC+2+REL,若A≠0,则PC←PC+2。
指令格式中符号意义说明
● Rn 当前选中的工作寄存器组R0~R7(n=0~7)。它在片内数据存储器中的地址由PSW中的RS1和RS0确定,可以是00H~07H(第0组)、08~0FH(第1组)等。
● Ri 当前选中的工作寄存器组中可作为地址指针的两个工作寄存器R0和R1(i=0或1)
● #data 8位立即数,即包括在指令中的8位常数。
● #data 16位立即数,即包括在指令中的16位常数。
● direct 8位片内RAM单元(包括SFR)的直接地址。
● bit 片内RAM或特殊功能寄存器的直接寻址位地址。
● @ 间接寻址方式中,表示间接寄存器的符号。
● / 位操作指令中,表示对该位先取反再参与操作,但不影响该位的原值。
● → 指令操作流程,将箭头左边的内容送入箭头右边的单元格内。
MCS—51系列单片机指令系统中的各类寻址方式对应不同的存储空间,寻址方式不太容易接受,大家在学习时慢慢体会寻址方式的应用,掌握了寻址方式有助于理解指令的功能,也就是学习单片机的关键点。
|