寻址方式就是寻找操作数或指令地址的方式。寻址方式包含两方面的内容:一是操作数的寻址,二是指令地址的寻址(如转移指令、调用指令)。寻址方式是计算机性能的具体体现,也是编写汇编语言程序的基础,必须非常熟悉并灵活运用。

对于两操作数指令,源操作数有寻址方式,目的操作数也有寻址方式。若不特别声明,后面提到的寻址方式均指源操作数的寻址方式。

80C51单片机指令系统共有7种寻址方式,包括:立即寻址、寄存器寻址、直接寻址、寄存器间接寻址、变址寻址、相对寻址和位寻址。现以7条指令为例说明这7种寻址方式。

(1)立即寻址:将操作数直接写在指令中。

如指令①: MOV  A,#3AH  执行的操作是将立即数3AH送到累加器A中,因为指令中有立即数3AH,所以称此寻址方式为立即寻址。注意,立即数前面必须加“#”号,以区别立即数和直接寻址。该指令的执行过程如图1所示。

图1 立即数寻址示意图

(2)寄存器寻址:是指将指令操作数存放于寄存器中,寄存器包括工作寄存器R0~R7、累加器A、通用寄存器B、地址寄存器DPTR等。

如指令②: MOV  A,R0    ;(A)←(R0)

该指令将寄存器R0中的数送入累加器A中,因为指令源操作数为寄存器R0,所以称此寻址方式为寄存器寻址。

如果程序状态寄存器PSW的RS1RS0=00(选中第0组工作寄存器,对应地址为(00H~07H),设RAM区00H的内容为20H,则执行MOV A,R0指令后,累加器A中的内容变为20H。该指令执行过程如图2所示。

图2 寄存器寻址示意图

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

如指令③:MOV  A,30H    ;(A)←(30H)

该指令将地址为30H的存储单元的内容送入累加器A,因为指令源操作数为地址直接给出的存储单元,故称此寻址方式为直接寻址。若(30H)=3AH,指令③执行后,(A)=3AH,该指令的执行过程如图3所示。

图3 直接寻址示意图

(4)寄存器间接寻址:将存放操作数的存储单元的地址放在寄存器中,指令中只给出该寄存器。执行指令时,首先根据寄存器的内容,找到所需要的操作数地址,再由该地址找到操作数并完成相应操作。在80C51指令系统中,用于寄存器间接寻址的寄存器有R0、R1和DPTR,称为寄存器间接寻址寄存器。

注意:间接寻址寄存器前面必须加上符号“@”。

如指令④:MOV  A,@R0  ;(A)←((R0))

该指令将以R0中内容为地址的存储单元的内容送入累加器A中,因为指令操作数是存储单元,其地址由寄存器R0间接给出,所以称此寻址方式为寄存器间接寻址。

设R0=3AH,内部RAM 3AH中的值是65H,则指令MOV  A,@R0的执行结果是累加器A的值为65H,该指令的执行过程如图4所示。

图4 寄存器间接寻址示意图

(5)变址寻址 :是指将基址寄存器与变址寄存器的内容相加,结果作为操作数的地址。DPTR或PC是基址寄存器,累加器A是变址寄存器。这种寻址方式称为变址寻址。该寻址方式主要用于查表操作。

当执行指令⑤时,设(A)=50H ,(DPTR)=2007H,(2057H)=60H ,指令⑤执行后MOVC A,@A+DPTR ;(A)←((A)+(DPTR))=(50H+2007H)=(2057H)=60H。

该指令将DPTR中的基地址2007H与A中的偏移地址50H相加,形成实际地址2057H,再将地址为2057H的存储单元中的内容60H送入累加器A中。显然这种寻址方式称为变址寻址。该指令执行过程如图5所示。

图5 变址寻址示意图

(6)相对寻址 :是指程序计数器PC的当前内容与指令中的操作数相加,其结果作为跳转指令的转移地址(也称目的地址)。这种寻址方式称为相对寻址。该类寻址方式主要用于跳转指令。

如指令⑥:SJMP rel    ;(PC)←(PC)+rel

当执行指令⑥时,设当前(PC)=2009H,而相对偏移量rel=02H,则执行该指令后,(PC)=2009H+02H=200BH,即程序由地址为2009H处跳转到200BH处执行,其跳转的距离为相对偏移量rel=02H。由于指令中的操作数为相对偏移量rel ,所以称这种寻址方式为相对寻址。该指令的执行过程如图6所示。

图6 相对寻址示意图

(7)位寻址 :指令中操作数为8位二进制数某一位,称为位寻址。80C51单片机中,操作数不仅可以按字节为单位进行操作,也可以按位进行操作。当我们把某一位作为操作数时,这个操作数的地址称为位地址。

位寻址区包括专门安排在内部RAM中的两个区域:一是内部RAM的位寻址区,地址范围是20H~2FH,共16个RAM单元,位地址为00H~7FH;二是特殊功能寄存器SFR中有11个寄存器可以位寻址。参见位地址的定义。

例如:SETB  ACC.0  ;(ACC.0)←1  该指令将累加器的最低位ACC.0置1,由于指令中的操作数为一位二进数,故称此寻址方式为位寻址。该指令的执行过程如图7所示。

图7 位寻址示意图

由寻址方式的讨论可知,操作数按类型可分为:立即数、寄存器、存储单元、位操作数、相对偏移量。而存储单元地址又可有直接寻址,寄存器间接寻址,变址寻址三种。

各种寻址方式对应操作数的指令符号规定如下。

(1)#data:表示8位立即数,如#3AH。

(2)#data16:表示16位立即数,即0000H~FFFFH。

(2)Rn:表示寄存器R0~R7。

(3)direct:表示片内存储单元的直接地址, 如30H。

(4)addr16,addr11:表示指令中的16位或11位转移地址。

(5)rel:表示相对偏移量,如 02H。

(6)bit:表示位地址,如ACC.0。

(7)(   ):表示存储单元的内容,如(30H)=40H。

(8)((  )):表示间接寻址的存储单元内容,((R0))=(7FH)=50H。

C51汇编语言寻址方式,80C51单片机指令系统的7种寻址方式相关推荐

  1. 单片机位寻址举例_单片机基础及应用 | 04 80C51单片机指令系统

      点击蓝字关注我们 一.单片机指令系统概述 1.指令概述指令:是CPU根据人们的意图来执行某种操作的命令.指令系统:是计算机所能够执行的全部指令的集合.程序:是按人们的要求所编制的指令操作序列.本章 ...

  2. 2毫秒c51汇编语言延时函数,单片机精确毫秒延时函数

    实现延时通常有两种方法:一种是硬件延时,要用到定时器/计数器,这种方法可以提高CPU的工作效率,也能做到精确延时;另一种是软件延时,这种方法主要采用循环体进行. 今天主要介绍软件延时以及单片机精确毫秒 ...

  3. c51汇编语言 步进电机,51单片机驱动步进电机(汇编语言)

    在这里介绍一下用51单片机驱动步进电机的方法. 这款步进电机的驱动电压12V,步进角为 7.5度 . 一圈 360 度 , 需要 48 个脉冲完成!!! 该步进电机有6根引线,排列次序如下:1:红色. ...

  4. jnz和djnz_第3章单片机指令系统_练习

    第3章指令系统 一.简答题 1. AT89C51共有几种寻址方式?举例说明每种寻址方式的特点. 答:寻址即寻找操作数的地址.AT89C51单片机指令系统共有7种寻址方式: (1)立即寻址方式:所谓立即 ...

  5. 七种寻址方式(相对基址加变址寻址方式)

    操作数在存储器中,其有效地址是一个基址寄存器(BX.BP)的值.一个变址寄存器(SI.DI)的值和指令中的8位/16位偏移量之和.其有效地址的计算公式如公式所示.  在不使用段超越前缀的情况下,规定: ...

  6. C51汇编语言寻址方式,单片机学习:51单片机寻址方式详解

    原标题:单片机学习:51单片机寻址方式详解 51单片机是对所有兼容Intel 8031指令系统的单片机的统称.该系列单片机的始祖是Intel 8031单片机,后来随着Flash rom 技术的发展,8 ...

  7. 间接寻址级别不同_单片机指令系统与寻址方式

    单片机要正常运作,事先需编制程序,再把程序放入存贮器中,然后由CPU执行该程序.程序是由指令组成的,指令的基本组成是操作码和操作数.单片机的品种很多,设计时怎样表示操作码和操作数,都有各自的规定,再有 ...

  8. 8051单片机指令系统有哪几种寻址方式?

    8051单片机指令系统有哪几种寻址方式? 寄存器寻址.直接寻址.立即寻址.寄存器间接寻址.变址寻址.相对寻址.位寻址. 寄存器寻址:以通用寄存器的内容为操作数的寻址方式.通用寄存器为A.B .DPT ...

  9. C51单片机——指令系统

    C51单片机--指令系统 图片可点击放大观看 如有错误,请多多包含!   可以的话请留言,好及时修改!

最新文章

  1. PMON failed to acquire latch, see PMON dump
  2. 友盟U-share sdk 分享的接入(支持Android及IOS)
  3. OpenCV-Python bindings是如何生成的(1)
  4. 中文巨量模型“源1.0”的学习优化方法
  5. 为什么要网页模块化?
  6. WebService的网络协议
  7. windows制作docker镜像_优秀软件推荐-微软官方工具升级windows或制作启动U盘及镜像...
  8. WorkStation9完美支持Win8
  9. 在线uml画图工具网站
  10. 常见的贴片LED封装尺寸规格表
  11. 苹果安装app的另一种方式(通过itms-services协议,不通过AppStore,直接安装IOS应用程序)
  12. 如何将PDF英文文档进行翻译?
  13. Source Insight 4.0安装破解及简单使用
  14. amoeba mysql proxy_mysql-proxy和amoeba 分别实现Mariadb读写分离
  15. linux ip rcv,【linux网络】ip_rcv()函数
  16. Unreal Engine 4 系列教程 Part 8:粒子系统教程
  17. node获取系统字体
  18. 《淘宝技术这十年》 读书笔记
  19. 虚拟滚动列表和css虚拟滚动【有思考】
  20. Android Java 虚拟机

热门文章

  1. 海外并购不失为好时机
  2. 并行insert出现library cache lock与cursor: pin S wait on X等待问题记录
  3. android 模拟器输入中文
  4. oracle rman备份spfile,利用RMAN自动备份转储Spfile
  5. OpenStack架构
  6. TCP协议发送SKB时ip_summed成员的设置 http://blog.csdn.net/justlinux2010/article/details/8508455
  7. 用好手机上的一款便捷的便签,快速记录我们的想法
  8. 不可错过的五款开源图形处理软件
  9. Java实训项目一一拼图游戏(附源码)
  10. 度度熊与邪恶大魔王 (百度之星之资格赛)