医疗电子技术网|技术阅读
登录|注册

您现在的位置是:医疗电子技术网 > 技术阅读 > 单片机的几种寻址方式

单片机的几种寻址方式

文章转自:http://blog.csdn.net/kezhongke/article/details/21517975

作者:Kezhongke

寻址就是寻找指令中操作数或操作数所在的地址。所谓寻址方式,就是如何找到存放操作数的地址,把操作数提取出来的方法。通常指源操作数的寻址方式。


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)     →              指令操作流程,将箭头左边的内容送入箭头右边的单元。   

本文转自网络,版权归原作者,如果您觉得不好,请留言联系我们删除!

广告

关于立创商城

立创商城(WWW.SZLCSC.COM)成立于2011年,致力于为客户提供一站式电子元器件线上采购服务,成交量全国领先。自建9200多平米现代化元器件仓库,现货库存超50000种,集团电子全产业链自营服务涵盖:在线EDA(LCEDA)+行业领先的PCB打样/中小批量+元器件商城+钢网制造+SMT贴片+电子设计教育及方案。作为一家品种齐全、自营库存、质量有保障的电子元器件垂直商城,立创商城所有元器件均从原厂或代理商正规渠道采购,保证原装正品,为您提供专业的一站式电子元器件采购服务。