1、1 单片机原理及应用北京化工大学北京化工大学信息科学与技术学院信息科学与技术学院郭郭 青青第三章 80C51指令系统本章重点本章重点寻址方式寻址方式指令格式指令格式操作结果及对标志位影响操作结果及对标志位影响3.1 概述分类分类数据传送类指令数据传送类指令 2929数学运算类指令数学运算类指令 2424逻辑运算类指令逻辑运算类指令 2424控制转移类指令控制转移类指令 1717位操作指令位操作指令 1717111111条指令条指令按指令长度分类按指令长度分类单字节指令单字节指令双字节指令双字节指令三字节指令三字节指令指令执行时间指令执行时间1212个振荡周期个振荡周期 64642424个振荡周
2、期个振荡周期 45454848个振荡周期个振荡周期 2 2指令格式指令格式标号:操作码标号:操作码 (目的操作数),(源操作数)(目的操作数),(源操作数) ;注释;注释指令的符号地址指令的符号地址由字母打头的字母数字串组成,长度一由字母打头的字母数字串组成,长度一般不超过般不超过6 6个符号个符号指令操作的性质指令操作的性质用规定的汇编语言助记符表示指令操作的对象3.2 寻址方式和寻址空间概念:概念:说明操作数所在的位置(地址),把操作数提取说明操作数所在的位置(地址),把操作数提取出来的方法出来的方法基本寻址方式:1 1、寄存器寻址、寄存器寻址2 2、直接寻址、直接寻址3 3、寄存器间接寻
3、址、寄存器间接寻址4 4、立即寻址、立即寻址5 5、相对寻址、相对寻址 6 6、变址寻址、变址寻址7 7、位寻址、位寻址一、寄存器寻址操作数操作数 通用寄存器的内容通用寄存器的内容表示符号表示符号 寄存器名称寄存器名称寻址范围寻址范围工作寄存器工作寄存器Rn(R0R7)寄存器寄存器ACC(累加器累加器A)寄存器寄存器B,DPTR,位寄存器,位寄存器Cy880C52片内数据片内数据RAM 位寻址区R7R0 3组R7R0 2组R7R0 1组R7R0 0组20H18H10H08H00H寄寄存存器器30H7FH80HFFH特殊特殊功能功能寄存寄存器器( (SFR) )RAM64KBFFFFH0000H
4、片内数据存储器片外数据存储器ACCDPTRB二、直接寻址操作数操作数 指令中直接地址的内容指令中直接地址的内容寻址范围:1、内部数据、内部数据RAM的低的低128个字节单元个字节单元2、特殊功能寄存器、特殊功能寄存器3、位地址空间、位地址空间通用符号:通用符号:direct1080C52片内数据片内数据RAM 位寻址区位寻址区R7R0 3组R7R0 2组R7R0 1组R7R0 0组20H18H10H08H00H寄寄存存器器30H7FH80HFFH特殊特殊功能功能寄存寄存器器( (SFR) )RAM64KBFFFFH0000H片内数据存片内数据存储储器器片外数据存片外数据存储储器器三、寄存器间接
5、寻址方式指令指定的寄存器内容为操作数地址指令指定的寄存器内容为操作数地址间址寄存器间址寄存器 R0, ,R1, ,DPTR, ,SP寻址范围寻址范围1、内部、内部RAM的低的低128字字节节( (00H7FH) ) R0, R1 (Ri ,i=0,1)2、外部、外部RAM的的64KB( (0000HFFFFH) ) DPTR, R0, R1符号符号 寄存器名寄存器名3、堆栈区、堆栈区 SPSP为间址寄存器为间址寄存器1280C52片内数据片内数据RAM 位寻址区R7R0 3组R7R0 2组R7R0 1组R7R0 0组20H18H10H08H00H寄寄存存器器30H7FH80HFFH特殊特殊功能
6、功能寄存寄存器器( (SFR) )RAM64KBFFFFH0000H片内数据存片内数据存储储器器片外数据存片外数据存储储器器四、立即寻址方式指令直接给出操作数,操作数为指令直接给出操作数,操作数为8 8位或位或1616位位二进制数,称立即数二进制数,称立即数寻址范围程序存储器中的立即数程序存储器中的立即数通用符号通用符号: :#data (8位),位),#data16( (16位)位)五、相对寻址方式以以PC当前值为基址,加上指令中给出的偏当前值为基址,加上指令中给出的偏移量(移量(rel)形成有效的程序转移地址。)形成有效的程序转移地址。控制转移类指令控制转移类指令转移范围: :以以PC当前
7、值为起始地址,相对当前值为起始地址,相对偏移在偏移在+127 -128个字节单元之间。个字节单元之间。偏移量偏移量rel 八位二进制补码八位二进制补码1005H: :JC 80H执行过程:执行过程:读指令,完成后读指令,完成后 (PC)=(PC)+2如如 C=1,则,则 (PC)=(PC)+rel 转移至转移至 1007H-80H=0F87H 单元单元如如C=0 则执行则执行1007H单元中的指令单元中的指令后向后向128个个单单元元前向前向127个个单单元元1005H 40H1006H 80H1007H 0F87H1086H六、变址间接寻址基址寄存器内容加上间址寄存器内容(地址偏基址寄存器内
8、容加上间址寄存器内容(地址偏移量)为有效地址移量)为有效地址基址寄存器: :PC, ,DPTR变址寄存器:A寻址范围:程序存储器寻址范围:程序存储器例:例: MOVC A, ,A+DPTR 设设 A=11H DPTR=02F1H操作数地址为为 02F1H+11H=0302H操作:操作:( (0302H) )A七、位寻址MCS-51设有独立的位处理器,位地址一般用直接位地设有独立的位处理器,位地址一般用直接位地址方式给出,可归入直接寻址方式址方式给出,可归入直接寻址方式寻址范围: 位寻址内部位寻址内部RAM 128位位 可位寻址的可位寻址的SFR 82位位位地址的表示方式:1 1、直接地址(位地
9、址)、直接地址(位地址)2 2、位名称、位名称3 3、第几单元第几位,寄存器名、第几单元第几位,寄存器名+ +位位4 4、用伪指令指定的符号地址、用伪指令指定的符号地址通用符号 bit例:例: PSW中中F0(用户标志)可表示如下:(用户标志)可表示如下:D5HF0PSW.5AF( (AF EQU F0) )193.3 指令系统3.3.1 数据传送类指令按操作方式,分为三种:按操作方式,分为三种: 数据传送数据传送数据交换数据交换栈操作栈操作一、普通传送类指令格式:MOV (目的操作数),(源操作数)操作码助记符操作码助记符操作:将源操作数单元内容,传送到目的操作数单元中,源操作数内容不变。不
10、影响标志位Cy,AC和OV。操作数的组合关系1、立即数的传送MOV A, #data(A)#dataMOV Rn, #data (Rn)#dataMOV Ri, #data(Ri)#dataMOV direct, #data(direct)#dataMOV DPTR, #data16(DPTR)#data说明:a、MOV A,#data将将8位立即数送入累加器位立即数送入累加器A中中例:例:MOV A,#80H 操作结果:操作结果: (A)= 80Hb、 、MOV Rn, ,#data n=07将将8位立即数送入工作寄存器位立即数送入工作寄存器Rn中中例:例:MOV R4, ,#80H操作结果
11、:操作结果: (R4)= 80Hc、 、MOV Ri, #data将8位立即数送入由Ri指定的地址单元中,i=0,1。Ri中的地址中的地址为为00H7FH( (8051) )00HFFH( (8052) )注:仅寻址内部注:仅寻址内部RAM,不能寻址,不能寻址SFR例:例:MOV R0,#32H 设设 (R0)=70H , (70H)=11H执行结果:(70H)=32Hd: :MOV direct, ,#data将将8位立即数送入由位立即数送入由direct直接寻址的地直接寻址的地址单元中。址单元中。direct:00HFFH,8位二进制地址码 寻址内部RAM(00H7FH)及SFR例:例:M
12、OV 70H, ,#70H MOV P0, ,#70H MOV 80H, ,#70He: :MOV DPTR, ,#data唯一的16位数据传送指令,把16位立即数送入DPTR中例:例:MOV DPTR, ,#2034H执行结果:( (DPH) )=20H ( (DPL) )=34H2、内部数据存储器与累加器A传送数据MOV A, direct(A)(direct)MOV direct, A(A)(direct)MOV A, Rn(A)(Rn)MOV Rn, A(A)(Rn)MOV A, Ri(A)(Ri)MOV Ri, A(Ri)(A)寻址方式的组合例:例:MOV R1, ,#82H MOV
13、 A, ,R180C51指令错误指令错误因为因为82H是是DPL的地址值,对于的地址值,对于SFR,不,不能使用间接寻址方式能使用间接寻址方式正确指令:正确指令:MOV A, ,DPL 或或 MOV A, ,82H80C52 正确,寻址内部正确,寻址内部RAM3、内部数据存、内部数据存储储器中器中Rn、 、SFR和片内数据和片内数据RAM之之间间的数据的数据传传送送MOV direct,direct(direct目的目的)( (direct源)源)MOV direct, Rn(direct)(Rn)MOV Rn, direct(direct)(Rn)MOV direct, Ri(direct)
14、(Ri)MOV Ri, direct(Ri)(direct)例例1:设:设PSW中标志位中标志位RS1,RS0为为“11”,则选中第三组工作寄存器则选中第三组工作寄存器MOV 40H, ,R0MOV 40H, ,18H结果相同用立即寻址指令为片内用立即寻址指令为片内RAM中中20H,25H和和P1口上置数口上置数例例2: :MOV 20H, #25HMOV 25H, #10HMOV P1, #0CAH执行结果 ( (20H) )=25H,(,(25H) )=10H ( (P1) )=CAH将以上状态作为初值,执行以下程序,将以上状态作为初值,执行以下程序,结果如何结果如何MOV R0, #20
15、HMOV A, R0MOV R1, AMOV B, R1MOV R1, P1MOV P3, P1(R0)=20H(A)=(R0)=(20H)=25H(R1)=(A)=25H(B)=(R1)=(25H)=10H(R1)=P1 (25H)=CAHP3=P1=CAH(A)=?(R1)=?(B)=?(25H)=?(P3)=?(P1)=?(20H)=?25H25H10HCAHCAHCAH25H二、外部数据存储器的数据传送指令二、外部数据存储器的数据传送指令只能只能间接寻址间接寻址,且只能与,且只能与累加器累加器A进行数据传送进行数据传送格式:MOVX (目的操作数),(源操作数)MOVX A, DPTR
16、(A)(DPTR)MOVX DPTR, A(DPTR)(A)MOVX A, Ri(A)(Ri)MOVX Ri, A(Ri)(A)例:例: 若片外数据存储单元中,(若片外数据存储单元中,(3007H)=60HMOV DPTR, #3007HMOVX A, DPTR结果:结果:(A)=60H使用使用Ri作间址寄存器,此时需用作间址寄存器,此时需用P2口输出高口输出高八位地址,应事先预置八位地址,应事先预置P2,Ri的值的值以下程序功能与上例相同:以下程序功能与上例相同:MOV P2 , #30HMOV R0 , #07HMOVX A, R0三、程序存储器向累加器三、程序存储器向累加器A A传送指令
17、传送指令MOVCMOVCMOVC A , A+PC(PC)(PC)+1(A)(A)+(PC)MOVC A, A+DPTR(A)(A)+(DPTR) ))功能:把A中内容与基址寄存器(PC,DPTR)内容相加,求得程序存储器某单元地址,再将该地址单元内容送累加器A8位无符号位无符号整数整数说明:说明:1、以、以PC作为基址寄存器,因为作为基址寄存器,因为PC值不能任意更值不能任意更改,所以查表范围为改,所以查表范围为PC当前值开始后的当前值开始后的256字节。字节。偏移量计算式:偏移量计算式:DIS=表首地址(该指令所在地址表首地址(该指令所在地址+1)2、以、以DPTR作为基址寄存器,因为作为
18、基址寄存器,因为DPTR的内的内容可以通过赋值改变,使表格可以设置在容可以通过赋值改变,使表格可以设置在64KB程序存储器的任意地址空间。程序存储器的任意地址空间。例例1:编制根据累加器:编制根据累加器A中的数(中的数(09)查其平方表的)查其平方表的子程序。子程序。COUNT:PUSH DPH; 保护保护DPTR内容内容 PUSH DPL; MOV DPTR,#TABLE ;赋表首地址给;赋表首地址给DPTR MOVC A, A+DPTR ; 根据根据A中内容查表中内容查表 POP DPL; 恢复恢复DPTR内容内容 POP DPH RET; 返回主程序返回主程序 ORG 1000HTABL
19、E: :DB 00 DB 01 DB 04 DB 09 DB 16 DB 25 DB 36 DB 49 DB 64 DB 81DB:伪指令,作用是:伪指令,作用是把其后的值存入由标把其后的值存入由标号开始的连续单元中号开始的连续单元中例例2:编子程序根据:编子程序根据A中二进制数查其中二进制数查其ASCII码码BITOASC: : ADD A, ,#02HMOVC A, A+PCSJMP BARETDB 30H, 31H, 32H, 33HDB 34H, 35H, 36H, 37HDB 38H, 39H, 41H, 42HDB 43H, 44H, 45H, 46HRETTABLE:BARET:
20、;加偏移量调整;加偏移量调整;查表;查表;返回主程序;返回主程序四、数据交换指令1、字节交换指令XCH A, RnXCH A, directXCH A, Ri (A) (Rn) (A) (direct) (A) (Ri) 例:例:设设( (R0) )=20H,(,(A) )=3FH,(,(20H) )=75H执行指令:执行指令:XCH A, ,R0执行结果执行结果:( (A) )=75H,(,(20H) )=3FH2、半字节交换指令XCHD A, Ri (A30) (Ri)30)常用于常用于BCD码处理码处理例:例:设设( (R1) )=30H,(,(A) )=67H,(,(30H) )=84
21、H执行指令:执行指令:XCHD A, R1执行结果执行结果:( (A) )=64H ( (30H) )=87H3、累加器A高4位与低4位内容互换指令SWAP A ;(;( A 47) ) ( (A 03) )例:例:设设( (A) )=0CAH执行指令:执行指令:SWAP A执行结果执行结果:( (A) )=0ACH5、堆栈操作类指令PUSH direct( (SP) ) ( (SP) )+1 (SP) (direct)POP direct(direct) (SP) (SP) (SP)-1要点:入栈操作,先执行要点:入栈操作,先执行SP+1,再入栈,再入栈 出栈操作,先出栈,再执行出栈操作,先
22、出栈,再执行SP-1例:在中断响应时,(例:在中断响应时,(SP)=09H,数据指针,数据指针DPTR的内容为的内容为0123H执行以下指令:执行以下指令:PUSH DPLPUSH DPH(SP)+1,使(,使(SP)=0AH(DPL)压入)压入0AH单元单元(SP)+1,(,(SP)=0BH(DPH)压入)压入0BH单元单元执行结果:执行结果: ( (0AH) )=23H( (0BH) )=01H( (SP) )=0BH堆栈操作需遵循先入后出,后入先出原则,堆栈操作需遵循先入后出,后入先出原则,才能保持原单元内容不变才能保持原单元内容不变例:例:设设( (DPTR) )=0123HPUSH
23、DPHPUSH DPL.POP DPLPOP DPH执行结果执行结果:(DPTR)=0123H如执行:PUSH DPHPUSH DPLPOP DPHPOP DPL执行结果:执行结果:( (DPTR) )=2301H3.3.2 算术运算类指令类型:加,减,乘,除,增量、减量以及二类型:加,减,乘,除,增量、减量以及二十进制调整指令十进制调整指令ADD、ADDC、SUBB指令的执行将影响标指令的执行将影响标志位(志位(PSW中的中的OV,Cy,AC及及P)要求掌握要求掌握指令的操作结果指令的操作结果对标志位的影响对标志位的影响一、加法指令一、加法指令ADD 目的操作数目的操作数 累加器累加器A 源
24、操作数源操作数 4种寻址方式种寻址方式ADD A,Rn (A) (A)+(Rn) ADD A,direct (A) (A)+(direct)ADD A,Ri (A) (A)+(Ri)ADD A,#data (A) (A)+#data运算均针对无符号二进制数进行,但结合运算均针对无符号二进制数进行,但结合OV标志标志可实现有符号数运算。可实现有符号数运算。结果将影响结果将影响OV,Cy,AC,P标志标志A源源+A当最高位有进位,当最高位有进位,Cy=1位位3向位向位4有进位,有进位,AC=1OV取决于取决于6、7两位的进位情况,同时两位的进位情况,同时有进位或无进位,则有进位或无进位,则OV=0
25、;只有一位;只有一位有进位,有进位,OV=1A中有偶数个中有偶数个1,P=0;否则,;否则,P=1例:设(例:设(A)=0C3H,(,(R0)=0AAH 执行指令:执行指令:ADD A,R0 写出执行结果及对标志位影响写出执行结果及对标志位影响 (A) 1 1 0 0 0 0 1 1 + (R0) 1 0 1 0 1 0 1 0 0 1 1 0 1 1 0 1C=1AC=0OV=1P=1(A)=6DH只对有符号数运算有只对有符号数运算有意义。两负数相加,意义。两负数相加,结果为正数,溢出结果为正数,溢出例:设(例:设(A)=0C3H,(,(R0)=0AAH 执行指令:执行指令:ADD A,R0
26、 写出执行结果及对标志位影响写出执行结果及对标志位影响 (A) 1 1 0 0 0 0 1 1 + (R0) 1 0 1 0 1 0 1 0 0 1 1 0 1 1 0 1C=1AC=0OV=1P=1(A)=6DH无符号数无符号数 195 + 170 = 365有符号数有符号数 -61 + (-86) = -147 109溢出 二、带进位加法指令ADDCADDC A, Rn ; (A) (A)+(C)+(Rn)ADDC A,direct ; (A) (A)+(C)+(direct)ADDC A,Ri ; (A) (A)+(C)+(Ri)ADDC A, #data ; (A) (A)+(C)+(
27、#data)常用于多字节加法常用于多字节加法例:设(例:设(A)=0C3H,(,(R0)=0AAH,C=1 执行指令:执行指令:ADDC A,R0 (A) 1 1 0 0 0 0 1 1+ (C) 0 0 0 0 0 0 0 1 1 1 0 0 0 1 0 0+(R0) 1 0 1 0 1 0 1 0 0 1 1 0 1 1 1 0C=1AC=0OV=1P=1(A)=6EH三、带借位减法指令SUBBSUBB A,Rn ; (A) (A)-(C)-(Rn)SUBB A,direct ; (A) (A)-(C)-(direct)SUBB A,Ri ; (A) (A)-(C)-(Ri)SUBB A,
28、#data ; (A) (A)-(C)-#data影响标志位:最高位有借位,最高位有借位,Cy=1位位3向位向位4有借位,有借位,AC=1最高两位同时有借位或无借位,最高两位同时有借位或无借位,OV=0;只有一位有借位,;只有一位有借位,OV=1例:设(例:设(A)=0C9H,(,(30H)=54H,C=1 执行:执行:SUBB A,30H (A) 1 1 0 0 1 0 0 1- (C) 0 0 0 0 0 0 0 1 1 1 0 0 1 0 0 0- (30H) 0 1 0 1 0 1 0 0 0 1 1 1 0 1 0 0C=0AC=0OV=1P=0(A)=74H只有在符号数相减时,只有
29、在符号数相减时,OV才意味着溢出与否,如出才意味着溢出与否,如出现以下两种情况,现以下两种情况,OV置置1:负负-正正=正正 正正-负负=负负四、增量指令INCINC A ; (A) (A)+1INC Rn ; (Rn) (Rn)+1INC direct ; (direct) (direct)+1INC Ri ; (Ri) (Ri)+1INC DPTR; (DPTR) (DPTR)+1操作:指定变量加操作:指定变量加1,结果仍存于原地址单,结果仍存于原地址单元中。除元中。除P外,不影响任何标志位。外,不影响任何标志位。例:设(例:设(R0)=7EH,(,(7EH)=0FFH (7FH)=40H
30、执行下列指令:执行下列指令:INC R0 ;INC R0 ;INC R0 ;(R0)=(R0)+1, (7EH)=00H(R0)=(R0)+1, (7FH)=41H(R0)=(R0)+1, (R0)=7FH运行结果:运行结果:(R0)=7FH,(,(7EH)=00H(7FH)=41H例:执行指令序列例:执行指令序列MOV DPTR, ,#1FFEH; ;INC DPTR ; ;INC DPTR ; ;INC DPTR ; ;( (DPTR) )=1FFEH( (DPTR) )=1FFFH( (DPTR) )=2000H( (DPTR) )=2001H五、减量指令DECDEC A ; (A) (
31、A)-1DEC Rn ; (Rn) (Rn)-1DEC direct ; (direct) (direct)-1DEC Ri ; (Ri) (Ri)-1操作:指定变量减操作:指定变量减1 1,结果送回原地址单元,结果送回原地址单元,不影响标志位(除不影响标志位(除P P)。)。设(设(40H)=00H 执行执行 DEC 40H结果结果:(40H)=FFH不影响标志位不影响标志位六、乘法指令MUL AB ; ;( (A) )07( (B) )815( (A) )*( (B) )影响标志位:影响标志位:如乘积如乘积255 (0FFH) (即(即B0) ,OV=1C总是被清总是被清0,即,即C=0A
32、C不变,影响不变,影响P例:设(例:设(A)=80H(128),(),(B)=32H(50)执行指令:执行指令:MUL AB结果结果:乘积为:乘积为1900H(6400)( (A) )=( (B) )=00H19HOV=Cy=P=100七、除法指令DIV AB ;(A)(B)商商余数余数(A)/(B)对标志位影响:对标志位影响:当当B中除数为中除数为00H,除法运算结果为不定值,除法运算结果为不定值,则则A、B中内容均为不定值,中内容均为不定值,OV置置1C=0例:例: (A)=87H(135),(),(B)=0CH(12) DIV AB(A)=(B)=0BH(11)03HOV=C=00八、二
33、十进制调整指令DA A ; 调整调整A中内容为中内容为BCD码码调整方法:调整方法:根据根据C和和AC的状态,并结合的状态,并结合A的内容的内容IF (A03)9 OR (AC)=1, THEN (A03)=(A03)+06H;IF (A47)9 OR (C)=1 ,THEN (A47)=(A47)+60H因为指令要利用因为指令要利用C和和AC,所以必须跟在,所以必须跟在加法指令(加法指令(ADD,ADDC)后面)后面根据根据A中的数值及中的数值及PSW相应标志位的状态,可相应标志位的状态,可能的操作为能的操作为A加加06H,60H,66H例:例: (A)=0101 0110B(56) (R3
34、)=0110 0111B(67)以上均为)以上均为BCD码码 (C)=0执行指令执行指令: ADDC A,R3 DA A (A) 0 1 0 1 0 1 1 0+(R3) 0 1 1 0 0 1 1 1 1 0 1 1 1 1 0 1A309,AC=0A749,C=0+66H调整调整+ 0 1 1 0 0 1 1 0 0 0 1 0 0 0 1 1结果:结果: (A)=23H (C)=1对于无符号对于无符号BCD码运算,码运算,56+67=123使用此指令条件:使用此指令条件:1、两个操作数均为压缩、两个操作数均为压缩BCD码码2、不适合减法和增、不适合减法和增1运算运算例:对于十进制减法运算
35、,可采用补码相加的方法例:对于十进制减法运算,可采用补码相加的方法 即用即用9AH减去减数得到以十为模的补码减去减数得到以十为模的补码设被减数存设被减数存30H单元,减数存单元,减数存40H单元,结果单元,结果存存50H单元。程序如下:单元。程序如下:CLR C ;MOV A,#9AH;SUBB A, 40H ;ADD A , 30H;DA A ;MOV 50H, A清进位位清进位位求减数的十补码求减数的十补码补码相加补码相加调整至调整至BCD码码3.3.3 逻辑运算类指令按操作数分为两类:单操作数指令双操作数指令针对累加器A进行A与第二操作数之间进行操作:清零、求反、移位,与、或、异或一、单
36、操作数逻辑运算类指令1、累加器、累加器A清零指令清零指令 CLR A; (A) 02、累加器求反指令、累加器求反指令 CPL A; (A) (A)例:设(例:设(A)=0AAH(10101010B) 执行:执行:CPL A结果:结果: (A)=01010101B(55H)3、累加器、累加器A循环左移指令循环左移指令 RL A;例:例: (A)=0C5H(1100 0101B)RL A(A)=1000 1011B=8BH734、累加器、累加器A连同进位位连同进位位C循环左移指令循环左移指令RLC A;例:例: ( (A) )=45H( (0100 0101 B),(),(C) )=1RLC A
37、; ;( (A) )=1000 1011B=8BH( (C) )=05、累加器、累加器A循环右移指令循环右移指令RR A ; ;6、累加器、累加器A连同进位位连同进位位C循环右移指令循环右移指令RRC A ; ;例:例: (A)=0C5H(1100 0101B),(),(C)=1执行指令执行指令: RRC A结果:结果: (A)=1110 0010B=0E2H(C)=1二、双操作数逻辑运算类指令1、逻辑、逻辑“与与”指令指令 ANL A , Rn ANL A , directANL A , RiANL A , #data 以以A为第一操作数,为第一操作数,逻辑逻辑“与与”运算的结运算的结果存入
38、果存入AANL direct, ,AANL direct, ,#data目的操作数为目的操作数为direct,源操作数为源操作数为A和立即数和立即数与指令常用于屏蔽某些不用位。与指令常用于屏蔽某些不用位。方法:欲屏蔽位该位与方法:欲屏蔽位该位与“0”相相“与与”, 保留位与保留位与“1”相相“与与”例例 ANL A,#1111 0000B; 屏蔽低屏蔽低4位,高位,高4位不变位不变2、逻辑“或”指令ORL A , RnORL A , directORL A , RiORL A , #dataORL direct , AORL direct , #dataORL指令常用于使字节中某些位置指令常用
39、于使字节中某些位置1方法:欲置方法:欲置1的位与的位与“1”相或,相或, 欲保留不变的位与欲保留不变的位与“0”相或相或如如 ORL A,#0FH; 高高4位不变,低位不变,低4位置位置13、逻辑“异或”指令XRL A , RnXRL A , directXRL A , RiXRL A , #dataXRL direct , AXRL direct , #dataXRL 指令可用于对某些位取反指令可用于对某些位取反方法:欲取反的位用方法:欲取反的位用“1”去异或,保留位用去异或,保留位用“0”去异或去异或如如 XRL A,#0FH;高;高4位不变,低位不变,低4位取反位取反例:例: 设设( (
40、A) )=0C3H( (1100 0011B) ) ( (R0) )=0AAH( (1010 1010B) )分别执行以下指令:分别执行以下指令:ANL A, ,R0 ; ;ORL A, ,R0 ; ;XRL A, ,R0 ; ;( (A) )=1000 0010B=82H( (A) )=1110 1011B=0EBH( (A) )=0110 1001B=69H3.3.4 控制转移类指令3类:类:无条件转移无条件转移条件转移条件转移子程序调用及返回子程序调用及返回一、无条件转移指令1、绝对无条件转移、绝对无条件转移AJMP addr11;(PC) (PC)+2(PC 010) addr 010
41、(PC 1115)不变)不变addr11:11位地址,是转移目的地址的低位地址,是转移目的地址的低11位。位。 在汇编语言程序中,可写成在汇编语言程序中,可写成4位位16进制地址,进制地址,也可写成代表也可写成代表16位地址的标号(符号地址)形式。位地址的标号(符号地址)形式。注:不常用,注:不常用,MCS48兼容指令兼容指令转移范围:转移范围:2K字节字节例例1: 0345H:AJMP addr11 addr11取值可为取值可为000 0000 0000B111 1111 1111B执行时执行时 (PC)=(PC)+2=0347H15 14 13 12 11 10 9 8 7 6 5 4 3
42、 2 1 00347H: 0 0 0 0 0 0 1 1 0 1 0 0 0 1 1 1 B转移目标地址范转移目标地址范围:围:PC 1115不变不变0 0 0 0 0 0 0 0 0 0 0 B 1 1 1 1 1 1 1 1 1 1 1 B有效转移地址范围:有效转移地址范围: 0000H07FFH例例2: 07FFH: AJMP adr11(PC)+2=07FFH+2=0801H0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 1B0 0 0 0 0 0 0 0 0 0 1B1 1 1 1 1 1 1 1 1 1 1B0801H0801H0FFFH转移转移范围范围转移范围:包括当
43、前指令的下一条指令在内的转移范围:包括当前指令的下一条指令在内的同一同一2K字节内字节内 addr11:在:在0801H0FFFH范围内范围内例例3: 0345H:AJMP 0123H 2567H:AJMP 29ABH是否正确是否正确正确正确错误错误2567H:0 0 1 0 0 1 0 1 0 1 1 0 0 1 1 1 B1 1 1 1 1 1 1 1 1 1 1 B27FFH转移地址最大为转移地址最大为27FFH,29ABH大于大于27FFH,超出有效转移地址范围超出有效转移地址范围2、长转移指令、长转移指令LIMP addr16 ; (PC) addr16转移范围:转移范围: 64KB
44、 3、相对转移指令、相对转移指令SJMP rel ;(PC) (PC)+2(PC) (PC)+relrel:8位二进制补码,可写成符号地址的形式位二进制补码,可写成符号地址的形式转移范围:转移范围:PC当前值为基准,当前值为基准,-128+127例:例: 0345H:SJMP relPC 当前值:当前值:0347H向后向后128字节字节 02C7H向前向前127字节字节 03C6Hrel=80Hrel=7FH当当rel取值为取值为FEH(-2),则目的地址与源地址相),则目的地址与源地址相同同如如 设设rel=FEH,执行指令,执行指令 HERE:SJMP HERE程序在此指令处无限循环程序在
45、此指令处无限循环4、间接转移指令、间接转移指令JMP A+DPTR ; (PC) (A)+(DPTR)多分支转移指令,多分支转移指令,DPTR内容为多分支转移程内容为多分支转移程序的首地址,由累加器序的首地址,由累加器A的内容来选择其中的的内容来选择其中的某一个分支转移指令某一个分支转移指令例:例:MOV DPTR , #JMP_TBLJMP A+DPTR.AJMP LABEL0AJMP LABEL1AJMP LABEL2AJMP LABEL3JMP_TBL:A中内容为偶数中内容为偶数分支转移表分支转移表不超过不超过256B二、条件转移指令二、条件转移指令均为相对寻址方式,指令提供偏移量均为相
46、对寻址方式,指令提供偏移量rel,转,转移范围为移范围为PC当前值的当前值的-128+1271、判零转移指令、判零转移指令JZ rel ;(PC) (PC)+2如(如(A)=0,则(,则(PC)=(PC)+rel否则,程序顺序执行否则,程序顺序执行JNZ rel ; (PC) (PC)+2如(如(A)=0,则(,则(PC)=(PC)+rel否则,程序顺序执行否则,程序顺序执行例:将外部数据存储器的一个数据块传送到内部数例:将外部数据存储器的一个数据块传送到内部数据据RAM,两者的首地址分别为,两者的首地址分别为DATA1和和DATA2,遇到传送的数据为遇到传送的数据为0时停止传送。时停止传送。
47、分析:数据块传送,长度较短,均采用间接分析:数据块传送,长度较短,均采用间接寻址方式,其中寻址方式,其中R0寻址外部数据存储器,寻址外部数据存储器,R1寻址内部寻址内部RAM。传送时,要以累加器传送时,要以累加器A作为过渡,利用判零转作为过渡,利用判零转移可以判别是否继续传送还是终止移可以判别是否继续传送还是终止程序如下:程序如下:MOV R0,#DATA1 ;MOV R1,#DATA2 ;MOVX A,R0 ;JZ STOP ;MOV R1,A ;INC R0 ;INC R1 ;SJMP LOOP ;LOOP:HERE:外部数据块首址外部数据块首址内部数据块首址内部数据块首址外部数据传入外部
48、数据传入A为零则终止为零则终止不为零则传送至内部不为零则传送至内部RAM单元单元修改地址指针修改地址指针继续循环继续循环STOP:2、比较转移指令、比较转移指令格式格式: CJNE (目的操作数),(源操作数),(目的操作数),(源操作数),rel根据目的和源操作数的寻址方式不同,共有根据目的和源操作数的寻址方式不同,共有4条条CJNE A , #data , relCJNE A , direct , relCJNE Rn , #data , relCJNE Ri , #data , rel三字节指令三字节指令例:设(例:设(R7)=56H,执行指令,执行指令CJNE R7,#60H,K1K1
49、:例例2、设、设P1口口P10P13为准备就绪信号输入端,为准备就绪信号输入端,当该当该4位输入全位输入全“1”说明各项工作准备好,单片说明各项工作准备好,单片机可顺序执行主程序,否则循环等待。机可顺序执行主程序,否则循环等待。程序片段如下:程序片段如下:L0:MOV A , P1 ;ANL A , #0FH ;CJNE A , #0FH , L0 ;MAN1:读读P1口内容口内容高高4位无意义,屏蔽位无意义,屏蔽低低4位不全为位不全为1,返回,返回L0,否则继续执行,否则继续执行3、循环转移指令(减、循环转移指令(减1条件转移指令)条件转移指令)DJNZ Rn,rel ;(PC) (PC)+
50、2(Rn) (Rn)-1If(Rn)=0,(,(PC) (PC)+relElse,程序向下执行,程序向下执行DJNZ direct,rel;(PC) (PC)+3(direct) (direct)-1If (direct)=0, (PC) (PC)+relElse, 程序向下执行程序向下执行若循环变量为若循环变量为00H,则循环次数为,则循环次数为256次次例例1: (40H)=01H,(,(50H)=70H (60H)=15H,以下程序片段的执行结果,以下程序片段的执行结果DJNZ 40H,LABEL1;DJNZ 50H,LABEL2;DJNZ 60H,LABEL3;结束循环向下执行结束循环