【51汇编语言指令大全】在单片机开发中,51系列单片机因其结构简单、功能稳定而被广泛使用。而51汇编语言作为其主要的编程方式之一,对于开发者来说是非常重要的工具。掌握51汇编语言的指令集是编写高效、可靠程序的基础。
本文将对51汇编语言的主要指令进行总结,并以表格形式展示其基本用法和功能,帮助读者快速了解和查阅相关指令。
一、51汇编语言指令分类
51汇编语言指令按功能可分为以下几类:
指令类别 | 功能说明 |
数据传送指令 | 实现寄存器、存储器之间的数据传输 |
算术运算指令 | 完成加减乘除等算术操作 |
逻辑运算指令 | 完成与、或、异或等逻辑操作 |
控制转移指令 | 改变程序执行顺序,如跳转、调用等 |
位操作指令 | 对单个二进制位进行操作 |
堆栈操作指令 | 管理堆栈,用于子程序调用和返回 |
二、常用51汇编指令汇总(表格)
指令助记符 | 操作码 | 功能描述 | 说明 |
MOV A, data | E5H | 将立即数送入累加器A | 例如:MOV A, 0FFH |
MOV A, Rn | E8H~EFH | 将寄存器R0~R7的内容送入A | 例如:MOV A, R1 |
MOV A, @Ri | E6H~E7H | 将R0或R1所指向的地址内容送入A | 例如:MOV A, @R0 |
MOV A, direct | E5H | 将直接地址的内容送入A | 例如:MOV A, 30H |
MOV Rn, A | F8H~FFH | 将A的内容送入寄存器R0~R7 | 例如:MOV R2, A |
MOV Rn, data | 78H~7FH | 将立即数送入寄存器R0~R7 | 例如:MOV R3, 0AH |
MOV direct, A | F5H | 将A的内容送入直接地址 | 例如:MOV 40H, A |
MOV direct, Rn | F8H~FFH | 将寄存器R0~R7内容送入直接地址 | 例如:MOV 50H, R4 |
MOV direct, direct | 85H | 将一个直接地址内容送入另一个直接地址 | 例如:MOV 30H, 40H |
MOV direct, @Ri | E4H~E5H | 将R0/R1所指地址内容送入直接地址 | 例如:MOV 60H, @R1 |
MOV @Ri, A | F6H~F7H | 将A内容送入R0/R1所指地址 | 例如:MOV @R0, A |
MOV @Ri, direct | C5H | 将直接地址内容送入R0/R1所指地址 | 例如:MOV @R0, 70H |
MOVX A, @DPTR | E0H | 将外部数据存储器DPTR所指地址内容送入A | 例如:MOVX A, @DPTR |
MOVX @DPTR, A | F0H | 将A内容送入外部数据存储器DPTR所指地址 | 例如:MOVX @DPTR, A |
MOVX A, @Ri | E4H~E5H | 将外部数据存储器R0/R1所指地址内容送入A | 例如:MOVX A, @R0 |
MOVX @Ri, A | F4H~F5H | 将A内容送入外部数据存储器R0/R1所指地址 | 例如:MOVX @R1, A |
ADD A, data | 04H | A + 立即数,结果存入A | 例如:ADD A, 05H |
ADD A, Rn | 08H~0FH | A + R0~R7,结果存入A | 例如:ADD A, R3 |
ADD A, direct | 05H | A + 直接地址,结果存入A | 例如:ADD A, 20H |
ADDC A, data | 14H | A + 立即数 + 进位标志,结果存入A | 例如:ADDC A, 0AH |
ADDC A, Rn | 18H~1FH | A + R0~R7 + 进位标志,结果存入A | 例如:ADDC A, R2 |
ADDC A, direct | 15H | A + 直接地址 + 进位标志,结果存入A | 例如:ADDC A, 30H |
SUBB A, data | 94H | A - 立即数 - 进位标志,结果存入A | 例如:SUBB A, 05H |
SUBB A, Rn | 98H~9FH | A - R0~R7 - 进位标志,结果存入A | 例如:SUBB A, R1 |
SUBB A, direct | 95H | A - 直接地址 - 进位标志,结果存入A | 例如:SUBB A, 40H |
ANL A, data | 55H | A AND 立即数,结果存入A | 例如:ANL A, 0F0H |
ANL A, Rn | 58H~5FH | A AND R0~R7,结果存入A | 例如:ANL A, R3 |
ANL A, direct | 55H | A AND 直接地址,结果存入A | 例如:ANL A, 20H |
ANL direct, A | 55H | 直接地址 AND A,结果存入直接地址 | 例如:ANL 30H, A |
ANL direct, data | 55H | 直接地址 AND 立即数,结果存入直接地址 | 例如:ANL 40H, 0FFH |
ORL A, data | 45H | A OR 立即数,结果存入A | 例如:ORL A, 0F0H |
ORL A, Rn | 48H~4FH | A OR R0~R7,结果存入A | 例如:ORL A, R2 |
ORL A, direct | 45H | A OR 直接地址,结果存入A | 例如:ORL A, 30H |
ORL direct, A | 45H | 直接地址 OR A,结果存入直接地址 | 例如:ORL 20H, A |
ORL direct, data | 45H | 直接地址 OR 立即数,结果存入直接地址 | 例如:ORL 50H, 0AAH |
XRL A, data | 65H | A XOR 立即数,结果存入A | 例如:XRL A, 0FFH |
XRL A, Rn | 68H~6FH | A XOR R0~R7,结果存入A | 例如:XRL A, R1 |
XRL A, direct | 65H | A XOR 直接地址,结果存入A | 例如:XRL A, 20H |
XRL direct, A | 65H | 直接地址 XOR A,结果存入直接地址 | 例如:XRL 30H, A |
XRL direct, data | 65H | 直接地址 XOR 立即数,结果存入直接地址 | 例如:XRL 40H, 0AAH |
CPL A | 2FH | 反转A中的每一位 | 例如:CPL A |
CPL bit | C2H | 反转指定位 | 例如:CPL P1^0 |
CLR A | 2FH | 清零A | 例如:CLR A |
CLR bit | C2H | 清零指定位 | 例如:CLR P1^1 |
SETB bit | D2H | 置1指定位 | 例如:SETB P1^2 |
JZ rel | 60H | 若A为0,则跳转 | 例如:JZ 05H |
JNZ rel | 68H | 若A不为0,则跳转 | 例如:JNZ 03H |
JC rel | 50H | 若进位标志C为1,则跳转 | 例如:JC 04H |
JNC rel | 58H | 若进位标志C为0,则跳转 | 例如:JNC 02H |
JB bit, rel | 70H | 若指定位为1,则跳转 | 例如:JB P1^0, 03H |
JNB bit, rel | 78H | 若指定位为0,则跳转 | 例如:JNB P1^1, 02H |
JBC bit, rel | 70H | 若指定位为1,则跳转并清零该位 | 例如:JBC P1^2, 05H |
ACALL addr11 | 11H | 绝对调用子程序 | 例如:ACALL 0000H |
LCALL addr16 | 12H | 长调用子程序 | 例如:LCALL 0000H |
RET | 22H | 子程序返回 | 例如:RET |
RETI | 32H | 中断返回 | 例如:RETI |
NOP | 00H | 空操作 | 例如:NOP |
三、总结
51汇编语言指令种类繁多,但大部分指令都围绕着数据处理、逻辑运算、控制流程等核心功能展开。掌握这些指令不仅能提高程序的效率,还能帮助开发者更好地理解单片机的工作原理。
建议初学者从简单的数据传送和逻辑运算指令入手,逐步深入学习控制转移和中断相关的指令。同时,结合实际项目进行练习,能更有效地提升编程能力。
通过本文提供的表格,可以快速查找和使用51汇编语言的常用指令,是编程过程中的重要参考资料。