1、 2022-11-26标号:标号:操作码助记符操作码助记符 第一操作数第一操作数,第二操作数,第二操作数;注释;注释2022-11-267 7种寻址方式,种寻址方式,111111条指令条指令运算速度运算速度单周期指令:单周期指令:6464条条双周期指令:双周期指令:4545条条四周期指令:四周期指令:2 2 条条功能功能数据传送类:数据传送类:2929条条算术运算类:算术运算类:2424条条逻辑运算类:逻辑运算类:2424条条控制转移类:控制转移类:1717条条位操作类:位操作类:1717条条2022-11-262022-11-26 2022-11-262022-11-262022-11-26
2、 操作数就包含在指令代码中,在操作操作数就包含在指令代码中,在操作码之后,称为立即数,用码之后,称为立即数,用“”表示。表示。如:如:MOV P1,MOV P1,#80H#80H MOV R7,MOV R7,#0F5H#0F5H MOV DPTR MOV DPTR,#1245H#1245H操作数存在程序存储器中2022-11-26 直接使用数所在单元的直接使用数所在单元的地址地址找到了操作数,找到了操作数,所以称这种方法为所以称这种方法为直接寻址直接寻址。如:如:MOV AMOV A,00H00H MOV A MOV A,P1P12022-11-26对选定的工作寄存器对选定的工作寄存器R0R0
3、R7R7、累加器、累加器A A、通用寄存器、通用寄存器B B、地址寄存器地址寄存器DPTRDPTR中的数进行操作。中的数进行操作。例:例:MOV AMOV A,R0R0;将将R0R0工作寄存器中的数据送到累加器工作寄存器中的数据送到累加器A A中中2022-11-26例如例如:“:“一本一本书书放在放在甲甲抽屉中,上了锁;其开锁的抽屉中,上了锁;其开锁的钥匙放在钥匙放在乙乙抽屉中,抽屉中,乙乙抽屉也上了锁。问如何才能取抽屉也上了锁。问如何才能取到哪本到哪本书书?”这就是一个这就是一个间接寻址间接寻址的问题,要经过两次寻址才能找的问题,要经过两次寻址才能找到哪本到哪本书书。而寄存器间接寻址也是同
4、样。而寄存器间接寻址也是同样。指令中寄存器的内容作为操作数存放的地址,间接寻指令中寄存器的内容作为操作数存放的地址,间接寻址寄存器前用址寄存器前用“”表示前缀。表示前缀。2022-11-26;书书放在放在甲甲抽屉中抽屉中;甲甲抽屉的钥匙放在抽屉的钥匙放在乙乙抽屉中抽屉中;取取书书,A中中 20HMOV 30H,#20HMOV R0,#30HMOV A,R0 2022-11-26操作数在程序存储器中2022-11-26如果如果R0中的值为中的值为2,则最终地址为则最终地址为100H+2为为102H,到到102H单元中找到单元中找到的是的是4。2022-11-26 2022-11-26 PCPC中
5、的中的当前当前内容称为内容称为基地址基地址(本指令后的字(本指令后的字节地址),本指令的节地址),本指令的机器码机器码第二字节给出的第二字节给出的数据称为数据称为偏移量(补码表示)偏移量(补码表示)。常用于跳转。常用于跳转指令。指令。PC(基地址)rel偏移量新的PC2022-11-26如:SJMP 08HPC+02H+08H 本指令后的PC如此说:rel偏移量应为08H2022-11-26SJMP 08H2022-11-26SJMP 08H80 F680 F612+F6082022-11-26SJMP 08H2022-11-26 对片内对片内RAMRAM的的位寻址区位寻址区和某些可和某些可位
6、寻址位寻址的特殊的特殊功能寄存器进行位操作时的寻址方式。功能寄存器进行位操作时的寻址方式。如如:SETB 80H;:SETB 80H;将将P0.0P0.0位置位置1 1 CLR C CLR C ;CyCy位清位清0 02022-11-262022-11-26片外片外程序程序存储器存储器ROMEPROM特殊功能特殊功能寄存器寄存器SFR片内片内RAM128字节字节片外片外数据数据存储器存储器RAMMOVCMOVXMOV PUSHPOPXCHXCHD2022-11-261 1 以累加器为目的操作数的指令以累加器为目的操作数的指令(4 4条)条)MOV AMOV A,RnRn ;RnARnAMOV
7、AMOV A,directdirect;(direct)A(direct)AMOV AMOV A,RiRi ;(R Ri i)A)AMOV AMOV A,#datadata;dataAdataA 将将源操作数指定内容源操作数指定内容送到送到A A中。中。2 2 以寄存器以寄存器RnRn为目的操作数的指令为目的操作数的指令 (3 3条)条)MOV MOV RnRn,A A MOV MOV RnRn,directdirect MOV MOV RnRn,#datadata 这组指令功能是把这组指令功能是把源操作数指定源操作数指定的内容送入当前工作寄存器,的内容送入当前工作寄存器,源操作数不变。源操作
8、数不变。2022-11-263 3 以直接地址为目的操作数的指令以直接地址为目的操作数的指令(5 5条)条)MOV directMOV direct,A AMOV directMOV direct,RnRnMOV direct1MOV direct1,direct2direct2MOV directMOV direct,RiRiMOV directMOV direct,#datadata 这组指令功能是把这组指令功能是把源操作数指定源操作数指定的内容送入由直接的内容送入由直接地址指出的片内存储单元。地址指出的片内存储单元。例:例:MOV 20H,AMOV 20H,R1MOV 20H,30HMO
9、V 20H,R1MOV 0A0H,#34HMOV P2,#34H2022-11-264 以间接地址为目的操作数的指令(3条)MOV MOV RiRi,A A ;A(Ri i)MOV MOV RiRi,directdirect;(direct)(Ri i)MOV MOV RiRi,#data#data;data(Ri i)功能:把源操作数指定的内容送入以功能:把源操作数指定的内容送入以R0R0或或R1R1为地址为地址 指针的片内存储单元中。指针的片内存储单元中。例:例:MOV R0MOV R0,A AMOV R1MOV R1,20H20HMOV R0MOV R0,#34H#34H2022-11-
10、26注意:注意:MOV Rn,Rn MOV Ri,Ri MOV Rn,Ri MOV#data,A 等等等指令是非法指令。等指令是非法指令。哇!好容易出错啊!2022-11-262022-11-265 5 十六位数的传递指令十六位数的传递指令(1条)MOV DPTRMOV DPTR,#data16data1680518051是一种是一种8 8位机,这是唯一的一条位机,这是唯一的一条1616位位立即数传递指立即数传递指令。功能:将一个令。功能:将一个1616位的立即数送入位的立即数送入DPTRDPTR中去。其中中去。其中高高8 8位送入位送入DPHDPH,低,低8 8位送入位送入DPLDPL。例:
11、例:MOV DPTRMOV DPTR,#1234H#1234H执行完了之后执行完了之后DPHDPH中的值为中的值为12H12H,DPLDPL中的值为中的值为34H34H。如果我们分别向如果我们分别向DPHDPH,DPLDPL送数,则结果也一样。送数,则结果也一样。如下面两条指令:如下面两条指令:MOV DPHMOV DPH,#35H#35H MOV DPL MOV DPL,#12H#12H。则就相当于执行了则就相当于执行了 MOV DPTRMOV DPTR,#3512H#3512H。2022-11-26A 外部数据外部数据存储器存储器程序程序存储器存储器 Ri,A DPTR,A A,Ri A,
12、DPTRMOVXMOVCA,A+PCA,A+DPTR外部存储器和外部存储器和A A累加器之间的传送累加器之间的传送MOVXMOVC2022-11-266 6 累加器累加器A A与片外与片外RAMRAM之间的数据传递类指令之间的数据传递类指令(4(4条条)MOVX A,Ri MOVX Ri,A MOVX A,DPTR MOVX DPTR,A说明:2022-11-26片外数据存储器不能直接寻址。下列为片外数据存储器不能直接寻址。下列为非法非法指令:指令:MOVX A,2000H MOVX 2100H,2000H 2022-11-267 读读程序存储器指令程序存储器指令(2条)条)2022-11-2
13、6 查表范围为查表范围为 64KB 程序存储器任意空间。程序存储器任意空间。2022-11-26如果如果R0中的值为中的值为2,则最终地址为则最终地址为100H+2为为102H,到到102H单元中找到单元中找到的是的是4。2022-11-268 堆栈操作堆栈操作(2 2条)条)2022-11-262022-11-269 9 交换指令交换指令(5 5条)条)XCH AXCH A,RnRn ;ARnXCH AXCH A,directdirect ;A(direct)XCH AXCH A,RiRi ;A(Ri)XCHD AXCHD A,RiRi ;A.3A.0(Ri).3(Ri).0SWAP ASW
14、AP A ;A.3A.0A.7A.4例:例:已知已知A A中的内容为中的内容为34H34H,R0R0指向的单元的内容为指向的单元的内容为56H56HMOV R6MOV R6,#29H#29HXCH AXCH A,R6R6SWAP ASWAP AXCH AXCH A,R6R6 XCHD AXCHD A,R0R0;R6=29H;A=29H,R6=34H;A=92H;A=34H,R6=92H;A=36H,(R0)=54H2022-11-26(40H)=H 50H=H A=H (41H)=H 51H=H R0=H 课堂练习1.设:内部RAM中,(40H)=50H,(41H)=60H,(50H)=30H
15、,(51H)=70H,执行下列片段后:a.MOV R0,40Hb.MOV A,R0c.INC R0d.MOV R0,Ab.MOV R0,#40H MOV A,R0 INC R0 MOV A,R0;R0=50H;R0=50H;A=30H;A=30H;R0=51H;R0=51H;(51H)=30H;(51H)=30H;R0=40H;R0=40H;A=50H;A=50H;(40)=51H;(40)=51H;A=51H;A=51H2022-11-262022-11-262022-11-26例:例:MOV AMOV A,#0AEH#0AEH ;-82D;-82D ADD A ADD A,#81H#81H
16、 ;-127D;-127D则执行完本条指令后,则执行完本条指令后,A A中的值为中的值为2FH;2FH;C=1C=1,AC=0AC=0,OV=1OV=1,P=1P=1。对无符号数:结果为对无符号数:结果为1 12FH;2FH;带符号数运算:带符号数运算:OV=1OV=1,有错,有错。2022-11-26ADDC AADDC A,RnRn;A ARnRnCYCYAAADDC AADDC A,directdirect;A A(direct)(direct)CYACYAADDC AADDC A,RiRi;A A(RiRi)CYACYAADDC AADDC A,#datadata;A Adatadat
17、aCYACYA用途:用途:将将A A中的值和其后面的值以及进位位中的值和其后面的值以及进位位C C中的中的值相加,最终结果存在值相加,最终结果存在A A,常用于多字节数运算中。,常用于多字节数运算中。2022-11-26 说明:说明:由于由于51单片机是一种单片机是一种8位机,所以只能做位机,所以只能做8位的数学运算,但位的数学运算,但8位运算的范围只有位运算的范围只有0255,这在实际工作中是不够的,因此就要进行扩展,这在实际工作中是不够的,因此就要进行扩展,一般是将一般是将2个个8位位(两字节两字节)的数学运算合起来,成的数学运算合起来,成为一个为一个16位的运算,这样,可以表达的数的范位
18、的运算,这样,可以表达的数的范围就可以达到围就可以达到065535。2022-11-26例:先做先做67H+A0H=107H67H+A0H=107H,而,而1 107H07H显然超过了显然超过了0FF0FFH H,因此最终保存在因此最终保存在A A中的是中的是07H07H,而,而1 1则到了则到了PSWPSW中的中的CYCY位了。换言之,位了。换言之,CYCY就相当于是就相当于是100H100H。然后再做然后再做10H+30H+10H+30H+CYCY,结果是,结果是41H41H,所以,所以最终的结果是最终的结果是4107H4107H。1067H+30A0H1067H+30A0H0001 00
19、00 0110 0111 0011 0000 1010 0000 0100 0001 0000 0111 1067H1067H30A0H30A0H4107H4107H2022-11-26设:1067H存在R1R0中,30A0H存在R3R2中,计算R1R0+R3R2,结果存在R5R4中。MOV A,R0ADD A,R2 ;R0+R2A和CYMOV R4,AMOV A,R1ADDC A,R3 ;R1+R3+CYA和CYMOV R5,A2022-11-26 先做先做67H+20H=87H67H+20H=87H,没有超过,没有超过0FF0FFH H,因此最终,因此最终保存在保存在A A中的是中的是87
20、H87H,而,而PSWPSW中的中的CY=0CY=0。然后再做然后再做10H+30H+10H+30H+CYCY,结果是,结果是40H40H,所以,所以最终的结果是最终的结果是4087H4087H。1067H+3020H1067H+3020H0001 0000 0110 0111 0011 0000 0010 0000 0100 0000 1000 0111 1067H1067H3020H3020H4087H4087H2022-11-262022-11-26 2022-11-262022-11-26SUBB A,Rn ;(;(A)()(Rn)()(C)SUBB A,directSUBB A,Ri
21、SUBB A,#dataDEC A ;(;(A)(A)1,以下类同。,以下类同。DEC RnDEC RiDEC direct 2022-11-262022-11-26OV=OV=P=P=1 1 0 0三三 乘法指令乘法指令MUL ABMUL AB ;A AB BBABA此指令的功能是将此指令的功能是将A A和和B B中的两个中的两个8 8位位无符号无符号数数相乘,两数相乘结果一般比较大,因此最终相乘,两数相乘结果一般比较大,因此最终结果结果用用1 1个个1616位数位数来表达,其中来表达,其中高高8 8位位放在放在B B中,中,低低8 8位位放在放在A A中。中。在乘积大于在乘积大于FFHFF
22、H时,时,0V0V置置1 1,否则,否则OVOV为为0 0;而;而CYCY总是总是0 0。例:例:A=4EHA=4EH,B=5DHB=5DH,执行指令,执行指令MUL ABMUL AB后,后,乘积是乘积是1C561C56H H,所以在,所以在B B中放的是中放的是1CH1CH,而,而A A中中放的则是放的则是56H56H。2022-11-262022-11-26解:解:MOV B,#100 DIV AB MOV 31H,A MOV A,#10 XCH A,B DIV AB SWAP A ADD A,B MOV 30H,A 2022-11-262022-11-26RL ARR ARLC ARRC
23、 AA.7 A.0A.7 A.0A.7 A.0CYCYA.7 A.02022-11-26例:若若A=5CHA=5CH,CY=1CY=1,执行,执行RLC ARLC A后,后,v 对对RLCRLC、RRCRRC指令,在指令,在CY=0CY=0时时 RLCRLC相当于相当于乘乘以以2 2 RRCRRC相当于相当于除除以以2 2结果:结果:A=B9HA=B9H,CY=0CY=0,P=1P=10101 11000101 11001 11011 10011011 10010 02022-11-26“与操作与操作”:ANL A,Rn ;(A)(A)(Rn),以下),以下类同。类同。ANL A,direct
24、ANL A,RiANL A,#dataANL direct,AANL direct,#data例(例(P1)=35H,使其高,使其高4位输出位输出0,低,低4位不变。位不变。解解 ANL P1,#0FH 此做法称为此做法称为“屏蔽屏蔽”位。位。2022-11-26“或操作或操作”:ORL A,Rn ORL A,directORL A,RiORL A,#dataORL direct,AORL direct,#data 2022-11-26 2022-11-26试试看:试试看:ANL AANL A,#0FH#0FH ;屏蔽;屏蔽A A的高的高4 4位位SWAP ASWAP AANL P1ANL P
25、1,#0FH#0FH ;清;清P1P1口高口高4 4位位ORL P1ORL P1,A A ;P1P1口高口高4 4位输出位输出A A的低的低4 4位;位;把累加器把累加器A A中的低中的低4 4位状态,通过位状态,通过P1P1口的高口的高4 4位输位输出,出,P1P1口的低口的低4 4位状态不变。位状态不变。2022-11-262022-11-262022-11-26 短转移类指令:短转移类指令:AJMP AJMP addr11addr11 长转移类指令:长转移类指令:LJMP LJMP addr16addr16 相对转移指令:相对转移指令:SJMP SJMP relrel 间接转移指令:间接
26、转移指令:JMP JMP A+DPTRA+DPTR(1 1)上面的前三条指令,统统理解成:上面的前三条指令,统统理解成:PCPC值改变,即值改变,即跳转到一个标号处。跳转到一个标号处。那么它们的区别何在呢?那么它们的区别何在呢?2022-11-26v跳转的范围不同。跳转的范围不同。短转移类指令:短转移类指令:AJMP AJMP addr11addr11 长转移类指令:长转移类指令:LJMP LJMP addr16addr16 相对转移指令:相对转移指令:SJMP SJMP relrel转移范围转移范围:2KB2KB64KB64KB-128-128+127+127 v指令长度不同指令长度不同v
27、原则上,所有用原则上,所有用SJMPSJMP或或AJMPAJMP的地方都可以用的地方都可以用 LJMPLJMP来替代。来替代。2022-11-26间接转移指令:间接转移指令:JMP JMP A+DPTRA+DPTR 本指令可代替众多的判别跳转指令,又称为本指令可代替众多的判别跳转指令,又称为散散转指令转指令,多用于多分支程序结构中。,多用于多分支程序结构中。(2 2)第四条指令与前三条指令相比有所不同第四条指令与前三条指令相比有所不同2022-11-26例、设例、设A中为键值,试编写按键值处理相应事件的程序段。中为键值,试编写按键值处理相应事件的程序段。解:解:MOV DPTR,#KYEG M
28、OV B,#03H MUL AB JMP A+DPTR KYEG:LJMP KYEG0 LJMP KYEG 2022-11-262022-11-26判判A内容是否为内容是否为0转移指令转移指令(2条)条)JZ JZ relrel ;如果;如果A=0A=0,则转移,否则顺序执行。,则转移,否则顺序执行。JNZJNZ relrel ;如果;如果A0A0,就转移。,就转移。2022-11-26 MOV AMOV A,R0R0 JZ L1JZ L1 MOV R1 MOV R1,#00H#00H AJMP L2 AJMP L2 L1 L1:MOV R1:MOV R1,#0FFH#0FFH L2L2:SJ
29、MP L2:SJMP L2 END END 在执行上面这段程序前:如果在执行上面这段程序前:如果R0=0R0=0,结果,结果R1=0FFHR1=0FFH。而如果而如果R0R0 0 0,则结果是,则结果是R1=00HR1=00H。2022-11-26CJNE ACJNE A,#datadata,relrel CJNE ACJNE A,directdirect,relrelCJNE CJNE RnRn,#datadata,relrelCJNE CJNE RiRi,#datadata,relrel此类指令的功能是将两个操作数比较,此类指令的功能是将两个操作数比较,如果两者如果两者相等相等,就,就顺序
30、执行顺序执行,如果,如果不相等不相等,就,就转移转移。2022-11-26例例2、设、设P1口的口的P1.0 P1.3为准备就绪信号输入端,当该四位为准备就绪信号输入端,当该四位为全为全1时,说明各项工作已准备好,单片机可顺序执行,否则,时,说明各项工作已准备好,单片机可顺序执行,否则,循环等待。循环等待。2022-11-26利用这些指令,可以判断两数是否利用这些指令,可以判断两数是否相等相等。但有时还想得知两数比较之后但有时还想得知两数比较之后哪个大哪个大,哪个小哪个小,本条指令也具有这样的功能:本条指令也具有这样的功能:如果两数不相等,则如果两数不相等,则CPUCPU还会用还会用CYCY(
31、进位位)(进位位)来反映哪个数大,哪个数小。来反映哪个数大,哪个数小。如果前面的数大,则如果前面的数大,则CY=0CY=0,否则,否则CY=1CY=1。因此在程序转移后再次利用因此在程序转移后再次利用CYCY就可判断出哪个就可判断出哪个数大,哪个数小了。数大,哪个数小了。2022-11-26 MOV A,R0 CJNE A,#10H,L1 MOV R1,#0 ;如R0=10H,则不转移R1=00H;AJMP L3L1:JC L2 ;如CY=1即 R010H,则转移 AJMP L3L2:MOV R1,#0FFHL3:SJMP L3因此最终结果是:本程序执行前,如果R0=10H,则R1=00H;如
32、果R010H,则R1=0AAH;如果R010H,则R1=0FFH。2022-11-26DJNZ DJNZ RnRn,relrelDJNZ directDJNZ direct,relrel2022-11-26 调用指令调用指令2022-11-26返回指令返回指令 2022-11-26空操作指令空操作指令 2022-11-262022-11-26位操作指令位操作指令(1717条条)MCS-51MCS-51单片机的硬件结构中,有一个位处理器单片机的硬件结构中,有一个位处理器(又称布尔处理器),它有一套位变量处理的指令集,(又称布尔处理器),它有一套位变量处理的指令集,包括包括位位变量变量传送传送、逻
33、辑逻辑运算、控制程序运算、控制程序转移转移等。等。在在MCS-51 MCS-51 中,有一部份中,有一部份RAMRAM和一部份和一部份SFRSFR是具有位是具有位寻址功能的。寻址功能的。2022-11-26位操作区位操作区:内部:内部RAM的的20H-2FH这这16个字节单元,个字节单元,即即128个位单元个位单元(位地址空间位位地址空间位007FH);可以位寻址的可以位寻址的SFR:8051中有一中有一些些SFRSFR是是可以进行可以进行位寻址位寻址的,这些的,这些SFRSFR的特点是其的特点是其字节地址均可字节地址均可被被8 8整除整除,如如A A累加器,累加器,B B寄存器、寄存器、PS
34、WPSW、IPIP(中断优先级控制寄存器)、(中断优先级控制寄存器)、IEIE、SCONSCON、TCONTCON、P0-P3;P0-P3;在进行位处理时,在进行位处理时,CYCY用作用作“位位累加器累加器”。2022-11-26 位传送指令(位传送指令(2条)条)MOV CMOV C,bitbit;bitbit C CMOV MOV bitbit,C C;C C bitbit这组指令的功能是实现位累加器(这组指令的功能是实现位累加器(CYCY)和其它位地址)和其它位地址之间的数据传递。之间的数据传递。例例:MOV CMOV C,P1.0P1.0;将;将P1.0P1.0的状态送给的状态送给C
35、C。MOV P1.0MOV P1.0,C C ;将;将C C中的状态送到中的状态送到P1.0 P1.0 ;引脚上去。;引脚上去。2022-11-26 位清位清0 0指令指令 CLR CCLR C ;使;使CY=0CY=0 CLR bit CLR bit ;使指令的位地址等于;使指令的位地址等于0 0。例例:CLR P1.0 CLR P1.0 ;即使;即使P1.0P1.0变为变为0 0 位置位置1 1指令指令 SETB CSETB C ;使;使CY=1CY=1 SETB bit SETB bit ;使指定的位地址等于;使指定的位地址等于1 1。例例:SETB P1.0 SETB P1.0;使;使
36、P.0P.0变为变为1 12022-11-26位逻辑运算指令位逻辑运算指令(6条)条)位与指令位与指令 ANL ANL C C,bitbit ;Cy与指定位的值相与,结果送CyANL ANL C C,/bit/bit ;先将指定的位地址中的值取出后取反,再和Cy相与,结果送回Cy。但但注意注意:指定指定的位地址中的值本身并不发生变化。的位地址中的值本身并不发生变化。例例:ANL C,/P1.02022-11-26位取反指令位取反指令 CPL CCPL C ;使;使CyCy值取反。值取反。CPL bitCPL bit ;使指定的位的值取反。;使指定的位的值取反。例例:CPL P1.0CPL P1
37、.0位或指令位或指令 ORL ORL C C,bitbitORL ORL C C,/bit/bit2022-11-26位条件转移指令(位条件转移指令(5条)条)判判CyCy转移指令转移指令 JC relJNC rel 第一条指令的功能是如果Cy=1就转移,否则就顺序执行。第二条指令则和第一条指令相反,即如果Cy=0就转移,否则就顺序执行。2022-11-26判位变量转移指令判位变量转移指令 JB bit,relJNB bit,rel JBC bit,rel第一条指令:如果指定的(bit)=1,则转移,否则顺序执行,第二条指令功能相反。第三条指令是如果指定的(bit)=1,则转移,并把该位清0,否则顺序执行。2022-11-26例例 编程通过编程通过P1.0线连续输出线连续输出256个宽度为个宽度为5个机器周期长的方个机器周期长的方波。波。解:解:MOV R0,#00H CLR P1.0 LOOP:CPL P1.0 NOP NOP DJNZ R0,LOOP 2022-11-26
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。