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

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

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。

计算机寻址的最低单元,80c51单片机指令系统的7种寻址方式相关推荐

  1. C51汇编语言寻址方式,80C51单片机指令系统的7种寻址方式

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

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

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

  3. 单片机位寻址举例_基于80C51单片机位寻址编程

    80C51单片机有位处理功能,可以对数据位进行操作,因此就有相应的位寻址方式.所谓位寻址,就是对内部RAM或可位寻址的特殊功能寄存器SFR内的某个位,直接加以置位为1或复位为0. 位寻址的范围,也就是 ...

  4. 计算机组成原理学习笔记第5章指令系统 5.3——操作数寻址方式

    有诗云:苔花如米小,也学牡丹开.--袁枚 本篇笔记整理:Code_流苏(CSDN) Last(在此处点击使用,直达文末) First (在文末点击使用,返回文章首部) 目录 0.思维导图 1.立即数寻 ...

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

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

  6. 80C51单片机期末复习

    80C51有基本型和增强型.区别:增强型多了定时器,内置存储空间不同. 1冯•诺依曼思想计算机由运算器.控制器.存储器.输入设备.输出设备组成这一计算机的经典结构. 2将CPU.存储器.I/O接口集成 ...

  7. pushpop指令的操作数必须是字操作数_MCS-51单片机指令系统(1)

    指令系统概述 指令是计算机用于控制各种功能部件完成的某一特定动作的指示和命令.一台计算机能识别和执行的指令集合即为其指令系统.指令系统是一套控制计算机执行操作的编码,通常称为机器语言.机器语言是计算机 ...

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

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

  9. 80C51单片机指令寻址方式

    单片机指令寻址方式 操作码 操作数 指令寻址方式 寄存器寻址方式 直接寻址方式 寄存器间接寻址 立即寻址方式 变址寻址方式 位寻址方式 相对寻址方式 首先介绍单片机指令系统的操作码和操作数 操作码 1 ...

  10. 80C51单片机复习资料(一)

    什么是单片机?其主要特点? 单片机是把CPU.存储器(ram和rom)/输入.输出接口电路以及定时器.计数器等集成在一起的集成电路芯片. 它具有体积小.价格低.可靠性高和易于嵌入式应用等特点,还具有控 ...

最新文章

  1. 2021年人工智能数据采集标注行业四大趋势预测
  2. 2022年全球及中国软包电池铝塑膜行业规模价值与竞争格局展望报告
  3. Oracle 创建 split 和 splitstr 函数
  4. 前端学习(3002):vue+element今日头条管理--创建组件和设置路由
  5. 13.JAVA基础:八进制,十六进制表示
  6. 06-用两个栈实现队列
  7. python遍历文件_python3 遍历文件夹目录所有文件
  8. Java中可以声明一个类为Static吗?
  9. 2018深度学习十大趋势:元学习成新SGD,多数硬件创企将失败
  10. mvn执行编译时使用lib下的jar包
  11. 杂记——淘宝/京东 商品/评论爬取+词云图制作
  12. 在ideaIU上使用JDBC连接MySQL及简单操作
  13. svn和git的区别,为什么使用git?
  14. 谷歌浏览器如何使用访客模式 谷歌浏览器使用访客模式的方法
  15. 大厂职级、薪资一览表,你处在哪一级?(BAT/TMD/华为)
  16. va_list、va_start和va_end实现
  17. 交通灯控制系统(30-5-20-5)【数电课设】
  18. 02.springMVC设计思想及springAOP
  19. 如何使用aircrack破解wifi密码
  20. 中缀表达式转后缀表达式两位数_什么是圆形磁动势?永磁无刷电机是怎么转起来的?...

热门文章

  1. Windows服务器应该如何保持长时间连接不断开。
  2. 极限编程XP 的12个最佳实践
  3. 超低功耗摄像头 门锁 猫眼
  4. 香橙派借助语音模块实现语音刷抖音
  5. Teamviwer操作(请激活复选框,证明是本人操作解决办法)
  6. 征途对计算机配置要求,征途2配置要求是什么?
  7. 成人python线上培训机构_哪些成年人正通过在线教育平台学习?看这个大数据报告就知道...
  8. 架构师提升技术影响力的三个阶段(一)
  9. linux mint卸载桌面环境,在Linux Mint 19/Ubuntu 18.04系统上安装Deepin桌面环境的方法
  10. druid Hadoop-based Batch Ingestion