在上一个关于8051微控制器的教程中,我们看到了介绍8051,8051的体系结构和8051微控制器的内存组织。继续进一步,我们将查看本教程中的8051微控制器指令和8051寻址模式。
简介8051微控制器指令集
为任何微控制器编写程序包括以特定顺序向微控制器提供命令,必须执行它们才能执行特定的任务。微控制器的命令称为微控制器的指令集。
正如我们的句子是用单词制成的一样,微控制器(就此而言,任何计算机)程序是由说明制成的。在程序中编写的说明告诉微控制器要执行哪个操作。
指令集是计算机家族独有的。本教程介绍了8051微控制器指令集,也称为MCS-51指令集。
由于8051微控制器家族是8位处理器,因此8051微控制器指令集已针对8位控制应用进行了优化。作为典型的8位处理器,8051微控制器指令具有8位Opcodes。结果,8051微控制器指令集最多可以具有2个8= 256个说明。
在介绍8051微控制器指令集的详细信息之前,请阅读以下内容:8051微控制器内存组织。
简要介绍8051微控制器的说明和组
在介绍8051微控制器指令集,指令类型和寻址模式之前,让我们简要介绍一下8051 MicroControllloler指令集的说明和指令组(MCS-51指令集)。
下表显示了每个组中的8051指令组和指令。8051微控制器指令集中有49个指令mnemonics,这49个mnemonics分为五组。
数据传输 | 算术 | 逻辑 | 布尔 | 程序分支 |
移动 | 添加 | 安尔 | Clr | LJMP |
movc | addc | ORL | setB | AJMP |
movx | 子 | XRL | 移动 | SJMP |
推 | Inc | Clr | JC | JZ |
流行音乐 | 十二月 | CPL | JNC | jnz |
XCH | mul | RL | JB | CJNE |
XCHD | div | RLC | JNB | djnz |
da a | RR | JBC | nop | |
RRC | 安尔 | lcall | ||
交换 | ORL | 一个电话 | ||
CPL | ret | |||
埃蒂 | ||||
JMP |
8051地址模式
什么是寻址模式?
寻址模式是定位目标数据的一种方法,这也称为操作数。8051个微控制器家族允许五种类型的地址模式来解决操作数。他们是:
- 立即解决
- 注册地址
- 直接寻址
- 注册 - 间接地址
- 索引寻址
立即解决
在立即寻址模式下,遵循OPCODE的操作数是8或16位的常数数据。立即解决的名称来自以下事实:要在内存中存储的常数数据紧接遵循OPODE。
要存储的常数值在说明本身中指定,而不是从寄存器中取出。必须复制常数数据的目标寄存器应与指令中提到的操作数相同。
例子:移动A,#030H
在这里,蓄能器装有30个(十六进制)。操作数中的#表示它是数据,而不是寄存器的地址。
当指令本身给出要加载的数据时,立即解决的问题非常快。
注册地址
在8051 MicroController Memory组织教程中,我们看到了RAM的组织和四个工作登记册,每个银行中有八个寄存器。
在寄存器地址模式下,指令中指定了八个寄存器(R0 - R7)之一。
在PSW登记册的帮助下选择适当的银行很重要。让我们查看假设选择bank0的登记簿示例。
例子:移动A,R5
在这里,银行0寄存器R5的8位内容移至累加器。
直接寻址
在直接地址模式下,数据的地址指定为指令中的操作数。使用直接地址模式,我们可以访问任何寄存器或芯片变量。这包括通用RAM,SFR,I/O端口,控制寄存器。
例子:移动A,47H
在这里,RAM位置47H中的数据移至累加器。
注册间接地址
在间接寻址模式或寄存器间接寻址模式下,操作数的地址指定为寄存器的内容。这将是一个示例更清楚的。
例子:mov a, @r1
@符号表示地址模式是间接的。例如,如果R1的内容为56H,则操作数在内部RAM位置56H。如果RAM位置56H的内容为24H,则将24H移至累加器中。
在间接地址模式下仅允许R0和R1。这些在间接地址模式下的登记册称为指针寄存器。
索引地址模式
使用索引地址模式,操作数的有效地址是基本寄存器和偏移寄存器的总和。基本寄存器可以是数据指针(DPTR)或程序计数器(PC),而偏移寄存器是累加器(a)。
在索引地址模式下,只能使用MOVC和JMP指令。从查找表中检索数据时,索引地址模式很有用。
例子:movc a, @a+dptr
在这里,操作数的地址是DPTR和累加器的内容之和。
笔记:一些作者和教科书添加了几种其他地址模式,例如绝对地址模式,相对地址模式和长期地址模式。
另请阅读:8051微控制器体系结构。
8051微控制器指令集中的说明类型
在查看指令类型之前,让我们查看8051微控制器指令的结构。8051指令包括一个OPCODE(操作短 - 代码),其次是零字节,一个字节或两个字节的操作数。
该指令的OP代码部分包含助记符,该助记符指定要执行的操作类型。所有mnemonics或指令的OpCode部分都是一个字节大小。
进入指令的操作数部分,它定义了指令正在处理的数据。操作数可以是以下任何一个:
- 没有操作数
- 数据值
- I/O端口
- 内存位置
- CPU寄存器
可以有多个操作数,教学格式如下:
助记符操作数,源操作数一个简单的说明仅由OpCode组成。其他说明可能包括一个或多个操作数。指令可以是单字节指令,仅包含opcode或两个字节说明,其中第二个字节是操作数或三个字节说明,其中操作数构成了第二个字节和第三个字节。
根据它们执行的操作,将8051微控制器指令集中的所有指令分为五组。他们是:
- 数据传输说明
- 算术说明
- 逻辑说明
- 布尔或位操纵说明
- 程序分支说明
现在,我们将简要了解这些说明。
数据传输说明
数据传输指令与寄存器之间的数据传输或外部程序内存或外部数据存储器有关。与数据传输相关的助记符如下。
- 移动
- movc
- movx
- 推
- 流行音乐
- XCH
- XCHD
mnemonic |
描述 |
移动 |
移动数据 |
movc | 移动代码 |
mocx |
移动外部数据 |
推 | 将数据移至堆栈 |
流行音乐 |
从堆栈复制数据 |
XCH | 两个寄存器之间的交换数据 |
XCHD |
交换两个寄存器之间的低阶数据 |
下表列出了所有可能的数据传输指令以及其他详细信息,例如地址模式,大小占用和数字机循环。
算术说明
使用算术指令,您可以执行加法,减法,乘法和除法。算术指令还包括一个递增,减少一个和称为小数调整累加器的特殊指令。
与8051微控制器指令集的算术指令相关的助记符是:
- 添加
- addc
- 子
- Inc
- 十二月
- mul
- div
- da a
mnemonic |
描述 |
添加 |
没有随身携带 |
addc | 随身携带 |
子 |
随身携带 |
Inc | 增量1 |
十二月 |
减少1 |
mul | 乘 |
div |
划分 |
da a | 小数调整累加器(寄存器) |
算术指令对数据格式不了解,即签名,未签名,ASCII,BCD等。此外,算术指令执行的操作会影响PSW寄存器中的随身携带,溢出,零等的标志。
下表中提到了与算术指令相关的所有可能的助记符。
逻辑说明
下一组指令是逻辑说明,它们执行逻辑操作,例如和或XOR,不旋转,清除和交换。逻辑说明是根据数据的字节进行逐个数字进行的。
与逻辑说明相关的助记符如下:
- 安尔
- ORL
- XRL
- Clr
- CPL
- RL
- RLC
- RR
- RRC
- 交换
mnemonic |
描述 |
安尔 |
逻辑和 |
ORL | 逻辑或 |
XRL |
前 |
Clr | 清除注册 |
CPL |
补充登记册 |
RL | 向左旋转字节 |
RLC |
旋转一个字节,向左携带钻头 |
RR | 向右旋转字节 |
RRC |
旋转一个字节并将钻头向右携带 |
交换 | 在字节中交换较低和更高的小点心 |
下表显示了逻辑说明的所有可能的助记符。
布尔或位操纵说明
顾名思义,布尔或位操纵说明涉及位变量。我们知道,RAM中有一个特殊的位可调区域,一些特殊功能寄存器(SFR)也可以解决。
对应于布尔或位操作说明的助记符是:
- Clr
- setB
- 移动
- JC
- JNC
- JB
- JNB
- JBC
- 安尔
- ORL
- CPL
mnemonic |
描述 |
Clr | 清除一点(重置为0) |
setB |
设置一点(设置为1) |
移动 | 移动一点 |
JC |
如果设置了携带国旗,请跳跃 |
JNC | 如果未设置携带国旗,请跳跃 |
JB |
如果设置了指定位,请跳跃 |
JNB | 如果未设置指定位,请跳跃 |
JBC |
如果设置了指定位,请跳跃并清除位 |
安尔 | 钻头和 |
ORL |
钻头或 |
CPL | 补充位 |
这些说明可以在位级别执行设置,清除和或或补充等。下表中指定了布尔说明的所有可能的助记符。
程序分支说明
8051微控制器指令集中的最后一组指令是程序分支指令。这些指令控制程序逻辑的流程。程序分支说明的助记符如下。
- LJMP
- AJMP
- SJMP
- JZ
- jnz
- CJNE
- djnz
- nop
- lcall
- 一个电话
- ret
- 埃蒂
- JMP
mnemonic |
描述 |
LJMP | 跳远(无条件) |
AJMP |
绝对跳跃(无条件) |
SJMP | 短跳(无条件) |
JZ |
如果A等于0,请跳跃 |
jnz | 如果A不等于0,请跳跃 |
CJNE |
比较并跳跃如果不相等 |
djnz | 减少并跳跃(如果不是零) |
nop |
没有操作 |
lcall | 长时间呼叫子例程 |
一个电话 |
绝对致电子例程(无条件) |
ret | 从子例程返回 |
埃蒂 |
从中断返回 |
JMP | 跳到地址(无条件) |
所有这些说明,除了NOP(无操作)以一种或其他方式影响程序计数器(PC)。这些说明中的一些具有决策能力,然后再将控制权转移到程序的其他部分。
下表显示了有关程序分支指令的所有助记符。
在本教程中,我们看到了8051 MicroController指令集的简介,在8051 MicroController中解决了8051微控制器中的模式,并在8051 MicroController的指令集中进行了不同类型的指令。
20个回应
你好,
逻辑说明是非常有用的信息
最佳教程。布局很好,使其消化。做得好。
最好的
谢谢你
非常有帮助
很好的说明套装
非常有用……所有指令集..谢谢你
感谢您的指示集,这很有帮助。
您真的很有用,并且非常有指导?
它非常适合笔记准备
不错的教程
非常好的教程…
这是一个了不起的解释,比那些无用的YouTube演讲更好。谢谢你 !
非常好的教程
很好的容易理解的内容…
精美解释了一切。
很好的解释
最有帮助的是研究8051的教学集
太感谢了:)
对于您的技术单词,它非常了解
你好,
非常容易理解。非常清楚。
这太好了,我喜欢内容。保持良好的工作确实有用。感谢你…
非常古德说明它