null第3章 80C51系列单片机指令系统第3章 80C51系列单片机指令系统本章要点 80C51指令的基本格式
80C51指令功能分类
指令系统中的常用符号
80C51指令系统的七种寻址方式
数据传送类指令
算术运算类指令
逻辑运算及移位指令
位操作类指令
控制转移类指令 null51系列单片机指令集含有111条指令 每条指令在执行时要花去一定的时间,以机器周期为单位。按指令执行时间分类:
单周期(64条);双周期(45条);4周期(2条)按指令的功能分类,可分为5大类:
数据传送类(29条);算术运算类(24条)
逻辑运算及移位类(24);控制转移类(17条)
位操作类(17条)每条指令在程序存储器ROM中占据一定的空间,以字节为单位。按指令所占字节数分类:
单字节(49条);双字节(46条);3字节(16条)§3-1 指令系统基本概念§3-1 指令系统基本概念标号:操作码 操作数;注释 3.1.1 指令基本格式方括符[ ]表示可选项
标号代表指令所在地址,1-8个字母/数字,“:”结尾
[标号:]操作码 [目的操作数][,源操作数][;注释]START:MOV A,#30H ;将立即数30H传送至A中
MOV DPTR,#5678H ;将立即数5678H传送至DPTR⑴ 标号:指令的符号地址。⑴ 标号:指令的符号地址。① 用于一段功能程序的识别标记或控制 转移地址。指令前的标号代表该指令的地址,
是用符号表示的地址。 一般用英文字母和数字组成。④ 标号必须用冒号“ :”与操作码分隔。⑵ 操作码:表示指令的操作功能。⑵ 操作码:表示指令的操作功能。① 操作码用助记符表示,
它代表了指令 的操作功能。② 操作码是指令的必需部分,
是指令的核心,不可缺少。⑶ 操作数:参加操作的数据或数据地址。⑶ 操作数:参加操作的数据或数据地址。⑤ 操作数与操作码之间用空格分隔,操作数与 操作数之间用逗号“,”分隔。 ① 操作数可以是数据,也可以是数据的地址、 数据地址的地址或操作数的其他信息。② 操作数可分为目的操作数和源操作数。③ 操作数可用二进制数、十进制数或十六进制 数表示。④ 操作数的个数可以是0~3个。⑷ 注释:指令功能说明。⑷ 注释:指令功能说明。① 注释属于非必需项,是为便于阅读, 对指令功能作的说明和注解。② 注释必须以“;”开始。3.1.2 指令分类3.1.2 指令分类⑶ 按指令功能分类:
可分为数据传送类、算术运算类、
逻辑运算类、位操作类和
控制转移类 等5大类指令。80C51共有111条指令。⑴ 按指令长度分类:
可分为1字节、2字节和3字节指令。⑵ 按指令执行时间分类:
可分为1机周、2机周和4机周指令。3.1.3 指令系统中的常用符号3.1.3 指令系统中的常用符号⑹ bit:位地址。 SETB ACC.7
代表片内RAM中的可寻址位00H~7FH及SFR中的可寻址位。 ⑴ #:立即数符。 MOV A,#30H
#data:8位立即数;#data16:16位立即数。⑵ direct:8位直接地址 MOV A,3AH
代表内RAM 00H~7FH或SFR的80H~FFH 。⑶ @:间接寻址符。 MOV A,@R0
如@Ri,@DPTR,@A+PC,@A+DPTR。⑷ addr11:11位目的地址。
addr16:16位目的地址。⑸ rel:带符号的8位偏移地址。 SJMP rel
用于转移指令,其范围是相对于下一条指令第1字节地址的-128~+127个字节。null3.1.4 寻址方式寻址就是寻找操作数的地址。七种寻址方式,一条指令可能含多种寻址方式立即寻址
直接寻址
寄存器寻址
寄存器间接寻址
变址寻址(基址寄存器+变址寄存器间接寻址)
相对寻址
位寻址null【例】⒈ 立即寻址 立即寻址是直接给出操作数,操作数前有立即数符“ # ”。MOV A,#30H ;将立即数30H传送至A中
MOV DPTR,#5678H ;将立即数5678H传送至DPTRADD A,#05H ;(A)←(A)+立即数 05H
注意:符号“#”表明其后跟的是立即数,
立即数——就是数字量本身。⒉ 直接寻址⒉ 直接寻址MOV A,3AH ;将内RAM 3AH单元中的数据传送至A中
MOV A,P0 ;将特殊功能寄存器P0口中的数据传送至A中
说明:3AH和P0是以direct形式出现的直接地址
访问特殊功能寄存器SFR只能采用直接寻址方 式。 直接寻址是给出操作数的直接地址。直接寻址范围为内RAM 128B和特殊功能寄存器。【例】⒊ 寄存器寻址⒊ 寄存器寻址MOV A,R0 ;将R0中的数据传送至A中
INC A
MUL AB从寄存器中读取操作数或存放操作数进寄存器
寄存器寻址的操作数在规定的寄存器中。
规定的寄存器有:① 工作寄存器R0~R7
② 累加器A
③ 双字节AB
④ 数据指针DPTR
⑤ 位累加器Cy
这些被寻址寄存器中的内容就是操作数【例】⒋ 寄存器间接寻址⒋ 寄存器间接寻址MOV A,@R0 ;将以R0中内容为地址的存储单元中的数据
传送至A中
MOVX A,@DPTR ;将外RAM DPTR所指存储单元中的数据
传送至A中
PUSH PSW ;将PSW中数据
传送至堆栈指针SP所指的存储单元中
MOV @R1,#0FH ;(30H)←立即数0FH 寄存器中的内容是一个地址,由该地址单元寻址到所需的操作数。间接寻址用间址符“@”作为前缀。【例】注意:
1)“间接”表示某寄存器中的“内容”只是一个“单元地址”,这个地址单元中存放的数据才是要找的“操作数”。
2)符号“@”表示“在…”,其含义与读音皆同“at”。⒌ 变址寻址⒌ 变址寻址MOVC A,@A+DPTR 【例】在变址寻址中,操作数地址=基址+变址
用于读ROM数据操作。;将A的内容与DPTR内容相加, 得到一个新地址,从该地址 ROM中读取数据送入A中。 以16位的地址指针寄存器DPTR或 16位的PC寄存器为基址寄存器,以累加器 A 为变址寄存器,两者中的“内容”形成一个16位的“地址”,该“地址”所指的存储单元中的内容才是操作数。MOVC A,@A+PC ;A (A+PC) 当前PC值加上指令中规定的偏移量 rel,构成实际的操作数地址
例: SJMP rel
操作:跳转到的目的地址 = 当前16位PC值 + rel 当前PC值加上指令中规定的偏移量 rel,构成实际的操作数地址
例: SJMP rel
操作:跳转到的目的地址 = 当前16位PC值 + rel⒍ 相对寻址注意:
1)“当前PC值”指程序中下一条指令所在的首地址,是一个16位数;
2)符号“rel”表示“偏移量”,是一个带符号的单字节数,范围是:-128—+127(80H—7FH)在实际编程中,“rel” 通常用标号代替null在实际编程中,“rel” 通常用标号代替
例:SJMP LOOP1例:2000H:SJMP 08H ;
原PC值为2000H;执行这条指令后的当前PC值为2002H,rel为08H。2002H+08H=200AH,转移目的地址为200AH,程序就跳转至200AH去执行了。右图为SJMP 08H相对寻址示意图。null;将位地址07H(字节地址20H中最 高位)中的数据传送至进位位Cy。⒎ 位寻址 位寻址是对内RAM和特殊功能寄存器中的可寻址位进行操作的寻址方式。MOV C,07H 指令中直接给出了操作数所在的位地址。
例: CLR P1.0 ;(P1.0) ← 0
SETB ACC.7 ;(ACC.7)← 1
CPL C ;( C )← NOT( C )null注意:
1)位地址里的数据只可能是一个 0 或 1
2)有的位地址十分明确,如 P1.0, ACC.7等,有的位地址则“不太明确”,如:
MOV A,17H ; (A)←(17H),17H是字节地址
MOV ACC.0,17H ;(ACC.0)←(17H),这里ACC.0 是位地址所以该指令中的17H是22H单元的第7位
§3-2 指令系统§3-2 指令系统 数据传送类指令 算术运算类指令 逻辑运算及移位指令 位操作类指令 控制转移类指令功能分五类,共111条指令null① MOV A,Rn ;Rn→A ,n=0~7
② MOV A,@Ri ;(Ri)→A,i=0、1
③ MOV A,direct ;(direct)→A
④ MOV A,#data ;data→A 3.2.1 数据传送类指令⒈ 内RAM数据传送指令⑴ 以累加器A为目的字节的传送指令(4条)【例3-1】若R0=40H,(30H)=60H,(40H)=50H
MOV A,R0 ;将工作寄存器R0中的数据传送至A中,A=40H
MOV A,@R0 ;将以R0中内容为地址的存储单元中的数据送至A
中 A=50H
MOV A,30H ;将直接地址30H存储单元中的数据传送至A中,
A=60H
MOV A,#30H ;将立即数#30H送入A中,A=30Hnull① MOV Rn,A ;A→Rn,n=0~7
② MOV Rn,direct;(direct)→Rn,n=0~7
③ MOV Rn,#data ;data→Rn,n=0~7
⑵ 以工作寄存器Rn为目的字节 的传送指令(3条)⑶ 以直接地址为目的字节的传送指令(5条)⑶ 以直接地址为目的字节的传送指令(5条)① MOV direct,A ;A→(direct)
② MOV direct,Rn ;Rn→(direct),n=0~7
③ MOV direct,@Ri ;(Ri)→(direct),i=0、1
④ MOV direct1,direct2;(direct2)→(direct1)
⑤ MOV direct,#data ;data→(direct)
⑷ 以寄存器间址为目的字节的传送指令(3条)⑷ 以寄存器间址为目的字节的传送指令(3条)① MOV @Ri,A ;A→(Ri),i=0、1
② MOV @Ri,direct;(direct)→(Ri),i=0、1
③ MOV @Ri,#data ;data→(Ri),i=0、1⒉ 16位数据传送指令⒉ 16位数据传送指令MOV DPTR,#data16 ;data16→DPTR【例】MOV DPTR,#1234H ;DPTR=1234H
该指令也可以用两条8位数据传送指令实现:
MOV DPH,#12H ;DPH=12H
MOV DPL,#34H ;DPL=34H,DPTR=1234Hnull① MOVX A,@Ri ;(Ri)→A,i=0、1
② MOVX A,@DPTR ;(DPTR)→A
③ MOVX @Ri,A ;A→(Ri),i=0、1
④ MOVX @DATR,A ;A→(DATR)⒊ 外RAM传送指令(4条)⒋ 读ROM指令(2条)⒋ 读ROM指令(2条)内RAM(包括特殊功能寄存器): 用MOV指令传送;
外RAM: 用MOVX指令传送;
ROM: 用MOVC指令传送。① MOVC A,@A+DPTR ;(A+DPTR)→A
② MOVC A,@A+PC ;PC+1→PC,(A+PC)→A 三个不同的存储空间用三种不同的指令传送:null【例3-9】 按下列
要求
对教师党员的评价套管和固井爆破片与爆破装置仓库管理基本要求三甲医院都需要复审吗
传送数据:设ROM(2000H)=ABH
(1)ROM 2000H单元数据送内RAM 10H单元;
(2)R0M 2000H单元数据送外RAM 80H单元;
(3)ROM 2000H单元数据送外RAM 1000H单元;
解(1):MOV DPTR,#2000H ;置基址2000H,DPTR=2000H
MOV A,#00H ;置变址0,A=00H
MOVC A,@A+DPTR ;读ROM 2000H,A=ABH
MOV 10H,A ;存内RAM 10H单元,(10H)=ABH
解(2):MOV DPTR,#1FFFH ;置基址1FFFH,DPTR=1FFFH
MOV A,#01H ;置变址01H,A=01H
MOVC A,@A+DPTR ;读ROM 2000H,A=ABH
NOV R0,#80H ;置外RAN间址,R0=80H
MOVX @R0,A ;写外RAM 80H,外RAM(80H)=ABH
解(3):MOV DPTR,#2000H ;置基址2000H,DPTR=2000H
MOV A,#00H ;置变址0,A=00H
MOVC A,@A+DPTR ;读ROM 2000H,A=ABH
MOV DPH,1OH ;修改外RAN地址,DPTR=1000H
MOVX @DPTR,A ;写外RAM 1000H,外RAM(1000H)=ABHnull【例3.10】 已知ROM中存有0~9的平方表,首地址为2000H,试根据累加器A中的数值查找对应的平方值,存入内RAM 30H。(设A=3)
解:若用DPTR作为基址寄存器,可编程如下:
1000H:MOV DPTR,#2000H ;置ROM平方表首地址
MOVC A,@A+DPTR ;A+2000H=2003H(设A=3),
;A=(2003H)=09H
MOV 30H,A ;平方值存入内RAM 30H中
…… ……
2000H:00H ;平方表:02=0
2001H:01H ; 12=1
2002H:04H ; 22=4
2003H:09H ; 32=9
2004H:10H ; 42=16,16=10H
…… ……
2009H:51H ; 92=81,81=51Hnull① PUSH direct ;SP+1→SP,(direct)→(SP)
② POP direct ;(SP)→(direct),SP-1→SP
⒌ 堆栈操作指令(2条)null⑴ PUSH为入栈指令
例PUSH 30H;(30H)=2BH,具体操作是: 先将堆栈指针SP的内容(0FH)加1,指向堆栈顶的一个空单元,此时SP=10H;
② 然后将指令指定的直接寻址单元30H中的数据(2BH)送到该空单元中。null⑵ POP为出栈指令
例 POP 40H ;(40H)=4CH,具体操作是:先将SP所指单元0FH(栈顶地址)中的数据(4CH)弹出,送到指定的内RAM单元40H,(40H)=4CH;
② 然后SP-1→SP,SP=0EH,SP仍指向栈顶地址。⒍ 交换指令(5条)⒍ 交换指令(5条) ① XCH A,Rn ; A←→Rn,n=0~7
② XCH A,@Ri ; A←→(Ri),i=0、1
③ XCH A,direct ; A←→(direct)SWAP A ; A7~4←→A3~0⑴ 字节交换指令⑵ 半字节交换指令XCHD A,@Ri ; A3~0←→(Ri)3~0
高4位不变。i=0、1⑶ 累加器高低四位互换3.2.2 算术运算类指令3.2.2 算术运算类指令① ADD A,Rn ;A+Rn→A(n=0~7)
有进位,Cy=1;无进位,Cy=0
② ADD A,@Ri ;A+(Ri)→A(i=0、1)
有进位,Cy=1;无进位,Cy=0
③ ADD A,direct ;A+(direct)→A
有进位,Cy=1;无进位,Cy=0
④ ADD A,#data ;A+data→A
有进位,Cy=1;无进位,Cy=0
⒈ 加法指令⑴ 不带Cy加法指令(4条)null① ADDC A,Rn ;A+Rn+Cy→A(n=0~7)
有进位,Cy=1;无进位,Cy=0
② ADDC A,@Ri ;A+(Ri)+Cy→A(i=0、1)
有进位,Cy=1;无进位,Cy=0
③ ADDC A,direct ;A+(direct)+Cy→A
有进位,Cy=1;无进位,Cy=0
④ ADDC A,#data ;A+data+Cy→A
有进位,Cy=1;无进位,Cy=0
⑵ 带Cy加法指令(4条)⒉ 减法指令(4条)⒉ 减法指令(4条)① SUBB A,Rn ; A-Rn-Cy→A,(n=0~7),
有借位,Cy=1;无借位,Cy=0
② SUBB A,@Ri ; A-(Ri)-Cy→A,(n=0~1),
有借位,Cy=1;无借位,Cy=0
③ SUBB A,direct; A-direct-Cy→A,
有借位,Cy=1;无借位,Cy=0
④ SUBB A,#data ; A-data-Cy→A,
有借位,Cy=1;无借位,Cy=0
null① INC A ;A+1→A
② INC Rn ;Rn+1→Rn,n=0~7
③ INC @Ri ;(Ri)+1→(Ri), i=0、1
④ INC direct ;(direct)+1→(direct)
⑤ INC DPTR ;DPTR+1→DPTR⒊ 加1减1指令⑴ 加1指令(5条)⑵ 减1指令(4条)① DEC A ;A-1→A
② DEC Rn ;Rn-1→Rn, n=0~7
③ DEC @Ri ;(Ri)-1→(Ri), i=0、1
④ DEC direct ;(direct)-1→(direct) 加1减1指令涉及 A时,会影响P,但不影响其他
标志
禁止坐卧标志下载饮用水保护区标志下载桥隧标志图下载上坡路安全标志下载地理标志专用标志下载
位。 null⒋ BCD码调整指令DA A功能:对加法运算结果进行BCD码调整。十进制调整: (DA A ——1条)
用于两个BCD码之间的相加,这条指令只能跟在 ADD 或 ADDC 之后nullBCD码是指“用二进制表达的十进制数”。如: 十进制数20可以用二进制数00010100B表示; 也可以用十六进制数14H表示; 还可以用BCD码 00100000B 或 20H 表示。4个二进制位就可以表示一位BCD码: 0000~1001 可表示十进制数(BCD数) 0~9; 8个二进制位就可以表示两位压缩的BCD码:00000000~10011001 表示 00~99。十进制调整: (DA A ——1条)
用于两个BCD码之间的相加,这条指令只能跟在 ADD 或 ADDC 之后null若(A)3~09或(AC)=1则(A)3~0(A)3~0+6; 若(A)7~49或(CY)=1则(A)7~4(A)7~4+6;例:两个十进制数“65”与“58”相加,根据常识,显然其和应当为“123”。MOV A,#65H ADD A,#58H DA A
结果:(A)= 23H
(CY)= 1指令 “DA A” 完成的操作: 6 5 0110 0101
5 8 0101 1000
+13181926 6 0110 0110null若(A)3~09或(AC)=1则(A)3~0(A)3~0+6; 若(A)7~49或(CY)=1则(A)7~4(A)7~4+6;又如:两个十进制数“39”与“58”相加,根据常识,显然其和应当为“97”。MOV A,#39H ADD A,#58H DA A
结果:(A)= 97H
(CY)= 0 3 9 0011 1001
5 8 0101 1000
+07239 6 0110指令 “DA A” 完成的操作:null DIV AB ;(A÷B)商→A,余数→B
Cy=0,OV=0
⒌ 乘除法指令⑴ 乘法指令(1条)MUL AB ; A×B→BA⑵ 除法指令(1条)三、逻辑运算及移位指令三、逻辑运算及移位指令① ANL A,Rn ;A∧Rn→A
② ANL A,@Ri ;A∧(Ri)→A
③ ANL A,#data ;A∧data→A
④ ANL A,direct ;A∧(direct)→A
⑤ ANL direct,A ;(direct)∧A→direct
⑥ ANL direct,#data;(direct)∧data→direct⒈ 逻辑“与”运算指令(6条)null⒉ 逻辑“或”运算指令(6条)① ORL A,Rn ;A∨Rn→A
② ORL A,@Ri ;A∨(Ri)→A
③ ORL A,#data ;A∨data→A
④ ORL A,direct ;A∨(direct)→A
⑤ ORL direct,A ;(direct)∨A→direct
⑥ ORL direct,#data;(direct)∨data→directnull⒊ 逻辑“异或”运算指令(6条)① XRL A,Rn ;A Rn→A
② XRL A,@Ri ;A(Ri)→A
③ XRL A,#data ;A data→A
④ XRL A,direct ;A(direct)→A
⑤ XRL direct,A ;(direct) A→direct
⑥ XRL direct,#data;(direct) data→directnull ① CLR A ;0→A
② CPL A ;A→A⒋ 清零和取反指令⒌ 循环移位指令(4条)① 循环左移:RL A② 带Cy循环左移:RLC A ③ 循环右移:RR A ④ 带Cy循环右移:RRC A null① MOV C,bit ;(bit)→Cy
② MOV bit,C ;Cy→bit四、位操作类指令⒈ 位传送指令(2条) 指令中C即进位位Cy的助记符,bit为内RAM 20H~2FH中的128个可寻址位和特殊功能寄存器中的可寻址位存储单元。
【例3-36】将位存储单元24H.4中的内容传送到位存储单元24H.0。
解:MOV C,24H.4 ;(24H.4) C
MOV 24H.0,C ;C (24H.0)
或写成:
MOV C,24H ;(24H) C,(24H=24H.4)
MOV 20H,C ;C (20H),(20H=24H.0)null⑵ 位取反指令:
① CPL C ;C→C
② CPL bit ;(bit)→bit⒉ 位修正指令(6条)⑴ 位清0指令:
① CLR C ;0→C
② CLR bit ;0→bit⑶ 位置1指令:
① SETB C ;1→C
② SETB bit ;1→bitnull⑴ 位逻辑“与”运算指令:
① ANL C,bit ;C∧(bit)→C
② ANL C,/bit ;C∧(bit)→C
⑵ 位逻辑“或”运算指令:
① ORL C,bit ;C∨(bit)→C
② ORL C,/bit ;C∨(bit)→C
⒊ 位逻辑运算指令(4条)null⑶ 相对转移指令
SJMP rel ;PC+2→PC,PC+rel→PC五、控制转移类指令⒈ 无条件转移指令(3条)⑴ 长转移指令
LJMP addr16 ; addr15~0→PC, ⑵ 短转移指令
AJMP addr11 ; PC+2→PC, addr10~0→PC10~0, PC15~11不变⑷ 间接转移指令(散转指令)
JMP @A+DPTR ;A+DPTR→PCnull LJMP、AJMP、SJMP三条无条件转移指令的区别:① 转移范围不一样。
LJMP转移范围是64KB;
AJMP转移范围是与当前PC值同一2KB;
SJMP转移范围是当前PC-128B~+127B。
使用AJMP和SJMP指令应注意转移目标地址是否在转移范围内,若超出范围,程序将出错。② 指令字节不一样。
LJMP是3字节指令;
AJMP、SJMP是2字节指令。null⒉ 条件转移指令(13条) 条件转移指令根据判断条件可分为:
⑴ 判 C 转移
⑵ 判 bit 转移
⑶ 判 A 转移
⑷ 减1非0转移
⑸ 比较不相等转移指令
满足条件,则转移;
不满足条件,则程序顺序执行。 null② C=0转移指令:
JNC rel ; PC+2→PC,
若Cy=0,则PC+rel→PC,转移
若Cy=1,则程序顺序执行。⑴ 判C转移指令(2条)① C=1转移指令:
JC rel ; PC+2→PC,
若Cy=1,则PC+rel→PC,转移
若Cy=0,则程序顺序执行。null③(bit)=1转移并清0指令:
JBC bit,rel ; PC+3→PC,
;若(bit)=1,则PC+rel→PC,转移,且0→(bit)
;若(bit)=0,则程序顺序执行⑵ 判bit转移指令(3条)①(bit)=1转移指令:
JB bit,rel ; PC+3→PC,
若(bit)=1,则PC+rel→PC,转移
若(bit)=0,则程序顺序执行②(bit)=0转移指令:
JNB bit,rel ; PC+3→PC,
若(bit)=0,则PC+rel→PC,转移
若(bit)=1,则程序顺序执行null① A=0转移指令:
JZ rel ; PC+2→PC,
若A=0,则PC+rel→PC,转移
若A0,则程序顺序执行⑶ 判A转移指令(2条)② A0转移指令:
JNZ rel ; PC+2→PC,
若A0,则PC+rel→PC,转移
若A=0,则程序顺序执行null⑷ 减1非0转移指令(2条)② DJNZ direct,rel;PC+3→PC,(direct)-1→direct
若(direct)=0,则程序顺序执行
若(direct)0,则PC+rel→PC,转移 ① DJNZ Rn,rel ;PC+2→PC,Rn-1→Rn, 若Rn=0,则程序顺序执行
若Rn0,则PC+rel→PC,转移
null⑸ 比较转移指令(4条)① CJNE A,direct,rel;PC+3→PC,
;若A=(direct),则程序顺序执行
;若A≠(direct),则PC+rel→PC,转移
;且若A≥(direct),Cy=0;若A<(direct),Cy=1
② CJNE A,#data,rel ;PC+3→PC,
;若A=data,则程序顺序执行
;若A≠data,则PC+rel→PC,转移
;且若A≥data,Cy=0;若A<data,Cy=1
③ CJNE Rn,#data,rel;PC+3→PC,
;若Rn=data,则程序顺序执行
;若Rn≠data,则PC+rel→PC,转移
;且若Rn≥data,Cy=0;若Rn<data,Cy=1④ CJNE @Ri,#data,rel;PC+3→PC,
;若(Ri)=data,则程序顺序执行
;若(Ri)≠data,则PC+rel→PC,转移
;且若(Ri)≥data,Cy=0;若(Ri)<data,Cy=1null① 产生当前PC:PC+3→PC, ( PC+3是因为该指令为三字节指令 )
② 断口地址低8位保存到堆栈中: SP+1→SP,(PC)0~7→(SP)
③ 断口地址高8位保存到堆栈中: SP+1→SP,(PC)8~15→(SP)
④ 形成转移目标地址:addr16→PC⒊ 调用和返回指令LCALL addr16 ; PC+3→PC,SP+1→SP,(PC)0~7→(SP)
; SP+1→SP,(PC)8~15→(SP)
; addr16→PC⑴ 长调用指令LCALL指令执行步骤:null① 产生当前PC:PC+2→PC,
( PC+2是因为该指令为双字节指令 )
② 断口地址低8位保存到堆栈中: SP+1→SP,(PC)0~7→(SP)
③ 断口地址高8位保存到堆栈中: SP+1→SP,(PC)8~15→(SP)
④ 形成转移目标地址:addr11→PC0~10,PC11~15不变 ⑵ 短调用指令ACALL addr11; PC+2→PC,SP+1→SP,(PC)0~7→(SP)
; SP+1→SP,(PC)8~15→(SP)
; addr0~10→PC0~10 ,PC11~15不变 ACALL指令执行步骤:null① (SP)→PC8~15,SP-1→SP;
② (SP)→PC0~7, SP-1→SP。⑶ 返回指令:返回指令有子程序返回和中断返回两种:① RET ;子程序返回
② RETI ;中断返回返回指令执行步骤:null⒋ 空操作指令(1条) NOP为单机周指令,在时间上占用一个机器周期,常用于时间“微调”。NOP ;PC+1→PC小结:MCS-51指令集(五大类功能)小结:MCS-51指令集(五大类功能)数据传送类指令 (29条)
算术运算类指令 (24条)
逻辑运算及移位类指令 (24条)
控制转移类指令 (17条)
位操作(布尔操作)类指令 (17条) 小结(一)数据传送类指令(5种/29条)内部存储器间传送: (MOV——16条)
外部数据存储器RAM与累加器间传送:
(MOVX——4条)
程序存储器ROM向累加器传送:
(MOVC——2条)
数据交换:(XCH,XCHD,SWAP——5条)
堆栈操作: (PUSH,POP——2条)(一)数据传送类指令(5种/29条) 小结(二)算术运算类指令(6种/24条)(二)算术运算类指令(6种/24条)加法运算 (ADD——4条)
带进位加法运算 (ADDC——4条)
带借位减法运算 (SUBB——4条)
加1/减1操作 (INC,DEC——9条)
单字节乘/除法运算(MUL,DIV——2条)
十进制调整 (DA A——1条) 小结(三)逻辑运算及移位指令(5种/24条)(三)逻辑运算及移位指令(5种/24条)逻辑与运算: (ANL——6条)
逻辑或运算: (ORL——6条)
逻辑异或运算: (XRL——6条)
累加器清零/取反: (CLR,CPL——2条)
累加器移位操作:(RL,RLC,RR,RRC—4条) 小结(四)控制转移类指令(4种/17条)(四)控制转移类指令(4种/17条)无条件转移:
(LJMP,AJMP,SJMP,JMP——4条)条件转移(判断跳转):
(JZ,JNZ,CJNE,DJNZ——8条)子程序调用及返回:
(LCALL,ACALL,RET,RETI——4条)空操作: (NOP——1条) 小结(五)位操作类指令(4种17条)(五)位操作类指令(4种17条)位传送: (MOV——2条)位清零/置位: (CLR,SETB——4条)位逻辑与/或/非运算:
(ANL,ORL,CPL——6条)位条件转移:
(JC,JNC,JB,JNB,JBC——5条) 小结nullOVER !