【51汇编语言指令大全】在单片机开发中,51系列单片机(如80C51)广泛应用于各种嵌入式系统。其汇编语言是控制硬件操作的重要工具,掌握其指令集对于编程者至关重要。本文将对51汇编语言的常用指令进行总结,并以表格形式展示,帮助读者快速查阅和理解。
一、51汇编语言指令分类
51汇编语言指令主要分为以下几类:
- 数据传送指令
- 算术运算指令
- 逻辑运算指令
- 位操作指令
- 控制转移指令
- 布尔操作指令
二、指令汇总表
| 指令助记符 | 功能说明 | 操作数 | 字节数 | 周期数 |
| MOV A, Rn | 将寄存器Rn的内容传送到累加器A | Rn: R0~R7 | 1 | 1 |
| MOV A, direct | 将直接地址单元内容传送到A | direct: 0x00~0xFF | 2 | 2 |
| MOV A, @Ri | 将Ri所指地址的内容传送到A | Ri: R0, R1 | 1 | 1 |
| MOV A, data | 立即数送入A | data: 0x00~0xFF | 2 | 2 |
| MOV Rn, A | 将A的内容传送到Rn | Rn: R0~R7 | 1 | 1 |
| MOV Rn, direct | 将direct内容传送到Rn | Rn: R0~R7 | 2 | 2 |
| MOV Rn, data | 立即数送入Rn | Rn: R0~R7 | 2 | 2 |
| MOV direct, A | 将A内容传送到direct | direct: 0x00~0xFF | 2 | 2 |
| MOV direct, Rn | 将Rn内容传送到direct | Rn: R0~R7 | 2 | 2 |
| MOV direct, direct | 直接地址间传送 | direct: 0x00~0xFF | 3 | 3 |
| MOV direct, data | 立即数送入direct | direct: 0x00~0xFF | 3 | 3 |
| MOV @Ri, A | 将A内容传送到Ri所指地址 | Ri: R0, R1 | 1 | 1 |
| MOV @Ri, data | 立即数送入Ri所指地址 | Ri: R0, R1 | 2 | 2 |
| MOVX A, @DPTR | 从外部RAM读取数据到A | DPTR: 16位地址 | 1 | 2 |
| MOVX @DPTR, A | 将A写入外部RAM地址 | DPTR: 16位地址 | 1 | 2 |
| MOVX A, @Ri | 从外部RAM读取数据到A | Ri: R0, R1 | 1 | 2 |
| MOVX @Ri, A | 将A写入外部RAM地址 | Ri: R0, R1 | 1 | 2 |
| MOVC A, @A+PC | 从程序存储器读取数据到A | PC偏移 | 1 | 2 |
| MOVC A, @A+DPTR | 从程序存储器读取数据到A | DPTR + A | 1 | 2 |
三、算术运算指令
| 指令助记符 | 功能说明 | 操作数 | 字节数 | 周期数 |
| ADD A, Rn | A + Rn → A | Rn: R0~R7 | 1 | 1 |
| ADD A, direct | A + direct → A | direct: 0x00~0xFF | 2 | 2 |
| ADD A, @Ri | A + @Ri → A | Ri: R0, R1 | 1 | 1 |
| ADD A, data | A + data → A | data: 0x00~0xFF | 2 | 2 |
| ADDC A, Rn | A + Rn + CY → A | Rn: R0~R7 | 1 | 1 |
| ADDC A, direct | A + direct + CY → A | direct: 0x00~0xFF | 2 | 2 |
| SUBB A, Rn | A - Rn - CY → A | Rn: R0~R7 | 1 | 1 |
| SUBB A, direct | A - direct - CY → A | direct: 0x00~0xFF | 2 | 2 |
| INC A | A + 1 → A | 无 | 1 | 1 |
| DEC A | A - 1 → A | 无 | 1 | 1 |
| MUL AB | A × B → A (低字节), B (高字节) | 无 | 1 | 4 |
| DIV AB | A ÷ B → A (商), B (余数) | 无 | 1 | 4 |
四、逻辑运算指令
| 指令助记符 | 功能说明 | 操作数 | 字节数 | 周期数 |
| ANL A, Rn | A ∧ Rn → A | Rn: R0~R7 | 1 | 1 |
| ANL A, direct | A ∧ direct → A | direct: 0x00~0xFF | 2 | 2 |
| ANL A, data | A ∧ data → A | data: 0x00~0xFF | 2 | 2 |
| ANL direct, A | direct ∧ A → direct | direct: 0x00~0xFF | 2 | 2 |
| ANL direct, data | direct ∧ data → direct | direct: 0x00~0xFF | 3 | 3 |
| ORL A, Rn | A ∨ Rn → A | Rn: R0~R7 | 1 | 1 |
| ORL A, direct | A ∨ direct → A | direct: 0x00~0xFF | 2 | 2 |
| ORL A, data | A ∨ data → A | data: 0x00~0xFF | 2 | 2 |
| ORL direct, A | direct ∨ A → direct | direct: 0x00~0xFF | 2 | 2 |
| ORL direct, data | direct ∨ data → direct | direct: 0x00~0xFF | 3 | 3 |
| XRL A, Rn | A ⊕ Rn → A | Rn: R0~R7 | 1 | 1 |
| XRL A, direct | A ⊕ direct → A | direct: 0x00~0xFF | 2 | 2 |
| XRL A, data | A ⊕ data → A | data: 0x00~0xFF | 2 | 2 |
| XRL direct, A | direct ⊕ A → direct | direct: 0x00~0xFF | 2 | 2 |
| XRL direct, data | direct ⊕ data → direct | direct: 0x00~0xFF | 3 | 3 |
五、位操作指令
| 指令助记符 | 功能说明 | 操作数 | 字节数 | 周期数 |
| SETB bit | 设置bit为1 | bit: 位地址 | 2 | 2 |
| CLR bit | 清除bit为0 | bit: 位地址 | 2 | 2 |
| CPL bit | 反转bit | bit: 位地址 | 2 | 2 |
| JBC bit, rel | 如果bit为1则跳转并清除bit | bit: 位地址 | 3 | 2 |
| JB bit, rel | 如果bit为1则跳转 | bit: 位地址 | 3 | 2 |
| JNB bit, rel | 如果bit为0则跳转 | bit: 位地址 | 3 | 2 |
| JBC bit, rel | 如果bit为1则跳转并清除bit | bit: 位地址 | 3 | 2 |
六、控制转移指令
| 指令助记符 | 功能说明 | 操作数 | 字节数 | 周期数 |
| AJMP addr11 | 绝对跳转 | addr11: 11位地址 | 2 | 2 |
| LJMP addr16 | 长跳转 | addr16: 16位地址 | 3 | 2 |
| SJMP rel | 短跳转 | rel: 8位偏移量 | 2 | 2 |
| JMP @A+DPTR | 跳转到A+DPTR地址 | 无 | 1 | 2 |
| ACALL addr11 | 绝对调用子程序 | addr11: 11位地址 | 2 | 2 |
| LCALL addr16 | 长调用子程序 | addr16: 16位地址 | 3 | 2 |
| RET | 子程序返回 | 无 | 1 | 2 |
| RETI | 中断返回 | 无 | 1 | 2 |
| NOP | 空操作 | 无 | 1 | 1 |
七、布尔操作指令
| 指令助记符 | 功能说明 | 操作数 | 字节数 | 周期数 |
| MOV C, bit | 将bit状态送入进位标志C | bit: 位地址 | 2 | 2 |
| MOV bit, C | 将C状态送入bit | bit: 位地址 | 2 | 2 |
| ANL C, bit | C ∧ bit → C | bit: 位地址 | 2 | 2 |
| ANL C, bit | C ∧ data → C | data: 0x00~0xFF | 3 | 2 |
| ORL C, bit | C ∨ bit → C | bit: 位地址 | 2 | 2 |
| ORL C, bit | C ∨ data → C | data: 0x00~0xFF | 3 | 2 |
| CPL C | C取反 | 无 | 1 | 1 |
| JC rel | 如果C=1则跳转 | rel: 8位偏移量 | 2 | 2 |
| JNC rel | 如果C=0则跳转 | rel: 8位偏移量 | 2 | 2 |
结语
51汇编语言虽然功能有限,但在实际应用中依然具有很高的实用价值。熟练掌握这些指令,有助于提高程序的执行效率和代码的可读性。建议初学者通过实验板进行实践,加深对指令的理解与应用。


