原创 单片机学习笔记---关于变址寻址得问题

2007-7-20 23:49 4154 7 6 分类: MCU/ 嵌入式

                变址寻址是一种基址寄存器+偏移量的间接寻址方式.它以16位的寄存器dptr或pc为基址寄存器,累加器a做为地址偏移量,来形成操作数所在的存储单元的地址,几把基址和偏移量相加,得到的结果做为操作数的地址


           1 以pc的当前值为基址(指本条指令的首地址),单字节指令,执行时,先始pc+1指向下一条指令的地址,然后在与累加器a的内容相加,形成变址寻址的地址


              movc  a,   @a+pc         ;    (pc)<----(pc)+1 ,   (a)<----((a)+(pc)


            2 以dptr为基址寄存器,将dptr的内容与累加器a的内容相加得到变址地址


              movc  a,   @a+dptr      ;    (a)<-----((a)+(dptr))


             编写简单验证程序;


             org       0000h


             ljmp     main


             org       0030h


main:      mov     a,   #02h                 ;  将偏移量02h送入累加器a


              movc   a,   @a+pc             ;   将当前pc值与偏移量相加得到变址地址,将其内容送到a


             此条指令的首地址为0032h,执行时现将pc+1,变成0033h,再和偏移量02H相加,结果为35h


            将0035h单元的内容送入a中


点击看大图


              mov    dptr, #0041h           ;    设定基地址,将0040h送如dptr


              此条指令在程序存储器中所处的位置如下


                       0033h       dptr


                       0034h        00h


                       0035h        41h           ;此处即为上条指令执行后所指向的地址,所以执行后a中的内容为41h 


             


                        dabb0031-4ca1-4e66-bba7-2786f6a304d6.JPG


             movc   a,  @a+dptr            ;     将a中的内容与dptr中的内容相加,其和的地址的内容送a


                         点击看大图


               org     0080h                    ;伪指令,下面的内容从0080h单元开始存放


               db  73h,60h,90h               ;0082h单元的内容为90h


              end


1     变址寻址方式专用于程序存储器的访问,不能访问数据存储器


2      使用变址寻址时,应先为a,和dptr赋值,以便确定地址,以pc为基址时只需要给a赋值即可

文章评论0条评论)

登录后参与讨论
我要评论
0
7
关闭 站长推荐上一条 /2 下一条