8051 指令集2024 年 8 月 29 日 | 4 分钟阅读 指令是给单片机的命令,用于对提供的数据执行指定的操作。 单片机的指令集是单片机设计用于执行的指令的集合。
数据移动或处理指令助记符 | 操作说明 | 寻址方式 | 使用周期数 | 占用字节数 |
---|
Mov a,#num | 此指令将立即数复制到 acc 中 | immediate | 1 | 2 |
---|
Mov Rx,a | 此指令将数据从 acc 复制到 Rx | register | 1 | 1 |
---|
Mov a,Rx | 此指令将数据从 Rx 复制到 acc | register | 1 | 1 |
---|
Mov Rx,#num | 此指令将立即数复制到 Rx 中 | immediate | 1 | 2 |
---|
Mov a,add | 此指令将数据从直接地址位置 add 复制到 acc | 直接 | 1 | 2 |
---|
Mov add,a | 此指令将数据从 acc 复制到直接地址 add | 直接 | 1 | 2 |
---|
Mov add,#num | 此指令将立即数复制到直接地址 | 直接 | 2 | 3 |
---|
Mov add1,add2 | 此指令将数据从 add2 复制到 add1 | 直接 | 2 | 3 |
---|
Mov Rx,add | 此指令从直接地址复制数据 | 直接 | 2 | 2 |
---|
Mov add,Rx | 此指令将数据从 Rx 复制到直接地址 add | 直接 | 2 | 2 |
---|
Mov @Rp,a | 此指令将 acc 中的数据复制到 Rp 中的地址 | 间接 | 1 | 2 |
---|
Mov a,@Rp | 此指令将 Rp 中地址处的数据复制到 acc | 间接 | 1 | 1 |
---|
Mov add,@Rp | 此指令将 Rp 中地址处的数据复制到 add | 间接 | 2 | 2 |
---|
Mov @Rp,add | 此指令将 add 中的数据复制到 Rp 中的地址 | 间接 | 2 | 2 |
---|
Mov @Rp,#num | 此指令将立即字节 num 复制到 Rp 中的地址 | 间接 | 1 | 2 |
---|
Movx a,@Rp | 此指令将 Rp 中的外部地址的内容复制到 acc | 间接 | 2 | 1 |
---|
Movx a,@DPTR | 此指令将 DPTR 中的外部地址的内容复制到 acc | 间接 | 2 | 1 |
---|
Movx @Rp,a | 此指令将 acc 的内容复制到 Rp 中的外部地址 | 间接 | 2 | 1 |
---|
Movx @DPTR,a | 此指令将 acc 的内容复制到 DPTR 中的外部地址 | 间接 | 2 | 1 |
---|
Movc a,@a+DPTR | 在此指令中,通过将 acc 和 DPTR 相加来形成指令的地址,并将其内容复制到 acc | 间接 | 2 | 1 |
---|
Movc a, @a+PC | 在此指令中,通过将 acc 和 PC 相加来形成指令的地址,并将其内容复制到 acc | 间接 | 2 | 1 |
---|
Push add | 在此指令中,增加堆栈指针 (SP) 并将数据从源地址复制到 SP 中包含的内部 RAM 地址 | 直接 | 2 | 2 |
---|
Pop add | 此指令将数据从 SP 中包含的内部 RAM 地址复制到目标地址,并递减 SP | 直接 | 2 | 2 |
---|
Xch a, Rx | 此指令交换 acc 和 Rx 之间的数据 | 寄存器 | 1 | 1 |
---|
Xch a, add | 此指令交换 acc 和给定地址之间的数据 | 直接 | 1 | 2 |
---|
Xch a,@Rp | 此指令交换 acc 和 Rp 中地址之间的数据 | 间接 | 1 | 1 |
---|
Xchd a, @Rp | 此指令仅交换 acc 的低半字节和 Rp 中的地址 | 间接 | 1 | 1 |
---|
循环和跳转指令8051 中的循环操作 重复执行一系列指令一定的次数将导致循环的形成。循环操作用于根据需要多次在程序中运行相同的子程序集。 考虑指令 DJNZ 寄存器; 标签用于执行循环操作。 在此指令中,寄存器递减 1; 如果不为零,则 8051 跳转到标签所指向的目标地址。 示例:使用重复相加的技术将 15 乘以 10 解决方案:可以通过重复添加被乘数来执行乘法运算,次数与乘数相同。 例如  条件跳转指令 考虑下表列出了 8051 中使用的条件跳转指令 指令 | 操作 |
---|
JC | 如果 CY = 1 则跳转 | JNC | 如果 CY ≠ 1 则跳转 | JNB | 如果位 = 0 则跳转 | JB | 如果位 = 1 则跳转 | JZ | 如果 A = 0 则跳转 | DJNZ | 递减并在寄存器 ≠ 0 时跳转 | JNZ | 如果 A ≠ 0 则跳转 | CJNE A, data | 如果 A ≠ data 则跳转 | CJNE reg, #data | 如果字节 ≠ data 则跳转 | JBC | 如果位 = 1 并且清除位则跳转 |
|