51单片机指令集

当你编写完一个程序后,通过软件调试,你可以看到程序的指令集,从指令集你就能知道单片机内部是如何工作的,比如数据存取的寄存器与地址,下面是网上找的一篇指令集,讲的蛮好的。

一、数据传送类指令(7种助记符)
MOV(英文为Move):对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送;
MOVC(Move Code)读取程序存储器数据表格的数据传送;
MOVX (Move External RAM) 对外部RAM的数据传送;
XCH (Exchange) 字节交换;
XCHD (Exchange low-order Digit) 低半字节交换;
PUSH (Push onto Stack) 入栈;
POP  (Pop from Stack) 出栈;

二、算术运算类指令(8种助记符)
ADD(Addition) 加法;
ADDC(Add with Carry) 带进位加法;
SUBB(Subtract with Borrow) 带借位减法;
DA(Decimal Adjust) 十进制调整;
INC(Increment) 加1;
DEC(Decrement) 减1;
MUL(Multiplication、Multiply) 乘法;
DIV(Division、Divide) 除法;

三、逻辑运算类指令(10种助记符)
ANL(AND Logic) 逻辑与;
ORL(OR Logic) 逻辑或;
XRL(Exclusive-OR Logic) 逻辑异或;
CLR(Clear) 清零;
CPL(Complement) 取反;
RL(Rotate left) 循环左移;
RLC(Rotate Left throught the Carry flag) 带进位循环左移;
RR(Rotate Right) 循环右移;
RRC (Rotate Right throught the Carry flag) 带进位循环右移;
SWAP (Swap) 低4位与高4位交换;

四、控制转移类指令(17种助记符)
ACALL(Absolute subroutine Call)子程序绝对调用;
LCALL(Long subroutine Call)子程序长调用;
RET(Return from subroutine)子程序返回;
RETI(Return from Interruption)中断返回;
SJMP(Short Jump)短转移;
AJMP(Absolute Jump)绝对转移;
LJMP(Long Jump)长转移;
CJNE (Compare Jump if Not Equal)比较不相等则转移;
DJNZ (Decrement Jump if Not Zero)减1后不为0则转移;
JZ (Jump if Zero)结果为0则转移;
JNZ (Jump if Not Zero) 结果不为0则转移;
JC (Jump if the Carry flag is set)有进位则转移;
JNC (Jump if Not Carry)无进位则转移;
JB (Jump if the Bit is set)位为1则转移;
JNB (Jump if the Bit is Not set) 位为0则转移;
JBC(Jump if the Bit is set and Clear the bit) 位为1则转移,并清除该位;
NOP (No Operation) 空操作;

五、位操作指令(1种助记符)
CLR 位清零;
SETB(Set Bit) 位 置1 


8种常用伪指令
1.ORG   16位地址 
此指令用在原程序或数据块的开始,指明此语句后面目标程序或数据块存放的起始地址。
2.[标号:] DB 字节数据项表;
将项表中的字节数据存放到从标号开始的连续字节单元中。例如:SEG: DB 88H,100,“7”,“C”
3.[标号:]DW   双字节数据项表;
定义16位地址表,16地址按低位地址存低位字节,高位地址存高位字节。
例如:TAB: DW 1234H,7BH
4.名字 EQU 表达式 或名字=表达式;
用与给一个表达式赋值或给字符串起名字。之后名字可用做程序地址,数据地址或立即数地址使用。名字必须是一字母开头的字母数字串。
例如:COUNT=10 或 SPACE EQU 10H
5.名字 DATA 直接字节地址;
给8位内部RAM单元起个名字,名字必须是一字母开头的字母数字串。同一单元可起多个名字。
例如:ERROR DATA 80H
6.名字 XDATA 直接字节地址;
给8位外部RAM起个名字,名字规定同DATA伪指令。
例如:IO_PORT XDATA 0CF04H
7.名字 BIT 位指令;
给一可位寻址的位单元起个名字,规定同DATA伪指令。
例如:SWT BIT 30H
8.[标号:] END;
指出源程序到此结束,汇编对其后的程序语句不予理睬。源程序只在主程序最后使用一个END。


1.数据传送指令(30条)
MOV A,Rn 寄存器送 E8--EF
MOV A,data 直接字节送A E5
MOV A,@Ri 间接RAM 送A E6--E7
MOV A,#data 立接数送 74
MOV Rn,A 送寄存器 F8--FF
MOV Rn,data 直接数送寄存器 A8--AF
MOV Rn,#data 立即数送寄存器 78--7F
MOV data,A 送直接字节 F5
MOV data,Rn 寄存器送直接字节 88—8F
MOV data,data 直接字节送直接字节 85
MOV data,@Ri 间接 Rn 送直接字节 86;87
MOV data,#data 立即数送直接字节 75
MOV @Ri,A 送间接 Rn F6;F7
MOV @Ri,data 直接字节送间接Rn A6;A7
MOV @Ri,#data 立即数送间接 Rn 76;77
MOV DPTR,#data16 16 位常数送数据指针 90
MOV C,bit 直接位送进位位 A2
MOV bit,C 进位位送直接位 92
MOVC A,@A+DPTR A+DPTR 寻址程序存贮字节送 93
MOVC A,@A+PC A+PC 寻址程序存贮字节送A 83
MOVX A,@Ri 外部数据送A(8 位地址) E2;E3
MOVX A,@DPTR 外部数据送A(16 位地址) E0
MOVX @Ri,A 送外部数据(8 位地址) F2;F3
MOVX @DPTR,A 送外部数据(16 位地址) F0
PUSH data 直接字节进栈道,SP 加1 C0
POP data 直接字节出栈,SP 减1 D0
XCH A,Rn 寄存器与 交换 C8—CF
XCH A,data 直接字节与A 交换 C5
XCH A,@Ri 间接Rn 与A 交换 C6;C7
XCHD A,@Ri 间接Rn 与A 低半字节交换 D6;D7
2.逻辑运算指令(35条)
ANL A,Rn 寄存器与到A 58—5F
ANL A,data 直接字节与到A 55
ANL A,@Ri 间接RAM与到A 56;57
ANL A,#data 立即数与到A 54
ANL data,A A与到直接字节 52
ANL data,#data 立即数与到直接字节 53
ANL C,bit 直接位与到进位位 82
ANL C,/bit 直接位的反码与到进位位 B0
ORL A,Rn 寄存器或到A 48—4F
ORL A,data 直接字节或到A 45
ORL A,@Ri 间接RAM或到A 46;47
ORL A,#data 立即数或到A 44
ORL data,A A或到直接字节 42
ORL data,#data 立即数或到直接字节 43
ORL C,bit 直接位或到进位位 72
ORL C,/bit 直接位的反码或到进位位 A0
XRL A,Rn 寄存器异或到A 68—6F
XRL A,data 直接字节异或到A 65
XRL A,@Ri 间接RAM异或到A 66;67
XRL A,#data 立即数异或到A 64
XRL data,A A异或到直接字节 62
XRL data,#data 立即数异或到直接字节 63
SETB 进位位置 D3
SETB bit 直接位置 D2
CLR A清0 E4
CLR 进位位清 C3
CLR bit 直接位清 C2
CPL A求反码 F4
CPL 进位位取反 B3
CPL bit 直接位取反 B2
RL A循环左移一位 23
RLC 带进位左移一位 33
RR A右移一位 03
RRC 带进位右移一位 13
SWAP 半字节交换 C4
3.算术运算指令(24条)
ADD A,Rn 寄存器加到A 28—2F
ADD A,data 直接字节加到A 25
ADD A,@Ri 间接RAM 加到A 26;27
ADD A,#data 立即数加到A 24
ADDC A,Rn 寄存器带进位加到 38—3F
ADDC A,data 直接字节带进位加到A 35
ADDC A,@Ri 间接RAM 带进位加到A 36;37
ADDC A,#data 立即数带进位加到 34
SUBB A,Rn 从A 中减去寄存器和进位 98—9F
SUBB A,data 从A 中减去直接字节和进位 95
SUBB A,@Ri 从A 中减去间接RAM 和进位 96;97
SUBB A,#data 从A 中减去立即数和进位 94
INC A加1 04
INC Rn 寄存器加 08—0F
INC data 直接字节加1 05
INC @Ri 间接RAM 加1 06;07
INC DPTR 数据指针加1 A3
DEC A减1 14
DEC Rn 寄存器减 18—1F
DEC data 直接字节减1 15
DEC @Ri 间接RAM 减1 16;17
MUL AB A乘B A4
DIV AB A被B除 84
DA A十进制调整 D4
4.转移指令(22条)
AJMP addr 11 绝对转移 *1
LJMP addr 16 长转移 02
SJMP rel 短转移 80
JMP @A+DPTR 相对于DPTR 间接转移 73
JZ rel 若A=0 则转移 60
JNZ rel 若A≠0 则转移 70
JC rel 若C=1 则转移 40
JNC rel 若C≠1 则转移 50
JB bit,rel 若直接位=1 则转移 20
JNB bit,rel 若直接位=0 则转移 30
JBC bit,rel 若直接位=1 则转移且清除 10
CJNE A,data,rel 直接数与 比较,不等转移 B5
CJNE A,#data,rel 立即数与 比较,不等转移 B4
CJNE @Ri,#data,rel 立即数与间接RAM比较,不等转移 B6;B7
CJNE Rn,#data,rel 立即数与寄存器比较不等转移 B8—BF
DJNZ Rn,rel 寄存器减 不为0 转移 D8—DF
DJNZ data,rel 直接字节减1 不为 转移 D5
ACALL addr 11 绝对子程序调用 *1
LCALL addr 16 子程序调用 12
RET 子程序调用返回 22
RETI 中断程序调用返回 32
NOP 空操作 00

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值