80C51指令表
80C51单片机指令集
80C51指令系统数据传送指令助记符指令功能字节数周期数对标志位影响P OV AC CYMOV A , #data A←DATA 8位立即数送A 2 1 √×××MOV direct ,#data data←Direct 8立即数送直接寻址单元 3 2 ××××MOV @Ri ,#data (Ri)←Data 8位立即数送Ri间接寻址单元 2 1 ××××MOV Rn ,#data Rn←Data 8位立即数送寄存器 2 1 ××××MOV DPTR ,#data16 DPTR←Data16 16位立即数送DPTR高8位送DPH,低8位DPL3 2 ××××MOV direct2,direct1 Direct2←(direct1) 直接寻址单元送直接寻址单元 3 2 ××××MOV direct ,@Ri direct←((Ri)) 间接寻址数据送直接单元 2 2 ××××MOV direct ,Rn direct←(Rn) 寄存器内容送直接寻址单元 2 2 ××××MOV @Ri ,direct (Ri)←(direct) 直接寻址数据送Ri间接寻址单元 2 2 ××××MOV Rn ,direct Rn←(direct) 直接寻址数据送寄存器 2 2 ××××MOV A ,direct A←(direct) 直接寻址数据送累加器 2 1 ××××MOV A ,@Ri A←((Ri)) Ri间接寻址数据送累加器 1 1 ××××MOV A ,Rn A←(Rn) 寄存器类容送累加器 1 1 ××××MOV direct ,A direct←(A) 累加器内容送直接寻址单元 2 1 ××××MOV @Ri ,A (Ri)←(A) 累加器内容送Ri间接寻址单元 1 1 ××××MOV Rn ,A Rn←(A) 累加器内容送寄存器 1 1 ××××MOVX A ,@Ri A←((Ri)) Ri间接寻址的外部RAM单元读 1 2 ××××MOVX @Ri ,A (Ri)←(A) Ri间接寻址的外部RAM单元写 1 2 ××××MOVX A ,@DPTR A←((DPTR)) DPTR间接寻址的外部RAM单元读 1 2 ××××MOVX @DPTR ,A (DPTR)←(A) DPTR间接寻址的外部RAM单元写 1 2 ××××X代表外部,外部数据存储器读/写只能通过累加器A使用间接寻址方式进行,间接寄存器可是Ri或DPTR MOVC A ,@A+DPTR A←((A)+(DPTR)) 程序存储器读 1 2 √×××MOVC A ,@A+PC A←((A)+(PC)) 程序存储器读 1 2 √×××程序存储器只能读,不能写,包括内部存储器及外部存储器,通过累加器A进行XCH A ,Rn (A)⇔(Rn) 寄存器寻址字节交换 1 1 √×××XCH A ,direct (direct) ⇔(A) 直接寻址字节交换 2 1 √×××XCH A ,@Ri ((Ri)) ⇔(A) Ri间接寻址字节交换 1 1 √×××XCHD A ,@Ri ((Ri))3~0⇔(A)3~0 Ri间接寻址低半字节交换 1 1 √×××SWAP A (A)3~0⇔(A)7~4 累加器内容高低半字节交换 1 1 ××××PUSH direct SP←(SP)+1 , (SP)←(direct) 进栈 2 2 ××××POP direct direct←((SP)) , SP←(SP)-1 出栈 2 2 ××××进出栈只能写为“PUSH ACC”和“POP ACC”,不能用“A”算术运算类指令算术运算指令都按8位二进制无符号数执行助记符指令功能字节数周期数对标志位影响P OV AC CYADD A ,#data A←(A)+data 立即数加法 2 1 √√√√ADD A ,direct A←(A)+(direct) 直接寻址加法 2 1 √√√√ADD A ,@Ri A←(A)+((Ri)) 间接寻址加法 1 1 √√√√ADD A ,Rn A←(A)+(Rn) 寄存器寻址加法 1 1 √√√√ADDC A ,#data A←(A)+data+(CY) 立即数带进位加法 1 1 √√√√ADDC A ,direct A←(A)+(direct)+(CY) 直接寻址带进位加法 2 1 √√√√ADDC A ,@Ri A←((Ri))+(A)+(CY) 间接寻址带进位加法 1 1 √√√√ADDC A ,Rn A←(Rn)+(A)+(CY) 寄存器寻址带进位加法 1 1 √√√√SUBB A ,#data A←(A)-data-(CY) 立即数带借位减法 2 1 √√√√SUBB A ,direct A←(A)-(direct)-(CY) 直接寻址带借位减法 2 1 √√√√SUBB A ,@Ri A←(A)-((Ri))-(CY) 间接寻址带借位减法 1 1 √√√√SUBB A ,Rn A←(A)-(Rn)-(CY) 寄存器寻址带借位减法 1 1 √√√√INC A A←(A)+1 累加器加1 1 1 √√××INC direct direct←(direct)+1 直接寻址单元加1 2 1 ××××INC @Ri (Ri) ←((Ri))+1 间接寻址单元加1 1 1 ××××INC Rn Rn←(Rn)+1 寄存器加1 1 1 ××××INC DPTR DPTR←(DPTR)+1 16位数据指针加1 1 2 ××××DEC A A←(A)-1 累加器减1 1 1 √×××DEC direct direct←(direct)-1 直接寻址单元减1 2 1 ××××DEC @Ri (Ri) ←((Ri))-1 间接寻址单元减1 1 1 ××××DEC Rn Rn←(Rn)-1 寄存器减1 1 1 ××××MUL AB AB←(A)*(B) 乘法 1 4 √√×√乘法:CY总是被清0,OV与乘积有关。
80C51控制转移类指令及位操作指令101101
磨砺当如百炼之金,急就者,非邃养;
例:从P1.7引脚输出5个方波
MOV R2,#11
;5个方波,10个状态
LOP:
CPL P1.7
;P1.7状态变反
LCALL Delay
DJNZ R2 ,LOP
HERE:SJMP HERE
Delay:
所调用的子程序的首地址可以在64 KB范围内。
磨砺当如百炼之金,急就者,非邃养;
例:设(SP)=60H,(PC)=0123H,子程序 SUBRTN的首地址为3456H。 执行指令为 LCALL SUBRTN
磨砺当如百炼之金,急就者,非邃养;
3.5.5 返回指令
例:设(SP)=62H,RAM中的(62H)=0lH,(61H)=26H。 子程序SUBRTN的首地址为3456H。 执行指令:LCALL SUBRTN 执行结果:(PC)+3=0123H+3=0126H→(PC)。
执行指令:
MOV
DPTR,#800H
MOV
R0,#20H
MOV
R7,#10H
AGAIN:MOV A,@R0
MOVX @DPTR,A
INC R0
INC DPTR
DJNZ R7,AGAIN
?:请将以上循环控制改用CJNE指令来实现 ?:请将以上循环控制改用JZ指令来实现
磨砺当如百炼之金,急就者,非邃养;
无条件转移指令
指令 SJMP rel AJMP addr11 LJMP addrl6 JMP @A+DPTR 这类指令的功能是程序无条件地转移到各自指定 的目标地址去执行,不同的指令形成的目标地址不同。
磨砺当如百炼之金,急就者,非邃养;
3_80C51单片机指令系统
③特殊功能寄存器符号加位的表示方法。例如: MOV C,ACC.6 该指令是将累加器A位六的值赋给位累加器C。 ④位名称表示方法,特殊功能寄存器中的一些寻址 位是有名称的。例如: MOV C,F0 该指令等同于MOV C,PSW.5,因为PSW寄存器位 5为F0标志位。 ⑤利用伪指令定义位地址。有关伪指令的内容参见 4.1节。 位寻址方式是80C51单片机的特有功能,丰富的位操 作指令为逻辑运算、逻辑控制以及各种状态标志的设置提 供了方便。
相关寄存器
寻址空间 程序存储器 片内RAM低128B和SFR
R0~R7,A,B,DPTR, CY @R0,@R1,SP @R0,@R1,@DPTR @A+DPTR,@A+PC PC+rel CY,SFR 片内RAM 片外RAM 程序存储器 程序存储器 片内RAM的位寻址区 可以位寻址的特殊功能寄 存器
③注意直接地址和位地址之间的区别。例如: MOV A,30H MOV C,30H 第一条指令是将直接地址30H中的内容(8位二进制 数)送给累加器A;第二条指令是将位地址30H中的内容 (1位二进制数)送给进(借)位标志位CY。 ④直接寻址是访问特殊功能寄存器的惟一方法。
(3)寄存器寻址 此处的寄存器指R0~R7、累加器A、通用寄存器B、 数据指针寄存器DPTR和位累加位C(即进位标志位C)。 寄存器寻址是指在指令中将指定寄存器的内容作为 操作数。因此指定了寄存器就能得到了操作数。例如: MOV A,R0 此指令的功能是将R0中的内容送入累加器A中(如图 3-3所示),即 (A)←(R0) 如通用寄存器R0中的内容为80H,则执行该指令后, 累加器A中的内容为80H。
3 80C51单片机指令系统 单片机指令系统
3.1 概述
指令是计算机能够直接识别和执行的命令,一台计 算机所能执行的全部指令的集合称为指令系统。80C51系 列单片机完全继承了MCS-51的指令系统,共有111条指 令。
80c51指令定义详解
附录C 指令定义详解①符号说明符 号说 明←表示数据传送方向()表示单元的内容(())表示间接寻址的内容rrr8个工作寄存器之一;000=R0,001=R1等dddddddd数据位aaaaaaaa地址位bbbbbbbb表示某个位的地址i通过R0 (i =0) 或R1 (i =1)间接寻址eeeeeeee 8位的相对地址偏移量ACALL addrll功能:绝对调用。
说明:ACALL 指令实现无条件调用位于addr11参数所表示地址的子例程。
在执行该指令时,首先将PC 的值增加2,即使得PC 指向ACALL 的下一条指令,然后把16位PC 的低8位和高8位依次压入栈,同时把栈指针两次加1。
然后,把当前PC 值的高5位、ACALL 指令第1字节的7~5位和第2字节组合起来,得到一个16 位目的地址,该地址即为即将调用的子例程的入口地址。
要求该子例程的起始地址必须与紧随ACALL 之后的指令处于同1个2KB 的程序存储页中。
ACALL 指令在执行时不会改变各个标志位。
示例:SP 的初始值为07H ,标号SUBRTN 位于程序存储器的0345H 地址处,如果执行位于地址0123H 处的指令:ACALL SUBRTN那么SP 变为09H ,内部RAM 地址08H 和09H 单元的内容分别为25H 和01H ,PC 值变为0345H 。
指令长度(字节数):2。
指令执行周期:2。
指令二进制编码:aaa10001 aaaaaaaa注意:aaa 是11位目标地址addr11的A10~A8位,aaaaaaaa 是addr11的A7~A0位。
385指令的操作:(PC) ←(PC)+2(SP) ←(SP)+1((SP)) ←(PC7-PC0)(SP) ←(SP)+1((SP)) ←(PC15-PC8)(PC10-PC0) ←页面地址ADD A ,<src-byte>功能:加法。
说明:ADD 指令可用于完成把src-byte 所表示的源操作数和累加器A 的当前值相加。
第3章 80C51系列单片机指令系统
变址寻址示图
内部ROM 内部RAM
3AH 0046H 65H
操作数
寄存器
目的地
3AH 0046H
A
DPTR PC
基址寄存器 0012H
变址寄存器 34H
MOVC A, @A+DPTR
• 6.位寻址方式
•
80C51具有位处理功能,可以对数据位进行操作。 位寻址指令中应直接使用位地址,它属于直接寻址方式, 因此与直接寻址执行过程基本相同,但参与操作的数据 是1位,而不是8位。
指令一般由两部分组成,即操作码(表示指令的操作功能)和 操作数(参加操作的数据或数据地址)。 •由于计算机只能识别二进制数,所以计算机的指令均由二进制 代码组成。为了阅读和书写方便,常把它写成十六进制形式, 通常称这样的指令为机器指令。
• 机器语言级指令格式: • 1、单字节指令:对于单字节指令有两种情况:一种是 操作码、操作数均包含在这一个字节之内;另一种情况 是只有操作码无操作数;格式为: • 操作码 • 如:“MOV A,R0”所对应的机器语言指令为“E8H”。 • 2、双字节指令:对于双字节指令,均为一个字节是操 作码,一个字节是操作数;格式为: • 操作码 操作数 • 如:“MOV A,20H”所对应的机器语言指令为“E520H”。 • 3、三字节指令:对于三字节指令,一般是一个字节为 操作码,二个字节为操作数;格式为: • 操作码 第一操作数 第二操作数 • 如:“MOV 20H,#46H”所对应的机器语言指令为 “E52046H”。()
• 为了便于记忆和使用,制造厂家对指令系统的每一条指令都 给出了助记符。助记符是根据机器指令不同的功能和操作对 象来描述指令的符号。由于助记符是用英文缩写来描述指令 的特征,因此它不但便于记忆,也便于理解和分类。这种用 助记符形式来表示的机器指令称为汇编语言指令。计算机的 指令一般用汇编语言指令来表示。 • 80C51汇编语言指令格式如下: • [标号:] 操作码 [目的操作数]
80c51汇编语言指令
80c51汇编语言指令80C51汇编语言是一种常用的低级程序设计语言,广泛应用于嵌入式系统中。
它是基于Intel 8051系列单片机的指令集架构,具有高效、灵活、可靠的特点。
本文将介绍80C51汇编语言的一些常用指令。
一、MOV指令MOV指令是80C51汇编语言中最基本、最常用的指令之一,用于将数据从一个寄存器或内存位置复制到另一个寄存器或内存位置。
例如,MOV A, #25H表示将立即数25H复制到A寄存器中。
二、ADD指令ADD指令用于执行两个操作数的相加运算,并将结果存储在目标操作数中。
例如,ADD A, R0表示将A寄存器和R0寄存器中的数据相加,并将结果存储在A寄存器中。
三、SUBB指令SUBB指令用于执行两个操作数的减法运算,并将结果存储在目标操作数中。
与ADD指令不同的是,SUBB指令会考虑进位位的值。
例如,SUBB A, R1表示将A寄存器中的数据减去R1寄存器中的数据,并将结果存储在A寄存器中。
四、MUL指令MUL指令用于执行两个操作数的乘法运算,并将结果存储在累加器A和可选的乘法寄存器B中。
例如,MUL AB表示将累加器A和B 中的数据相乘,并将结果存储在A和B中。
五、DIV指令DIV指令用于执行两个操作数的除法运算,并将结果存储在累加器A和可选的余数寄存器B中。
例如,DIV AB表示将累加器A和B 中的数据相除,并将商存储在A中,余数存储在B中。
六、JC、JNC指令JC指令用于在条件跳转时执行跳转操作,如果进位标志位(C)为1,则执行跳转。
JNC指令则相反,只有当进位标志位为0时才执行跳转。
七、JZ、JNZ指令JZ指令用于在条件跳转时执行跳转操作,如果零标志位(Z)为1,则执行跳转。
JNZ指令则相反,只有当零标志位为0时才执行跳转。
八、CJNE指令CJNE指令用于在条件跳转时执行跳转操作,它比较两个操作数的值,并根据比较结果来确定是否执行跳转。
如果两个操作数相等,则不执行跳转;如果不相等,则执行跳转。
80C51单片机指令系统
80C51单片机指令汇总程序应用举例例1:MOV A, #60H将立即数60H(源操作数)送入累加器A(目的操作数)中;这是一条双字节指令,机器码为“74H 60H”,源操作数的寻址方式为立即寻址。
例2:MOV DPTR, #1808H将16位立即数1808H送入数据指针DPTR中;这是一条三字节指令,机器码是“90H 18H 08H”。
源操作数的寻址方式也使用立即寻址。
例3:MOV A, 40H将片内RAM40H单元中的内容送入累加器A;源操作数为直接寻址,40H为直接地址。
这是一条双字节指令,机器码是“E5H 40H”。
例4:MOV A, 0F0HMOV A, B以上两条指令功能完全相同,都是将寄存器B的内容送到累加器A中,前一条指令中第二个操作数采用B寄存器的单元地址表示;后一条指令中是直接用B寄存器的名称来表示。
但汇编后的机器码是完全一样的,由两个字节组成:“E5H F0H”。
例5:INC R2将当前工作寄存器R2的内容加1;这是一条单字节指令,机器码是“0AH”,指令中的操作数使用寄存器寻址方式。
该指令的机器码表示为0000 1rrr,其中的rrr与工作寄存器的编号有关,如本例中用到了R2,则rrr=010,指令执行时,会根据当前PSW寄存器中RS1、RS0的状态确定当前工作寄存器区,同时再根据机器码中rrr的值,确定所要访问的是哪一个工作寄存器,最后找到这个工作寄存器所在单元,将其中的内容加1。
例6:MOV A, @R0 ; A←((R0))该指令为单字节指令,机器码为“E6H”,指令中源操作数为间接寻址。
假设R0中的内容是3AH,而3AH单元的内容为37H,则指令的功能是,以R0寄存器的内容3AH为单元地址,把该单元中的内容37H送累加器A。
例7:设(32H)=10H,执行指令:MOV R0, #32HMOV A, @R0执行结果是:(R0)=32H,(A)=10H,(32H)=10H。
微机原理 单片机 第3章 80C51的指令系统
(2)指令编码字节少。单字节指令有49 条,双字节指令有45条,三字节指令仅 有17条。 (3)位操作指令丰富,这使得80C51单 片机的控制功能方便灵活。
<
>
返回
三、指令编码格式
[标号]: 操作码 [目的操作数] [,源操作数] [;注释]
标号:表示指令的符号地址,可作为转移的目 标地址。 操作码:用来规定该指令要执行的操作性质, 如MOV,ADD,ORL,LJMP等,操作码通常可用1个 字节表示。 操作数:表示在执行过程中所完成的操作对象, 根据指令功能,可有0、1、2、3个操作数,用12个字节表示。 注释:方便用户阅读。
< > 返回
二、指令分类
80C51单片机系统共有111条指令,按指令 功能分为: ♦数据传送(28条) ♦算术运算(24条) ♦逻辑运算(25条) ♦控制转移(17条) ♦位操作指令(17条) 其指令系统的特点是: (1)执行时间短。单机器周期指令有64条,双 机器周期指令有45条,而四机器周期指令仅有 乘、除法2条。当主频为12MHz时,典型指令执 行时间为1us。
+5V C3 K R1 RST
89C51
相应程序:MOV P1,#00H;灯亮
ACALL delay ;延时 MOV P1,#01H;灯灭 ACALL delay
学习指导和要求
• 理解和掌握指令的 三种编码格式; • 熟练掌握七种寻址 方式; • 熟记各种类型的指 令格式及功能,并 能编写简单程序。
80C51的机器指令按编码的字节数可分为 如下三种指令编码格式:
1、单字节指令(49条)
7 0
opcode 7 opcode 3 2 reg 0 0 0 0 0 1 1 1 1
第3章 80C51系列单片机指令系统
一、数据传送类指令
⒈ 内RAM数据传送指令 (15条)
⒉ 16位数据传送指令
⒊ 外RAM传送指令.
(2条)
(4条)
⒋ 读ROM指令
⒌ 堆栈操作指令
(2条)
(2条)
⒍ 交换指令
(5条)
36
⒍ 交换指令(5条) 注意:必须以A为操作数!
⑴ 字节交换指令 ① XCH ② XCH ③ XCH XCHD A,Rn A,@Ri ; A←→Rn,n=0~7 ; A←→(Ri),i=0、1
MOV
A,R0
;将R0中的数据传送至A中
9
⒋ 寄存器间接寻址
间接寻址是根据操作数地址的地址寻找操作数。
R0、R1和DPTR可以作为间接寻址寄存器。
间接寻址用间址符“@”作为前缀。 【例】
MOV MOVX
A,@R0
;将以R0中内容为地址的存储 单元中的数据传送至A中
A,@DPTR;将外RAM DPTR所指存储单元
18
• MOV指令在片内RAM的允许操作图 • 不允许的操作有: • @Ri → @Ri Rn → Rn @Ri → Rn
19
【例】 (70H)=60 (60H)=20H P1=0B7H
• • • • • • • MOV R0,#70H MOV A, @R0 MOV R1,A MOV A,@R1 MOV @R0,P1 结果: (70H)= R1=
① MOV ② MOV ③ MOV Rn,A ;A→Rn,n=0~7
Rn,direct;(direct)→Rn,n=0~7 Rn,#data ;data→Rn,n=0~7
15
⑶ 以直接地址为目的字节的传送指令(5条)
① MOV ② MOV ③ MOV ④ MOV direct,A direct,Rn direct,@Ri ;A→(direct) ;Rn→(direct),n=0~7 ;(Ri)→(direct),i=0、1
80C51指令代码
1.数据传送指令助记符说明字节周期代码MOV A,Rn 寄存器送A 1 1 E8--EFMOV A,data 直接字节送A 2 1 E5MOV A,@Ri 间接RAM 送A 1 1 E6--E7MOV A,#data 立接数送A 2 1 74MOV Rn,A A 送寄存器 1 1 F8--FFMOV Rn,data 直接数送寄存器 2 2 A8--AFMOV Rn,#data 立即数送寄存器 2 1 78--7FMOV data,A A 送直接字节 2 1 F5MOV data,Rn 寄存器送直接字节 2 1 88—8FMOV data,data 直接字节送直接字节 3 2 85MOV data,@Ri 间接Rn 送直接字节 2 2 86;87MOV data,#data 立即数送直接字节 3 2 75MOV @Ri,A A 送间接Rn 1 2 F6;F7MOV @Ri,data 直接字节送间接Rn 1 1 A6;A7MOV @Ri,#data 立即数送间接Rn 2 2 76;77MOV DPTR,#data16 16 位常数送数据指针 3 1 90MOV C,bit 直接位送进位位 2 1 A2MOV bit,C 进位位送直接位 2 2 92MOVC A,@A+DPTR A+DPTR 寻址程序存贮字节送A 3 2 93 MOVC A,@A+PC A+PC 寻址程序存贮字节送A 1 2 83MOVX A,@Ri 外部数据送A(8 位地址) 1 2 E2;E3MOVX A,@DPTR 外部数据送A(16 位地址) 1 2 E0MOVX @Ri,A A 送外部数据(8 位地址) 1 2 F2;F3MOVX @DPTR,A A 送外部数据(16 位地址) 1 2 F0PUSH data 直接字节进栈道,SP 加1 2 2 C0POP data 直接字节出栈,SP 减1 2 2 D0XCH A,Rn 寄存器与A 交换 1 1 C8—CFXCH A,data 直接字节与A 交换 2 1 C5XCH A,@Ri 间接Rn 与A 交换 1 1 C6;C7XCHD A,@Ri 间接Rn 与A 低半字节交换 1 1 D6;D7 2.逻辑运算指令助记符说明字节周期代码ANL A,Rn 寄存器与到A 1 1 58—5FANL A,data 直接字节与到A 2 1 55ANL A,@Ri 间接RAM与到A 1 1 56;57ANL A,#data 立即数与到A 2 1 54ANL data,A A与到直接字节 2 1 52ANL data,#data 立即数与到直接字节 3 2 53ANL C,bit 直接位与到进位位 2 2 82ANL C,/bit 直接位的反码与到进位位 2 2 B0ORL A,Rn 寄存器或到A 1 1 48—4FORL A,data 直接字节或到A 2 1 45ORL A,@Ri 间接RAM或到A 1 1 46;47ORL A,#data 立即数或到A 2 1 44ORL data,A A或到直接字节 2 1 42ORL data,#data 立即数或到直接字节 3 2 43ORL C,bit 直接位或到进位位 2 2 72ORL C,/bit 直接位的反码或到进位位 2 2 A0XRL A,Rn 寄存器异或到A 1 1 68—6FXRL A,data 直接字节异或到A 2 1 65XRL A,@Ri 间接RAM异或到A 1 1 66;67XRL A,#data 立即数异或到A 2 1 64XRL data,A A异或到直接字节 2 1 62XRL data,#data 立即数异或到直接字节 3 2 63SETB C 进位位置1 1 1 D3SETB bit 直接位置1 2 1 D2CLR A A清0 1 1 E4CLR C 进位位清0 1 1 C3CLR bit 直接位清0 2 1 C2CPL A A求反码 1 1 F4CPL C 进位位取反 1 1 B3CPL bit 直接位取反 2 1 B2RL A A循环左移一位 1 1 23RLC A A 带进位左移一位 1 1 33 RR A A右移一位 1 1 03 RRC A A 带进位右移一位 1 1 13SWAP A A 半字节交换 1 1 C43.算术运算指令助记符说明字节周期代码ADD A,Rn 寄存器加到A 1 1 28—2FADD A,data 直接字节加到A 2 1 25ADD A,@Ri 间接RAM 加到A 1 1 26;27ADD A,#data 立即数加到A 2 1 24ADDC A,Rn 寄存器带进位加到A 1 1 38—3FADDC A,data 直接字节带进位加到A 2 1 35ADDC A,@Ri 间接RAM 带进位加到A 1 1 36;37ADDC A,#data 立即数带进位加到A 2 1 34SUBB A,Rn 从A 中减去寄存器和进位 1 1 98—9FSUBB A,data 从A 中减去直接字节和进位 2 1 95SUBB A,@Ri 从A 中减去间接RAM 和进位 1 1 96;97 SUBB A,#data 从A 中减去立即数和进位 2 1 94INC A A加1 1 1 04INC Rn 寄存器加1 1 1 08—0FINC data 直接字节加1 2 1 05INC @Ri 间接RAM 加1 1 1 06;07INC DPTR 数据指针加1 1 2 A3DEC A A减1 1 1 14DEC Rn 寄存器减1 1 1 18—1FDEC data 直接字节减1 2 1 15DEC @Ri 间接RAM 减1 1 1 16;17MUL AB A乘B 1 4 A4DIV AB A被B除 1 4 84DA A A十进制调整 1 1 D43.转移指令助记符说明字节周期代码AJMP addr 11 绝对转移 2 2 *1LJMP addr 16 长转移 3 2 02SJMP rel 短转移 2 2 80 JMP @A+DPTR 相对于DPTR 间接转移 1 2 73JZ rel 若A=0 则转移 2 2 60JNZ rel 若A≠0 则转移 2 2 70JC rel 若C=1 则转移 2 2 40JNC rel 若C≠1 则转移 2 2 50JB bit,rel 若直接位=1 则转移 3 2 20JNB bit,rel 若直接位=0 则转移 3 2 30JBC bit,rel 若直接位=1 则转移且清除 3 2 10CJNE A,data,rel 直接数与A 比较,不等转移 3 2 B5CJNE A,#data,rel 立即数与A 比较,不等转移 3 2 B4CJNE @Ri,#data,rel 立即数与间接RAM 比较,不等转移3 2 B6;B7CJNE Rn,#data,rel 立即数与寄存器比较不等转移 3 2 B8—BFDJNZ Rn,rel 寄存器减1 不为0 转移 2 2 D8—DFDJNZ data,rel 直接字节减1 不为0 转移 3 2 D5ACALL addr 11 绝对子程序调用 2 2 *1LCALL addr 16 子程序调用 3 2 12RET 子程序调用返回 1 2 22RETI 中断程序调用返回 1 2 32NOP 空操作 1 1 00按字母排列1.数据传送指令助记符说明字节周期代码ACALL addr 11 绝对子程序调用 2 2 *1ADD A,Rn 寄存器加到A 1 1 28—2FADD A,data 直接字节加到A 2 1 25ADD A,@Ri 间接RAM 加到A 1 1 26;27ADD A,#data 立即数加到A 2 1 24ADDC A,Rn 寄存器带进位加到A 1 1 38—3FADDC A,data 直接字节带进位加到A 2 1 35ADDC A,@Ri 间接RAM 带进位加到A 1 1 36;37ADDC A,#data 立即数带进位加到A 2 1 34AJMP addr 11 绝对转移 2 2 *1ANL A,Rn 寄存器与到A 1 1 58—5FANL A,data 直接字节与到A 2 1 55 ANL A,@Ri 间接RAM与到A 1 1 56;57 ANL A,#data 立即数与到A 2 1 54ANL data,A A与到直接字节 2 1 52ANL data,#data 立即数与到直接字节 3 2 53ANL C,bit 直接位与到进位位 2 2 82ANL C,/bit 直接位的反码与到进位位 2 2 B0CJNE A,data,rel 直接数与A 比较,不等转移 3 2 B5CJNE A,#data,rel 立即数与A 比较,不等转移 3 2 B4CJNE @Ri,#data,rel 立即数与间接RAM 比较,不等转移3 2 B6;B7 CJNE Rn,#data,rel 立即数与寄存器比较不等转移 3 2 B8—BFCLR A A清0 1 1 E4CLR C 进位位清0 1 1 C3CLR bit 直接位清0 2 1 C2CPL A A求反码 1 1 F4CPL C 进位位取反 1 1 B3CPL bit 直接位取反 2 1 B2DA A A十进制调整 1 1 D4DEC A A减1 1 1 14DEC Rn 寄存器减1 1 1 18—1FDEC data 直接字节减1 2 1 15DEC @Ri 间接RAM 减1 1 1 16;17DIV AB A被B除 1 4 84DJNZ Rn,rel 寄存器减1 不为0 转移 2 2 D8—DFDJNZ data,rel 直接字节减1 不为0 转移 3 2 D5INC A A加1 1 1 04INC Rn 寄存器加1 1 1 08—0FINC data 直接字节加1 2 1 05INC @Ri 间接RAM 加1 1 1 06;07INC DPTR 数据指针加1 1 2 A3JB bit,rel 若直接位=1 则转移 3 2 20JBC bit,rel 若直接位=1 则转移且清除 3 2 10JC rel 若C=1 则转移 2 2 40JMP @A+DPTR 相对于DPTR 间接转移 1 2 73JNB bit,rel 若直接位=0 则转移 3 2 30 JNC rel 若C≠1 则转移 2 2 50 JNZ rel 若A≠0 则转移 2 2 70JZ rel 若A=0 则转移 2 2 60LCALL addr 16 子程序调用 3 2 12LJMP addr 16 长转移 3 2 02MOV A,Rn 寄存器送A 1 1 E8--EFMOV A,data 直接字节送A 2 1 E5MOV A,@Ri 间接RAM 送A 1 1 E6--E7MOV A,#data 立接数送A 2 1 74MOV Rn,A A 送寄存器 1 1 F8--FFMOV Rn,data 直接数送寄存器 2 2 A8--AFMOV Rn,#data 立即数送寄存器 2 1 78--7FMOV data,A A 送直接字节 2 1 F5MOV data,Rn 寄存器送直接字节 2 1 88—8FMOV data,data 直接字节送直接字节 3 2 85MOV data,@Ri 间接Rn 送直接字节 2 2 86;87MOV data,#data 立即数送直接字节 3 2 75MOV @Ri,A A 送间接Rn 1 2 F6;F7MOV @Ri,data 直接字节送间接Rn 1 1 A6;A7MOV @Ri,#data 立即数送间接Rn 2 2 76;77MOV DPTR,#data 16 位常数送数据指针 3 1 90MOV C,bit 直接位送进位位 2 1 A2MOV bit,C 进位位送直接位 2 2 92MOVC A,@A+DPTR A+DPTR 寻址程序存贮字节送A 3 2 93MOVC A,@A+PC A+PC 寻址程序存贮字节送A 1 2 83MOVX A,@Ri 外部数据送A(8 位地址) 1 2 E2;E3MOVX A,@DPTR 外部数据送A(16 位地址) 1 2 E0MOVX @Ri,A A 送外部数据(8 位地址) 1 2 F2;F3MOVX @DPTR,A A 送外部数据(16 位地址) 1 2 F0MUL AB A乘B 1 4 A4NOP 空操作 1 1 00ORL A,Rn 寄存器或到A 1 1 48—4FORL A,data 直接字节或到A 2 1 45ORL A,@Ri 间接RAM或到A 1 1 46;47 ORL A,#data 立即数或到A 2 1 44 ORL data,A A或到直接字节 2 1 42ORL data,#data 立即数或到直接字节 3 2 43ORL C,bit 直接位或到进位位 2 2 72ORL C,/bit 直接位的反码或到进位位 2 2 A0POP data 直接字节出栈,SP 减1 2 2 D0PUSH data 直接字节进栈道,SP 加1 2 2 C0RET 子程序调用返回 1 2 22RETI 中断程序调用返回 1 2 32RL A A循环左移一位 1 1 23RLC A A 带进位左移一位 1 1 33RR A A右移一位 1 1 03RRC A A 带进位右移一位 1 1 13SETB C 进位位置1 1 1 D3SETB bit 直接位置1 2 1 D2SJMP rel 短转移 2 2 80SUBB A,Rn 从A 中减去寄存器和进位 1 1 98—9FSUBB A,data 从A 中减去直接字节和进位 2 1 95SUBB A,@Ri 从A 中减去间接RAM 和进位 1 1 96;97SUBB A,#data 从A 中减去立即数和进位 2 1 94SWAP A A 半字节交换 1 1 C4XCH A,Rn 寄存器与A 交换 1 1 C8—CFXCH A,data 直接字节与A 交换 2 1 C5XCH A,@Ri 间接Rn 与A 交换 1 1 C6;C7XCHD A,@Ri 间接Rn 与A 低半字节交换 1 1 D6;D7XRL A,Rn 寄存器异或到A 1 1 68—6FXRL A,data 直接字节异或到A 1 1 65XRL A,@Ri 间接RAM异或到A 2 1 66;67XRL A,#data 立即数异或到A 1 1 64XRL data,A A异或到直接字节 2 1 62XRL data,#data 立即数异或到直接字节 3 2 63助记符说明字节周期代码注:Rn 表示寄存器R0-R7。
80C51系列单片机指令表
80C51系列单片机指令表80C51系列单片机指令以A开头的指令有18条,分别为:ACALL addr11ADD A,RnADD A,directADD A,@RiADD A,#dataADDC A,RnADDC A,directADDC A,@RiADDC A,#dataAJMP addr11ANL A,RnANL A,directANL A,@RiANL A,#dataANL direct,AANL direct,#dataANL C,bitANL C,/bit1. ACALL addr11指令名称:绝对调用指令指令代码:A10 A9 A8 1 0 0 0 1 A7 A6 A5 A4 A3 A2 A1 A0指令功能:构造目的地址,进行子程序调用。
其方法是以指令提供的11位地址(al0~a0),取代PC的低11位,PC的高5位不变。
操作内容:PC←(PC)+2SP←(SP)+1(SP)←(PC)7~0SP←(SP)+1(SP)←(PC)15~8PC10~0←addrl0~0字节数:2机器周期:2使用说明:由于指令只给出子程序入口地址的低11位,因此调用范围是2KB。
2. ADD A,Rn指令名称:寄存器加法指令指令代码:28H~2FH指令功能:累加器内容与寄存器内容相加操作内容:A←(A)+(Rn),n=0~7字节数:1机器周期:1影响标志位:C,AC,OV3. ADD A,direct指令名称:直接寻址加法指令指令代码:25H指令功能:累加器内容与内部RAM单元或专用寄存器内容相加操作内容:A←(A)+(direct)字节数:2机器周期:1影响标志位:C,AC,OV4. ADD A,@Ri指令名称:间接寻址加法指令指令代码:26H~27H指令功能:累加器内容与内部RAM低128单元内容相加操作内容:A←(A)+((Ri)),i=0,1字节数:1机器周期:1影响标志位:C,AC,OV5. ADD A,#data指令名称:立即数加法指令指令代码:24H指令功能:累加器内容与立即数相加操作内容:A←(A)+data字节数:2机器周期:1影响标志位:C,AC,OV6. ADDC A,Rn指令名称:寄存器带进位加法指令指令代码:38H~3FH指令功能:累加器内容、寄存器内容和进位位相加操作内容:A←(A)+(Rn)+(C),n=0~7字节数:1机器周期:1影响标志位:C,AC,OV7. ADDC A,direct指令名称:直接寻址带进位加法指令指令代码:35H指令功能:累加器内容、内部RAM低128单元或专用寄存器内容与进位位加操作内容:A←(A)+(direct)+(C)字节数:2机器周期:1影响标志位:C,AC,OV8. ADDC A,@Ri指令名称:间接寻址带进位加法指令指令代码:36H~37H指令功能:累加器内容、内部RAM低128单元内容及进位位相加操作内容:A←(A)+((Ri))+(C),i=0,1字节数:1机器周期:1影响标志位:C,AC,OV9. ADDC A,#data指令名称:立即数带进位加法指令指令代码:34H指令功能:累加器内容、立即数及进位位相加操作内容:A←(A)+data+(C)字节数:2机器周期:1影响标志位:C,AC,OV10. AJMP addr11指令名称:绝对转移指令指令代码:A10 A9 A8 1 0 0 0 1 A7 A6 A5 A4 A3 A2 A1 A0指令功能:构造目的地址,实现程序转移.其方法是以指令提供的11位地址,取代PC的低11位,而PC的高5位保持不变.操作内容:PC←(PC)+2PCl0~0←addrll字节数:2机器周期:2使用说明:由于addrll的最小值是000H,最大值是7FFH,因此地址转移范围是2KB.11. ANL A,Rn指令名称:寄存器逻辑与指令指令代码:58H~5FH指令功能:累加器内容逻辑与寄存器内容操作内容:A←(A)∧(Rn),n=0~7字节数:1机器周期:112. ANL A,direct指令名称:直接寻址逻辑与指令指令代码:55H指令功能:累加器内容逻辑与内部RAM低128单元或专用寄存器内容操作内容:A←(A)∧(diret)字节数:2机器周期:113. ANL A,@Ri指令名称:间接寻址逻辑与指令指令代码:56H~57H指令功能:累加器内容逻辑与内部RAM低128单元内容操作内容:A←(A)∧((Ri))i=0,1字节数:1机器周期:114. ANL A,#data指令名称:立即数逻辑与指令指令代码:54H指令功能:累加器内容逻辑与立即数操作内容:A←(A)∧data字节数:2机器周期:115. ANL direct,A指令名称:累加器逻辑与指令指令代码:52H指令功能:内部RAM低128单元或专用寄存器内容逻辑与累加器内容操作内容:direct←(A)∧(direct)字节数:2机器周期:116. ANL direct,#data指令名称:逻辑与指令指令代码:53H指令功能:内部RAM低128单元或专用寄存器内容逻辑与立即数操作内容:direct←(direct)∧data字节数:3机器周期:217. ANL C,bit指令名称:位逻辑与指令指令代码:82H指令功能:进位标志逻辑与直接寻址位操作内容:C←(C)∧(bit)字节数:2机器周期:218. ANL C,/bit指令名称:位逻辑与指令指令代码:B0H指令功能:进位标志逻辑与直接寻址位的反操作内容:C←(C)∧(bit)字节数:2机器周期:280C51系列单片机指令以C开头的指令有10条,分别为: CJNE A,dircet,relCJNE A,#data,relCJNE Rn,#data,relCJNE @Ri,#data,relCLR ACLR CCLR bitCPL ACPL CCPL bit1. CJNE A,dircet,rel指令名称:数值比较转移指令指令代码:B5H指令功能:累加器内容与内部RAM低128字节或专用寄存器内容比较,不等则转移。
第3章 80C51单片机的寻址方式和指令系统
(2)算术运算类指令(24条);
(3)逻辑运算及移位类指令(24条); (4)控制转移类指令(17条); (5)位操作类指令(17条)。
6
本节内容
3.1.1 汇编语言指令格式 3.1.2 机器码的三种格式 3.1.3 指令中常用符号说明
7
3.1.1 汇编语言指令格式
3.4.1 加法指令 3.4.2 减法指令 3.4.3 乘、除法指令
3.5 逻辑运算及移位类指令(24条)
3.5.1 逻辑与运算指令 3.5.2 逻辑或运算指令
3
第2章:80C51系列单片机基本结构及原理
3.5.3 逻辑异或运算指令 3.5.4 累加器清零、取反指令 3.5.5 循环移位指令
目录
3.6 控制转移类指令(17条)
解:指令执行过程如图3-3,结果:(A)= 60H 。 指令在ROM中的机器码为E8H,指令对应的机器码是:E8H=1110 1000B,二进 制的后三位000就是隐含的R0寄存器的编码,如果是R7其编码为111。 由于寄存器在CPU内部,所以采用寄存器寻址可以获得较高的运算速度。
31
32
能实现这种寻址方式的寄存器有: (1)工作寄存器 R0~R7 (4组工作寄存器均可) (2)累加器A (注:使用A为寄存器寻址,使用ACC为直接寻址) (3)寄存器B (注:以AB寄存器对的形式出现时为寄存器寻址,单独出现
一条完整的汇编语言指令通常由标号、操作码、操作数 (一般包括目的操作数和源操作数)及指令的注释构成。 指令格式: [标号:] <操作码> [操作数] [,操作数][;注释]
说明:
①在一条指令中,方括号中的内容可有可无,尖括号中的内容 必须有。
80C51单片机指令
减法
加1
减1 乘法 除法 BCD调整
SUBB A,
INC
DEC MUL AB DIV AB DA A
Direct #data A Rn @Ri Direct DPTR A Rn @Ri Direct
对PSW的影 Cy AC OV P
位传送
MOV C,bit MOV bit,C
清0
CLR CLR
c bit
位修正
取 反
CPL C CPL bit
置1
SETB SETB
C bit
位逻辑运 与
ANL C,bit ANL C,/bit
算
或
ORL C,bit ORL C,/bit
C∧bit C∧bit反 C∨bit C∨bit反
类型 与
或
异或
循环位移 求反 清0
助记符
ANL A,
ANL direct,
ORL A,
ORL direct,
XRL A,
XRL direct, RL A RLC A RR A RRC A CPL A CLR A
Rn @Ri direct #data A #data Rn @Ri direct #data A #data Rn @Ri direct #data A #data
√××× ×××× √××× ×××× √××× ×××× √××× ×××× √××× √××× √××× √×××
类型
助记符
LJMP addr16
转 AJMP addr11
移 SJMP rel
80C51指令集
按功能排列 1.数据传送指令 助 记 符 MOV A,Rn MOV A,data MOV A,@Ri MOV A,#data MOV Rn,A MOV Rn,data MOV Rn,#data MOV data,A MOV data,Rn MOV data,data MOV data,@Ri MOV data,#data MOV @Ri,A MOV @Ri,data MOV @Ri,#data MOV DPTR,#data16 MOV C,bit MOV bit,C MOVC A,@A+DPTR MOVC A,@A+PC MOVX A,@Ri MOVX A,@DPTR MOVX @Ri,A MOVX @DPTR,A PUSH data POP data XCH A,Rn XCH A,data XCH A,@Ri XCHD A,@Ri 说明 寄存器送 A 直接字节送 A 间接 RAM 送 A 立接数送 A A 送寄存器 直接数送寄存器 立即数送寄存器 A 送直接字节 寄存器送直接字节 直接字节送直接字节 间接 Rn 送直接字节 立即数送直接字节 A 送间接 Rn 直接字节送间接 Rn 立即数送间接 Rn 16 位常数送数据指针 直接位送进位位 进位位送直接位 A+DPTR 寻址程序存贮字节送 A A+PC 寻址程序存贮字节送 A 外部数据送 A(8 位地址) 外部数据送 A(16 位地址) A 送外部数据(8 位地址) A 送外部数据(16 位地址) 直接字节进栈道,SP 加 1 直接字节出栈,SP 减 1 寄存器与 A 交换 直接字节与 A 交换 间接 Rn 与 A 交换 间接 Rn 与 A 低半字节交换 字节 1 2 1 2 1 2 2 2 2 3 2 3 1 1 2 3 2 2 3 1 1 1 1 1 2 2 1 2 1 1 周期 1 1 1 1 1 2 1 1 1 2 2 2 2 1 2 1 1 2 2 2 2 2 2 2 2 2 1 1 1 1 代 码 E8--EF E5 E6--E7 74 F8--FF A8--AF 78--7F F5 88—8F 85 86;87 75 F6;F7 A6;A7 76;77 90 A2 92 93 83 E2;E3 E0 F2;F3 F0 C0 D0 C8—CF C5 C6;C7 D6;D7
(参考资料)80C51指令集
代码 E8--EF
E5 E6--E7
74 F8--FF A8--AF 78--7F
F5 88—8F
85 86;87
75 F6;F7 A6;A7 76;77
90 A2 92 93 83 E2;E3 E0 F2;F3 F0 C0 D0 C8—CF C5 C6;C7 D6;D7
2.逻辑运算指令 助记符
ANL A,Rn ANL A,data ANL A,@Ri ANL A,#data ANL data,A ANL data,#data ANL C,bit ANL C,/bit ORL A,Rn ORL A,data ORL A,@Ri ORL A,#data ORL data,A ORL data,#data ORL C,bit ORL C,/bit XRL A,Rn XRL A,data XRL A,@Ri XRL A,#data XRL data,A XRL data,#data SETB C SETB bit CLR A CLR C CLR bit CPL A CPL C CPL bit RL A RLC A
助记符 AJMP addr 11 LJMP addr 16 SJMP rel
A 右移一位 A 带进位右移一位 A 半字节交换
说明 寄存器加到 A 直接字节加到 A 间接 RAM 加到 A 立即数加到 A 寄存器带进位加到 A 直接字节带进位加到 A 间接 RAM 带进位加到 A 立即数带进位加到 A 从 A 中减去寄存器和进位 从 A 中减去直接字节和进位 从 A 中减去间接 RAM 和进位 从 A 中减去立即数和进位 A加1 寄存器加 1 直接字节加 1 间接 RAM 加 1 数据指针加 1 A减1 寄存器减 1 直接字节减 1 间接 RAM 减 1 A乘B A被B除 A 十进制调整
80C51单片机指令系统汇编
MOVX A, @Ri
MOVX A, @DPTR
目的操作数为@Ri
MOVX @Ri, A
MOVX @DPTR, A
例6:指令执行前(DPTR)=2000H,(A) =30H,(2000H)=55H,(R0)=20H, (20H)=88H
MOVX A,@DPTR
; (A)=55H
MOVX @R0,A
(7) direct: 表示直接寻址的地址, 即8位内部数据存储器 RAM的单元地址(0~127); 特殊功能寄存器SFR的地址。对于SFR可直接 用其名称来代替其直接地址。
(8) bit: 内部数据存储器RAM中位寻址区中的位地址 特殊功能寄存器SFR中的可直接寻址位地址 或名称。
(9) @: 间接寻址寄存器或基地址寄存器的前缀, 如@Ri, @DPTR, 表示寄存器间接寻址。
目的地址转移指令地址转移指令字节数rel寻址方式利用的变量使用的空间寄存器寻址r0r7abcydptr直接寻址直接地址内部ramsfr寄存器间接寻址r0r1内部ramr0r1dptr外部ram立即寻址立即数程序存储器变址寻址dptrapca程序存储器相对寻址pcrel程序存储器位寻址位地址内部ram位寻址区可位寻址的sfr说明下列指令中源操作数的寻址方式movar7movar1movcaadptrmovap0mova88hmova88hmovcp003380c51单片机指令系统80c51指令分类按功能分数据传送指令29条算术运算指令24条逻辑运算指令及移位类指令24条控制转移类指令17条位操作类指令17条一数据传送指令29条datamovadirectmovrnmovri目的操作数为rnmovrndatamovrndirectmovrnmovdptrdata指令执行前a33hr030h30h55h指令执行后的结果
80C51系列单片机指令表
标号:指令的符号地址. ⑴ 标号:指令的符号地址.
① 用于一段功能程序的识别标记或控制 转移地址. 转移地址. ② 指令前的标号代表该指令的地址, 指令前的标号代表该指令的地址, 用符号表示的地址. 是用符号表示的地址. 一般用英文字母和数字组成. ③ 一般用英文字母和数字组成. 标号必须用冒号" 与操作码分隔. ④ 标号必须用冒号" :"与操作码分隔.
【例】 MOV MOV
中
A,3 A,3AH A,P0
单元中的数据传送至A ;将内RAM 3AH单元中的数据传送至A中 将内RAM AH单元中的数据传送至 ;将特殊功能寄存器P0口中的数据传送至A 将特殊功能寄存器P0口中的数据传送至A P0口中的数据传送至
说明: AH和 是以direct形式出现的直接地址 说明:3AH和P0是以direct形式出现的直接地址 direct 访问特殊功能寄存器SFR SFR只能采用直接寻址方 访问特殊功能寄存器SFR只能采用直接寻址方 式.
注释:指令功能说明. ⑷ 注释:指令功能说明.
注释属于非必需项, 是为便于阅读, ① 注释属于非必需项 , 是为便于阅读 , 对指令功能作的说明和注解. 对指令功能作的说明和注解. ② 注释必须以";"开始. 注释必须以" 开始.
3.1.2 指令分类
80C51共有111条指令. 80C51共有111条指令. 共有111条指令
A,R0 MOV A,R0 INC A MUL AB ;将R0中的数据传送至A中 中的数据传送至A
⒋ 寄存器间接寻址
80C51指令系统
80C51指令系统80C51单片机指令系统来自常信院3#731 v罗1、数据传送类指令MOV A,#date(8位立即数送累加器)MOV direct,#date(8位立即数送直接寻址单元)MOV @Ri,#date(8位立即数送Ri间接寻址单元)MOV Rn,#date(8位立即数送寄存器)MOV DPTR,#date16(16位立即数送DPTR)MOV direct2,direct1(直接寻址数据送直接寻址单元)MOV direct,@Ri(Ri间接寻址数据送直接寻址单元)MOV direct,Rn(寄存器内容送直接寻址单元)MOV @Ri,direct(直接寻址数据送Ri间接寻址单元)MOV Rn,direct(直接寻址数据送寄存器)MOV A,direct(直接寻址数据送累加器)MOV A,@Ri(Ri间接寻址数据送累加器)MOV A,Rn(寄存器内容送累加器)MOV direct,A(累加器内容送直接寻址单元)MOV @Ri,A(累加器内容送Ri间接寻址单元)MOV Rn,A(累加器内容送寄存器)MOVX A,@Ri(Ri间接寻址的外部RAM单元读)(不常用)MOVX @Ri,A(Ri间接寻址的外部RAM单元写)(不常用)MOVX A,@DPTR(DPTR间接寻址的外部RAM单元读) MOVX @DPTR,A(DPTR间接寻址的外部RAM单元写)MOVC A,@A+DPTR(程序存储器读)MOVC A,@A+PC(程序存储器读)(不常用)整字节交换指令XCH A,Rn(寄存器寻址字节交换)XCH A,direct(直接寻址字节交换)XCH A,@Ri(Ri间接寻址字节交换)半字节交换指令XCHD A,@Ri(Ri间接寻址半字节交换)注解:是低四位交换SWAP A(累加器内容高低半字节交换)注解:高四位与低四位交换PUSH direct(进栈)POP direct(出栈)2、算数运算类指令ADD A,#date(立即数加法)ADD A,direct(直接寻址加法)ADD A,@Ri(间接寻址加法)ADD A,Rn(寄存器寻址加法)ADDC A,#date(立即数带进位加法)注解:CY取决于上一步)ADDC A,direct(直接寻址带进位加法)ADDC A,@Ri(间接寻址带进位加法)ADDC A,Rn(寄存器寻址带进位加法)SUBB A,#date(立即数带借位减法)SUBB A,direct(直接寻址带借位减法)SUBB A,@Ri(间接寻址带借位减法)SUBB A,Rn(寄存器寻址带借位减法)INC A(累加器加1)INC direct(直接寻址单元加1)INC @Ri(间接寻址单元加1)INC Rn(寄存器加1)INC DPTR(16位数据指针加1)DEC A(累加器减1)DEC direct(直接寻址单元减1)DEC @Ri(间接寻址单元减1)DEC Rn(寄存器减1)MUL AB(乘法)注解:低位字节送A,高位字节送B,CY,总是被清0,若OV=1,表示乘积大于255,分别存放在B与A中;否则,表示乘积小于或等于255,只存放在A 中,B 中的内容为0。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
80C51指令表一、数据传送指令MOV A,Rn ; (Rn)→AMOV A,direct ; (direct)→AMOV A,@Ri ; ((Ri))→AMOV A,#data ; #data→AMOV Rn,A ; (A)→ RnMOV Rn,direct ; (direct)→ RnMOV Rn,#data ; #data→ RnMOV direct,A ; (A)→directMOV direct,Rn ; (Rn)→directMOV direct1,direct2 ; (direct1)→direct2MOV direct,@Ri ; ((Ri))→directMOV direct,#data ; #data→directMOV @Ri,A ; ((Ri))→AMOV @Ri,direct ; (direct)→(Ri)MOV @Ri,#data ; #data→ ((Ri))MOV DPTR,#data16 ; dataH→ DPH,data → LDPL MOVX A,@DPTR ; ((DPTR))→AMOVX @DPTR,A ; (A)→(DPTR)MOVX A,@Ri ; ((Ri))→AMOVX @Ri,A ;(A) →(Ri)MOVC A,@A+PC ; (PC)+1→PC,((A)+(PC))→ A MOVC A,@A+DPTR ; (A)+(DPTR)→APUSH direct ; (SP)+1 → SP,(direct) → (SP) POP direct ;((SP)) → (direct), (SP)-1 → SP XCH A,Rn ; (A) ←→(Rn)XCH A,direct ; (A) ←→(direct)XCH A,@Ri ; (A) ←→((Ri))XCHD A,@Ri ; (A)0~3 ←→((Ri))0~3SWAP A ; (A)0~3 ←→(A)4~7二、算术运算指令ADD A,Rn ; (A) + (Rn)→ AADD A,direct ; (A) + (direct)→ AADD A,@Ri ; (A) + ((Ri))→ AADD A,#data ; (A) + #data→ AADDC A,Rn ; (A) + (Rn) + cy→ AADDC A,direct ; (A) + (direct) + cy→ AADDC A,@Ri ; (A) + ((Ri)) + cy→ AADDC A,#data ; (A) + # data + cy→ ASUBB A,Rn ; (A) - ( Rn) - cy→ ASUBB A,direct ; (A) - (direct) - cy→ ASUBB A,@Ri ; (A) - ((Ri)) - cy→ ASUBB A,#data ; (A) - # data - cy→ AINC A ; (A) + 1 → AINC Rn ; (Rn) + 1 →RnINC direct ; (direct) + 1 →directINC @Ri ; ((Ri)) + 1 → (Ri)INC DPTR ; (DPTR) + 1 → DPTRDEC A ; (A) - 1 → ADEC Rn ; (Rn) - 1 →RnDEC direct ; (direct) - 1 →directDEC @Ri ; ((Ri)) - 1 → (Ri)MUL AB ; (A)·(B) → ABDIV AB ; (A) / (B) 商→ A , 余数→ B DA A ; 对A进行十进制调整三、逻辑操作指令ANL A,Rn ; (A)∧(Rn) → AANL A,direct ; (A)∧(direct) →AANL A,@Ri ; (A)∧((Ri)) → AANL A,#data ; (A)∧#data → AANL direct,A ; (direct)∧(A) →directANL direct,#data ; (direct)∧#data →directORL A,Rn ; (A)∨(Rn) → AORL A,direct ; (A)∨(direct) → AORL A,@Ri ; (A)∨((Ri)) → AORL A,#data ; (A)∨#data → AORL direct,A ; (direct)∨(A) →directORL direct,#data ; (direct)∨#data →directXRL A,Rn ; (A)⊕(Rn) → AXRL A,direct ; (A)⊕(direct) → AXRL A,@Ri ; (A)⊕((Ri)) → AXRL A,#data ; (A)⊕#data → AXRL direct,A ; (direct)⊕(A) →directXRL direct,#data ; (direct)⊕#data →directCLR A ; 0 → ACPL A ; (A) → ARL A ; (A)循环左移1位RLC A ; (A)带进位循环左移1位RR A ; (A)循环右移1位RRC A ; (A)带进位循环右移1位SWAP A ;(A)半字节交换四、位操作指令CLR C ; 0 → cyCLR bit ; 0 → bitSETB C ; 1 → cySETB bit ; 1 → bitCPL C ; (cy) → cyCPL bit ; (bit) → bitANL C,bit ; (cy) ∧(bit) → cyANL C,/bit ; (cy) ∧(bit) → cyORL C,bit ; (cy) ∨(bit) → cyORL C,/bit ; (cy) ∨(bit) → cyMOV C,bit ; (bit) → cyMOV bit,C ; (cy) → bit五、控制转移指令ACALL addr11 ; (PC)+2 → PC , (SP)+1 → SP;(PCL) → (SP),(SP)+1 → SP;(PCH) → (SP),addr11 → PC10~0 LCALL addr16 ; (PC)+3 → PC , (SP)+1 → SP;(PCL) → (SP),(SP)+1 → SP;(PCH) → (SP),addr16 → PCRET ; (SP) → PCH,(SP) -1 → SP;(SP) → PCL,(SP) -1 → SPRETI ; (SP) → PCH,(SP) -1 → SP;(SP) → PCL,(SP) -1 → SPAJMP add11 ; (PC)+2 → PC,;addr11 → CP10~0 LJMP add16 ; addr16 → PCSJMP rel ; (PC)+2 → PC,(PC)+ rel → PC JMP @A+DPTR ; ((A)+(DPTR))→ PCJZ rel ; (A)=0 : (PC)+2 +rel =PC; (A)≠0 : (PC)+2 =PCJNZ rel ; (A)≠0 : (PC)+2 +rel =PC; (A)=0 : (PC)+2 =PCJC rel ; (C)=1 : (PC)+2+rel =PC; (C)=0 : (PC)+2 =PCJNC rel ; (C)=0 : (PC)+2+rel =PC; (C)=1 : (PC)+2 =PCJB bit,rel ; (bit)=1 : 则(PC)+3+rel =PC; (bit)=0 : 则(PC)+3 =PCJNB bit,rel ; (bit)=0 : 则(PC)+3+rel =PC; (bit)=1 : 则(PC)+3 =PCJBC bit,rel ; (bit)=1 : 则(PC)+3+rel =PC, 0 → bit; (bit)=0 : 则(PC)+3 =PCCJNE A,direct,rel ; (A) = (direct), 则(PC)+3 → PC; (A) > (direct), 则(PC)+3+rel → PC,0 → CY; (A) < (direct), 则(PC)+3+rel → PC,1 → CY CJNE A,#data,rel ; (A) = #data, 则(PC)+3 → PC; (A) > #data, 则(PC)+3+rel → PC,0 → CY; (A) < #data, 则(PC)+3+rel → PC,1 → CY CJNE Rn,#data,rel ; (Rn) = #ata , 则(PC)+3 → PC; (Rn) > #ata, 则(PC)+3+rel → PC,0 → CY; (Rn) < #ata, 则(PC)+3+rel → PC,1 → CY CJNE @Ri,#data,rel ; ((Rn)) = #data, 则(PC)+3 → PC; ((Rn)) > #ata, 则(PC)+3+rel → PC,0 → CY; ((Rn)) < #ata, 则(PC)+3+rel → PC,1 → CY DJNZ Rn,rel ; (Rn)-1 → Rn,(Rn)=0,则(PC)+2 → PC;(Rn)≠0,则(PC)+2+rel → PCDJNZ direct,rel ; (direct)-1 → (direct),;(direct) ≠0,则(PC)+3+rel → PC;(direct)=0,则(PC)+3 → PCNOP ; 空操作。