单片机的寻址方式定义、分类及设置方式

电子常识

2583人已加入

描述

  单片机的寻址方式定义

  寻找操作数地址的方式称为寻址方式。

  1. 寄存器寻址

  寄存器寻址是指将操作数存放于寄存器中,寄存器包括工作寄存器R0~R7、累加器A、通用寄存器B、地址寄存器DPTR等。例如,指令MOV R1,A的操作是把累加器A中的数据传送到寄存器R1中,其操作数存放在累加器A中,所以寻址方式为寄存器寻址。

  如果程序状态寄存器PSW的RS1RS0=01(选中第二组工作寄存器,对应地址为08H~0FH),设累加器A的内容为20H,则执行MOV R1,A指令后,内部RAM 09H单元的值就变为20H。

  2. 直接寻址

  直接寻址是指把存放操作数的内存单元的地址直接写在指令中。在MCS-51单片机中,可以直接寻址的存储器主要有内部RAM区和特殊功能寄存器SFR区。

  例如,指令MOV A,3AH执行的操作是将内部RAM 中地址为3AH的单元内容传送到累加器A中,其操作数3AH就是存放数据的单元地址,因此该指令是直接寻址。

  3. 立即数寻址

  立即数寻址是指将操作数直接写在指令中。

  例如,指令MOV A,#3AH执行的操作是将立即数3AH送到累加器A中,该指令就是立即数寻址。

  4. 寄存器间接寻址

  寄存器间接寻址是指将存放操作数的内存单元的地址放在寄存器中,指令中只给出该寄存器。执行指令时,首先根据寄存器的内容,找到所需要的操作数地址,再由该地址找到操作数并完成相应操作。

  在MCS-51指令系统中,用于寄存器间接寻址的寄存器有R0、R1和DPTR,称为寄存器间接寻址寄存器。

  设R0=3AH,内部RAM 3AH中的值是65H,则指令MOV A,@R0的执行结果是累加器A的值为65H。

  单片机的寻址方式分类

  MCS-51系列单片机寻址方式共有七种:寄存器寻址、直接寻址、立即数寻址、寄存器间接寻址、变址寻址、相对寻址、位寻址。

  1、寄存器寻址

  寄存器寻址是指操作数存放在某一寄存器中,指令中给出寄存器名,就能得到操作数。寄存器可以使用寄存器组R0~R7中某一个或其它寄存器(A,B,DPTR等)。

  例如:

  MOV A,R0 ;(R0 )→A

  MOV P1,A ;(A)→P1

  ADD A, R0 ;(A)+(R0) →A

  

  2、直接寻址

  在指令中直接给出操作数所在的存储单元的地址,称为直接寻址方式。在8051中,使用直接寻址方式可访问片内RAM的128个单元以及所有的特殊功能寄存器(SFR),对于特殊功能寄存器,既可以使用他们的地址,也可以使用他们的名字。

  例如:

  MOV A, 3AH ;(3AH) →A

  又如:

  MOV A, P1 ;(P1口) →A

  也可写为:

  MOV A, 90H ; 90H是P1口的地址。

  

  单片机

  3、立即数寻址

  指令操作码后面紧跟的是一字节或两字节操作数,用 # 号表示,以区别直接地址。例如:

  MOV A, #3AH ;3AH→A

  MCS-51系列单片机有一条指令,要求操作码后面紧跟的是两个字节立即数,即

  MOV DPTR, #DATA16

  4、寄存器间接寻址

  寄存器中的内容是一个地址,由该地址单元寻址到所需的操作数。

  例如: MOV R1,#30H ;(R1)← 立即数30H

  MOV @R1,#0FH ;(30H)←立即数0FH

  MOV A,@R1 ;(A)←((30H))=#0FH

  注意:

  “间接”表示某寄存器中的“内容”只是一个“单元地址”,这个地址单元中存放的数据才是要找的“操作数”。

  单片机

  例如,指令MOV A,@R0执行的操作是将R0的内容作为内部RAM的地址,再将该地址单元中的内容取出来送到累加器A中,如图所示。

  5、变址寻址 ,也称为: 基址寄存器+变址寄存器间接寻址

  以16位的地址指针寄存器DPTR或 16位的PC寄存器为基址寄存器,以累加器 A 为变址寄存器,两者中的“内容”形成一个16位的“地址”,该“地址”所指的存储单元中的内容才是操作数。用变址寻址方式只能访问程序存储器,访问的范围为64KB,当然,这种访问只能从ROM中读取数据而不能写入。

  例如: MOVC A, @A+DPTR ;((A)+ (DPTR))→A

  设:A中已存有#30H,DPTR中已存有#1000H

  MOVC A,@A+DPTR;(A)←((A)+(DPTR))

  操作:将30H+1000H=1030H单元中的数放进累加器A

  单片机

  6、相对寻址

  相对寻址只出现在相对转移指令中。相对转移指令执行时,是以当前的PC值加上指令中规定的偏移量rel而形成实际的转移地址。这里所说得PC的当前值是执行完相对转移指令后的PC值,一般将相对转移指令操作码所在的地址称为源地址,转移后的地址称为目的地址。于是有:目的地址=源地址+2(相对转移指令字节数)+rel

  51单片机指令系统中相对转移指令既有双字节的,也有三字节的。

  单片机

  7、位寻址

  采用位寻址方式的指令,操作数是8位二进制数中的某一位。指令中给出的是位地址,是片内RAM某个单元中的某一位的地址。位地址在指令中用bit表示。

  例: CLR P1.0 ;(P1.0) ← 0

  SETB ACC.7 ;(ACC.7)← 1

  CPL C ;( C )← NOT( C )

  位地址常用下列三种方式表示;

  (1)直接使用位地址表示。对于20H~2FH的16个单元共128位,位地址分布是00H~7FH。

  (2)对于特殊功能寄存器,可以直接用寄存器名字加位数表示,如PSW.3、ACC.5等。

  (3)对于定义了位名字的特殊位,可以直接用其位名表示,例如:CY、AC等。

  寻址方式及对应存储器空间

  寻址方式寻址空间

  立即数寻址程序存储器ROM、数据存储器RAM

  直接寻址片内RAM低128B,特殊功能寄存器

  寄存器寻址通用寄存器R0---R7,其他寄存器A、B、DPTR

  寄存器间接寻址片内RAM低128B【@R0、@R1、SP(仅PUSH、POP)】

  片外RAM(@R0、@R1、@DPTR)

  变址寻址程序存储器、数据存储器、(@A+PC、@A+DPTR)

  相对寻址程序存储器256B(PC+偏移量)

  位寻址片内RAM的20H---2FH字节地址、部分特殊功能寄存器

  寻址方式中常用符号注释

  (1) Rn(n=0~7) 当前选中的工作寄存器R0~R7 。

  (2) Ri(i=0,1) 当前选中的工作寄存器组中,可作为间址寄存器

  的两个工作寄存器R0、R1。

  (3) #data 8位立即数。

  (4) # data16 16位立即数。

  (5) direct 8位片内RAM单元(包括SFR)的直接地址。

  (6) addr11 11位目的地址,用于ACALL和AJMP指令中。

  (7) addr16 16位目的地址,用于LCALL和LJMP指令中。

  (8) rel 补码形成的8位地址偏移量。

  (9) bit 片内直接寻址位地址。

  (10)@ 间接寻址方式中,表示间址寄存器的符号。

  (11)/ 位操作指令中,表示对该位先取反再参与操作,但

  不影响该位原值。

  (12)(X) 表示X中的内容。

  (13)((X)) 由X指出的地址单元中的内容。

  (14) → 指令操作流程,将箭头左边的内容送入箭头右边的单元。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分