在8051微控制器上的上一个教程中,我们已经看到了介绍8051年介绍了8051单片机的结构和存储结构。在本教程中,我们将进一步了解8051微控制器指令集和8051寻址模式。
8051单片机指令集简介
为任何微控制器编写程序,都包括按照特定的顺序向微控制器发出命令,这些命令必须按照特定的顺序执行,以完成特定的任务。微控制器的命令被称为微控制器的指令集。
就像我们的句子是由单词组成的,微控制器(任何计算机)的程序也是由指令组成的。写在程序中的指令告诉微控制器要执行哪一项操作。
指令集对一系列计算机是独一无二的。本教程介绍了8051微控制器指令集,也称为MCS-51指令集。
由于8051系列的微控制器是8位处理器,8051微控制器指令集是为8位控制应用而优化的。作为典型的8位处理器,8051单片机指令具有8位操作码。因此,8051单片机的指令集最多可以有2条8= 256条指令。
在详细介绍8051单片机指令集之前,请阅读以下内容:8051单片机存储器组织.
简要介绍8051单片机的指令和组
在进入8051微控制器指令集的详细信息之前,指令类型和寻址模式,让我们简要介绍8051微控制器指令集(MCS-51指令集)的指令和指令组。
下表显示了8051指令组和每组中的指令。8051单片机指令集中有49个指令助记符,这49个助记符分为5组。
数据传输 | 算术 | 逻辑 | 布尔 | 程序分支 |
MOV | 添加 | ANL. | CLR | LJMP. |
Movc. | ADCC. | ORL | SETB | AJMP. |
movx. | SUBB | XRL | MOV | SJMP |
推 | 公司 | CLR | JC | 生理改变 |
流行 | 12月 | CPL. | JNC. | jnz. |
交换 | m | RL | 简森-巴顿 | CJNE |
XCHD | DIV | RLC | JNB. | DJNZ |
达一 | RR | JBC | NOP | |
RRC | ANL. | LCALL | ||
交换 | ORL | 一个电话 | ||
CPL. | 受潮湿腐烂 | |||
重温 | ||||
无条件转移指令 |
8051年寻址模式
什么是寻址模式?
寻址模式是定位目标数据的一种方式,也称为操作数。8051系列微控制器允许五种类型的寻址模式来寻址操作数。它们是:
- 立即寻址
- 寄存器寻址
- 直接寻址
- 寄存器-间接寻址
- 索引寻址
立即寻址
在立即寻址模式下,操作数跟随操作码,是一个8位或16位的常量数据。“立即寻址”的名称来自于这样一个事实,即要存储在内存中的常量数据紧跟在操作码之后。
要存储的常量值是在指令本身指定的,而不是从寄存器中取的。必须将常量数据复制到的目标寄存器的大小应与指令中提到的操作数相同。
例子:mov a,#030h
这里,累加器被加载为30(十六进制)。操作数中的#表示它是一个数据而不是寄存器的地址。
立即寻址非常快,因为要加载的数据是在指令本身给出的。
寄存器寻址
在8051单片机内存组织教程中,我们已经看到了RAM的组织和四组工作寄存器,每组有八个寄存器。
在寄存器寻址模式中,八个寄存器(R0 - R7)中的一个被指定为指令中的操作数。
在PSW登记册的帮助下选择合适的银行是很重要的。让我们看一个假设Bank0被选中的寄存器寻址示例。
例子:MOV, R5
这里,堤岸的寄存器R5的8位内容被移动到蓄能器。
直接寻址
在直接寻址模式下,数据的地址被指定为指令中的操作数。使用直接寻址模式,我们可以访问任何寄存器或片上变量。这包括通用RAM,SFR,I / O端口,控制寄存器。
例子:MOV, 47个h
这里,RAM位置47h中的数据被移动到累加器。
寄存器间接寻址
在间接寻址模式或寄存器间接寻址模式中,操作数的地址被指定为寄存器的内容。这将更加清晰。
例子:MOV, @R1
@符号表示寻址方式是间接的。例如,如果R1的内容是56H,则操作数在内存内部的位置是56H。如果RAM位置56H的内容为24H,则24H被移动到累加器中。
“间接寻址模式”只支持R0和R1。这些间接寻址模式的寄存器称为指针寄存器。
索引寻址模式
使用索引寻址模式,操作数的有效地址是基本寄存器和偏移寄存器的总和。当偏移寄存器是累加器(A),基本寄存器可以是数据指针(DPTR)或程序计数器(PC)。
在索引寻址模式下,只能使用MOVC和JMP指令。索引的寻址模式在从查找表中检索数据时很有用。
例子:MOVC, @A +焦度
这里,操作数的地址是DPTR和Accumulator的内容之和。
注意:一些作者和教科书添加了绝对寻址模式,相对寻址模式和长寻址模式等其他地址模式。
还阅读:8051单片机的体系结构.
8051微控制器指令集中的指令类型
在看指令类型之前,让我们先看一下8051单片机指令的结构。一个8051指令由操作码(Operation - Code的缩写)和操作数组成,操作数的大小为0字节、1字节或2字节。
操作代码部分的指令包含助记符,它指定要执行的操作类型。指令的所有助记符或操作码部分都是一个字节大小。
即将到来的指令的操作数,它定义了说明正在处理的数据。操作数可以是以下任何一种:
- 没有操作数
- 数据值
- I / O端口
- 内存位置
- CPU寄存器
可以有多个操作数,指令格式如下:
助记源目的操作数,源操作数简单的指令仅包含Opcode。其他指令可以包括一个或多个操作数。指令可以是一个字节指令,它仅包含Opcode,或两个字节指令,其中第二个字节是操作数或三个字节指令,操作数构成第二个和第三字节。
根据它们所执行的操作,8051单片机指令集中的所有指令被分为五组。它们是:
- 数据传送指令
- 算术指令
- 逻辑指令
- 布尔或位操作指令
- 计划分支指示
现在我们将简单地看看这些说明。
数据传送指令
数据传输指令与寄存器或外部程序存储器或外部数据存储器之间的数据传输相关联。下面给出与数据传输相关的助记符。
- MOV
- Movc.
- movx.
- 推
- 流行
- 交换
- XCHD
助记符 |
描述 |
MOV |
移动数据 |
Movc. | 移动代码 |
MOCX. |
将外部数据 |
推 | 将数据移动到堆栈 |
流行 |
从堆栈复制数据 |
交换 | 在两个寄存器之间交换数据 |
XCHD |
在两个寄存器之间交换较低的订单数据 |
下表列出了所有可能的数据传输指令,以及其他细节,如寻址模式、占用的大小和它需要的数字机周期。
算术指令
使用算术指令,你可以执行加,减,乘和除。算术指令还包括递增1、递减1和一个叫做Decimal Adjust Accumulator的特殊指令。
与8051单片机指令集的算术指令相关的助记符是:
- 添加
- ADCC.
- SUBB
- 公司
- 12月
- m
- DIV
- 达一
助记符 |
描述 |
添加 |
没有携带 |
ADCC. | 除了与携带 |
SUBB |
减去与携带 |
公司 | 增加1 |
12月 |
递减1 |
m | 乘 |
DIV |
分 |
达一 | 调整累加器(寄存器) |
算术指令不知道数据格式,如有符号、无符号、ASCII、BCD等。此外,算术指令执行的操作会影响PSW寄存器中的进位、溢出、零等标志。
下表中提到了与算术指令相关的所有可能的助记符。
逻辑指令
下一组指令是逻辑指令,执行与、或、异或、非、旋转、清除和交换等逻辑操作。逻辑指令是在逐位的基础上在字节数据上执行的。
与逻辑指令相关的助记符如下:
- ANL.
- ORL
- XRL
- CLR
- CPL.
- RL
- RLC
- RR
- RRC
- 交换
助记符 |
描述 |
ANL. |
逻辑和 |
ORL | 逻辑或 |
XRL |
前任伴侣或者 |
CLR | 明确的注册 |
CPL. |
补充登记 |
RL | 向左旋转一个字节 |
RLC |
旋转字节并携带位 |
RR | 向右旋转字节 |
RRC |
旋转一个字节并向右进位 |
交换 | 在一个字节中交换低的和高的小点 |
下表显示了逻辑指令的所有可能的助记符。
布尔或位操作指令
顾名思义,布尔或比特操纵指令处理位变量。我们知道RAM中有一个特殊的位可寻址区域,一些特殊功能寄存器(SFR)也是可寻址的。
对应于布尔或位操作指令的助记符是:
- CLR
- SETB
- MOV
- JC
- JNC.
- 简森-巴顿
- JNB.
- JBC
- ANL.
- ORL
- CPL.
助记符 |
描述 |
CLR | 清除位(重置为0) |
SETB |
设置一点(设置为1) |
MOV | move |
JC |
跳转如果设置携带标志 |
JNC. | 如果没有设置进位标志,则跳转 |
简森-巴顿 |
如果指定的位设置跳转 |
JNB. | 如果指定位未设置,则跳转 |
JBC |
如果指定的位已设置,则跳转并清除该位 |
ANL. | 位和 |
ORL |
按位或 |
CPL. | 补充这一点 |
这些指令可以在位级执行集合、清除、和或补码等操作。布尔指令的所有可能的助记符在下表中指定。
计划分支指示
在8051单片机指令集中的最后一组指令是程序分支指令。这些指令控制程序逻辑的流程。程序分支指令的助记符如下。
- LJMP.
- AJMP.
- SJMP
- 生理改变
- jnz.
- CJNE
- DJNZ
- NOP
- LCALL
- 一个电话
- 受潮湿腐烂
- 重温
- 无条件转移指令
助记符 |
描述 |
LJMP. | 跳跃(无条件) |
AJMP. |
绝对跳跃(无条件) |
SJMP | 短跳(无条件) |
生理改变 |
A = 0时跳跃 |
jnz. | 如果a不等于0,则跳跃 |
CJNE |
如果不相等,比较和跳跃 |
DJNZ | 如果不是零,递减并跳跃 |
NOP |
没有操作 |
LCALL | 长时间调用子程序 |
一个电话 |
对子程序的绝对调用(无条件) |
受潮湿腐烂 | 从子程序返回 |
重温 |
从中断返回 |
无条件转移指令 | 跳转到一个地址(无条件) |
所有这些指令,除了NOP(无操作)以某种方式影响程序计数器(PC)。其中一些指令在将控制转移到程序的其他部分之前具有决策能力。
下表显示了与程序分支指令相关的所有助记符。
在本教程中,我们已经看到了8051微控制器指令集的介绍,8051微控制器中的寻址模式以及8051微控制器的指令集中的不同类型的指令。
14的反应
你好,
逻辑指令是非常有用的信息
最好的教程。布局合理,易于消化。做得很好。
最好的事物
谢谢你!
很有帮助
很好的指令集解释
非常有用......所有指令集..谢谢你
谢谢你的指导,很有帮助。
真的很有用,也很有指导意义?
这对准备笔记很有用
漂亮的教程
非常好的教程……
这是惊人的解释,比那些无用的YouTube讲座更好。谢谢你 !
很好的教程
良好的易于理解的内容......