80C51单片机的七种寻址方式

简介: 80C51单片机的七种寻址方式

指令系统

按所占字节分,分三种:

(1)单字节指令49条

(2)双字节指令45条;

(3)三字节指令17条

执行时间来分,分三种:

(1)1个机器周期 (12个时钟振荡周期)的指令64条:

(2)2个机器周期指令45条

(3)4个机器周期--乘、除指令


首先理解这样的等式

地址是20H的寄存器中,存放的内容是01H

(20H)=#01H

符号指令的书写格式

单个操作数的指令:

操作助记符 [目的操作数]

两个操作数的指令:

操作助记符[目的操作数],[源操作数]

描述符号

Rn(n=0~7) 当前工作寄存器组中的寄存器R0~R7之一
Ri(i=0,1) 当前工作寄存器组中的寄存器R0或R1
@ 间接寻址或编制寻址前缀
#data 8位立即数
#data16 16位立即数
direct 片内RAM单元地址及SFR地址
addr11 11位目的地址
addr16 16位目的地址
rel 8位地址偏移量,范围:-128~+127
bit 片内RAM位地址,SFR的位地址
(X) X表示地址单元或寄存器的内容
/ 位操作数的取反操作前缀

单片机的七种寻址方式

1.直接寻址

单片机的直接寻址是指指令中给出操作数所在RAM单元的地址,操作数就在该地址中。直接寻址方式适用于内部RAM的低128B和特殊功能寄存器。例如,在一条指令中,操作码指明了要执行的操作,而地址字段指明了操作数所在的内存地址。这种方式下,CPU会直接从指定的内存地址中获取操作数进行运算或操作。


注:按字节访问特殊功能寄存器只能用直接寻址方式。在指令中,特殊化功能寄存器可以以单元地址的形式出现,也可以以特殊功能寄存器名的形式出现。


优点


直接寻址是一种简单直接地寻址方式,指令中包含了数据地内存地址,因此执行不需要额外地计算过程,节省了指令的存储空间。


缺点


指令寻址要求程序员必须清除的知道数据的内存地址,这在实际编程中会增加编程的复杂性,也降低了程序的灵活性和可移植性。


寻址空间


R0~R7、A、B和DPTR


例:若(50H)=#3AH,执行MOV A,50H后,(A)=


分析:地址为50H的存储单元,存的立即数是3AH,MOV A,50H的意思是将片内RAM中地址为50H存储单元中存储的存储数据进行移动,源操作数会覆盖目的操作数


所以累加器A的内容(A)=#3AH

这里解释一下单片机是如何存储MOV A,50H的,因为这条指令既有字母也有数字,单片机的ROM通过E5H和50H存储这条指令,E5H表示MOV,A后面跟的是寄存器,50H表示寄存器的地址。


注:指令中两个操作数都可由直接寻址方式给出:


MOV direct1 ,direct2


把片内RAM中62H单元的内容送到片内RAM中的42H单元中


2.寄存器寻址

寄存器寻址中,操作数直接从寄存器中读取或写入,在使用寄存器寻址时,指令中的操作数字段通常指示了要访问的寄存器的标识符,而实际的数据就存储在该寄存器中。例如,在一条指令中,操作码指明了执行的操作,而操作数字段指示了要从哪个寄存器中获取数据或向哪个寄存器中写入数据。


优点


寄存器是CPU中的高速寄存器,因此寄存器寻址速度非常快,提高了指令执行的效率,直接从寄存器中获取数据可以节省对内存的访问时间,避免了频繁读写内存的开销。


缺点


CPU内部的寄存器数量有限,对于复杂的计算或大规模数据处理,可能会导致寄存器资源不足的问题。


例:若(R0)=#30H,执行MOV A,R0后,(A)=


分析:寄存器R0中的数据为30H,将寄存器R0中的数据,覆盖A,所以(A)=#30H

这条指令只有字母,所以ROM通过只通过E8H存储这条指令即可

可以进行寄存器寻址:

工作寄存器R0-R7,累加器A,双字节AB,数据指针DPTR,位累加器Cy。

3.寄存器间接寻址

寄存器间接寻址就是指令中所给定的寄存器存放的不是操作数本身。而是操作数所在内RAM或外RAM单元的地址,即操作数通过寄存器间接获得。通俗来讲,CPU不直接使用指令中给出的地址,而是使用指令中指定的寄存器中存储的地址作为实际的内存地址。


优点


寄存器间接寻址允许程序员使用寄存器来存储内存地址,增加了程序的灵活性


同时,只需要修改寄存器中的地址,而不需要修改所有引用该地址的指令,使得程序的维护和修改更加容易。


缺点


使用寄存器间接寻址通常需要额外的指令来加载或存储寄存器的地址,这会增加一定的指令开销和执行时间。


寻址空间


片内RAM(@R0,@R1,@SP)


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


为了区别寄存器寻址和寄存器间接寻址,在寄存器间接寻址方式中,应在寄存器名称前面加前缀标志“@”


例:若(R0)=#30H,(30H)=#5AH,执行MOV A,@R0后,(A)=


分析:寄存器R0中的数据是30H,存储单元30H的内容是5AH,根据描述符号,@为间接寻址或编制寻址前缀吗,@相当于取地址符,所以MOV A,@R0=MOV A,30H,所以是将30H中的内容覆盖A,所以(A)=#5AH

可用寄存器间接寻址:

R0,R1,数据指针DPTR,堆栈指针SP

4.立即数寻址

立即数寻址是直接将指令中的一个固定的数值(立即数)作为操作数,而不需要从内存或者寄存器中获取数据。在进行立即寻址时,指令本身包含了需要进行操作的数据,CPU会直接使用这些立即数进行计算或者存储。


优点


直接寻址是直接从指令中获取数据,无需额外的内存访问,能够节省内存访问的时间,同时简化了指令格式。


缺点


1.立即数通常需要在指令中编码,因此受到指令格式长度的限制,可能无法表示过大的操作数,造成操作数范围的限制。


2.对于大的立即数,需要占用更多的指令长度来进行编码,可能导致指令长度增加,降低了指令的密度,影响了指令的执行效率。


3.如果需要修改操作数的数值,通常需要修改程序的指令本身,而不是像寄存器或者内存那样可以动态改变数值。


寻址空间:程序寄存器中的立即数


为了与直接寻址指令中的直接地址加以区别,需在操作数前加前缀标志“#”


例:执行MOV A,#50H后,(A)=


分析:将立即数覆盖原来A中的数据,所以(A)=#50H

5.变址寻址

变址寻址是通过在执行指令时对一个基本地址进行偏移,以便访问存储器中的其他位置。在变址寻址中,除了使用指令中给出的基本地址外,还会使用一个称为变址寄存器(index register)的寄存器来存储偏移量。通过将基本地址与变址寄存器中的偏移量相加,可以计算出要访问的内存地址。


操作数的地址=基址(存在于DPTR或PC中)+偏移量(存在于累加器A中)


以两者内容相加形成的16位地址作为目的地址进行寻址


注:DPTR是一个16位的SFR,由两部分构成,高八位(DPH),低八位(DPL),例如2400H,那么24H就存储在DPH中,00H就存储在DPL中。


优点


对于需要顺序访问数组或其他数据结构中的元素的情况,变址寻址非常方便,能够通过基本地址和偏移量轻松地访问连续地内存单元。


缺点


1.使用变址寻址可能会增加程序的复杂性,特别是在涉及到多级变址的情况下,容易出错。


2.变址寻址需要使用一个或多个寄存器来存储变址值,这可能会限制可用的通用寄存器数量,从而影响程序的并行性和性能。


寻址空间:读程序存储器中的固定数据和程序散转


例:(A)=#0FH,(DPTR)=#2400H,执行MOVC A,@A+DPTR后,(A)=


分析:对A+DPTR进行取地址,A+DPTR=240FH,所以


MOVC A,@A+DPTR=MOVC A,240FH,将ROM中地址为240FH存储单元的内容复制并覆盖A中原先的内容


(A)=#88H

累加器中原来存储的数据是0FH,首先将DPTR内容与累加器的内容求和(240FH),接着单片机将程序存储器ROM中地址是240F存储单元的内容复制一份,覆盖原来ACC中的内容

本寻址方式的指令有3条:


MOVC A, @A+DPTR


MOVC A,@A+PC


JMP A,@A+DPTR


前两条指令适用于读程序存储器中固定的数据。第3条为散转指令,A中内容为程序运行后的动态结果,可根据A中不同内容,实现跳向不同程序入口的跳转。


6.相对寻址

指令给出的地址是相对于当前指令的地址的偏移量,而不是一个绝对的地址值。当CPU执行这样的指令时,会将当前指令的地址与给定的偏移量相加,以计算出实际的内存地址进行访问。


相对寻址通常用于实现跳转指令(如条件跳转、无条件跳转等)实现程序分支或者访存指令中。这种寻址方式使得程序可以更加灵活地进行控制流的改变,同时也可以简化程序的编写,因为不需要硬编码绝对的地址。


寻址空间:ROM


目的地址=转移指令所在的地址+转移指令字节数+rel


其中,偏移量rel是带符号8位二进制补码数:-128~+127。

程序转移范围是以转移指令的下条指令首地址为基准地址,相对偏移在-128~+127之间。

例如,2000H: SJMP 08H

该指令占据2个字节,转移偏移量为08,所以执行该程序PC地址为2000H,指令后,程序跳转到2000H+2H+08H=200AH


例如: SJMP LOOP

“LOOP”为目的地址标号。汇编时,由汇编程序自动计算和填入偏移量但手工汇编时,偏移量的值由手工计算。


7.位寻址

对位地址中的内容进行位操作的寻址方式称为位寻址。由于单片机中只有内部RAM和特殊功能寄存器的部分单元有位地址,因此位寻址只能对有位地址的这两个空间进行寻址操作。


直接寻址和位寻址的区别:


直接寻址:


直接寻址,是把数据直接写入当前地址,或者把当前地址的内容读出如:MOV A,90H,就是把地址90H中的内容写入到寄存器A中。


位寻址:


对内部RAM和特殊功能寄存器具有位寻址功能的某位内容进行置1和清0操作。


位地址一般以直接位地址给出,位地址符号为“bit”,写入和读出的是一个位bit变量。如:


MOV C,7AH,就是把地址7AH中的内容写入位变量C,而内容只能是0、1。


MOV C,2FH.2,就是把地址2FH中的第2位的内容写入到C变量。内容只能是0、1。一个字节由8位组成。

例如:MOV A,00H和MOV C,00H,前者是将RAM中地址为00H的8位内容传递给A,后者是将位寻址区(20H-2FH)中的地址为00H的1位内容传递给C。这两个00H不是在同一个地址。


寻址空间:内RAM中位寻址区20H~2FH单元的128位(位地址为00H~7FH)以及11个特殊功能寄存器的83个可寻址位。


例:位地址00H内容为1,执行MOV C,00H后,PSW.7的内容为


注:PSW是一个8位的寄存器,PSW.7指的是PSW的最高位(从0开始),即CY,简称为C


分析:MOV C,00H的含义是把位地址为00H的内容放到PSW.7中,并且将PSW.7中原来的内容覆盖,(C)=1,PSW.7=1


对于8位的立即数用#表示,例如(40H)=#88H,对于1位的立即数,不用加#号,例,(C)=1

片内RAM中可以进行位寻址的地址

特殊功能寄存器(SFR)中能进行位寻址的地址

7种寻址方式的寻址空间总结:

目录
相关文章
【期末不挂科-单片机考前速过系列P2】(第二章:搞定寻址方式)经典例题盘点(带图解析)
【期末不挂科-单片机考前速过系列P2】(第二章:搞定寻址方式)经典例题盘点(带图解析)
|
7月前
|
数据格式
用C51单片机制作LED流水的灯
用C51单片机制作LED流水的灯
|
监控 数据处理 开发工具
单片机的C51基础知识介绍2
三、单片机的开发流程和工具 单片机的开发流程通常包括以下几个步骤: 硬件设计:根据应用需求,设计和选择合适的外部电路和接口电路,包括时钟电路、输入输出电路、存储器等。 软件开发:根据应用需求,使用相应的开发工具和编程语言进行软件开发,如C语言、汇编语言等。开发人员需要编写相应的代码,实现系统的功能和控制。 编译和烧录:将开发好的软件代码进行编译和链接,生成可执行的机器代码。然后将机器代码通过编程器烧录到单片机的存储器中。 调试和测试:将烧录好的单片机进行调试和测试,验证系统的功能和性能是否符合要求。可以通过调试工具和示波器等设备进行调试和测试。 单片机的开发工具和软件包括: 开发板
94 0
|
5月前
|
传感器 存储 程序员
《单片机原理与应用及C51编程技术》期末复习笔记
《单片机原理与应用及C51编程技术》期末复习笔记
|
6月前
|
数据安全/隐私保护
单片机课程设计——基于C51电子密码锁(源代码)
单片机课程设计——基于C51电子密码锁(源代码)
|
7月前
|
存储 移动开发
80C51单片机----数据传送类指令
80C51单片机----数据传送类指令
226 2
【51单片机】一个简单的例子TMOD&TCON带你永远理解【(不)可位寻址】
【51单片机】一个简单的例子TMOD&TCON带你永远理解【(不)可位寻址】
|
7月前
|
数据安全/隐私保护
C51单片机实现矩阵键盘密码锁
C51单片机实现矩阵键盘密码锁
|
存储 编译器 开发工具
单片机的C51基础知识介绍1
C51是指Intel公司推出的一款8位单片机,它的全称是Intel MCS-51系列单片机,也被称为8051系列单片机。C51系列单片机是一种非常经典和常用的单片机,具有广泛的应用领域和丰富的资源支持。下面将介绍C51单片机的基础知识。 一、C51单片机的特点和优势 1. 8位架构:C51单片机采用8位架构,即每个数据位的宽度为8位,能够处理8位的数据,适用于大部分嵌入式应用。 2. 高度集成:C51单片机具有高度集成的特点,包括CPU、存储器、输入输出端口、定时器、串口等功能模块,能够满足大多数应用的需求。 3. 低功耗设计:C51单片机采用低功耗设计,能够在低电压和低功耗的环境下正常工作,
494 0
【C51单片机】中断系统之单一外中断应用
【C51单片机】中断系统之单一外中断应用