资源描述
单击此处编辑母版标题样式,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,第,3,章,80C51,指令系统,3-1 指令系统概述,3-2 寻址方式,3-,5,逻辑运算指令,3-,6,位操作类指令,3-,3,数据传送指令,3-,4,算术运算指令,3-7 控制转移类指令,3-,8,调用和返回指令,教学目的:,1,、了解,80C51,指令系统的构成,2,、掌握,80C51,的寻址方式,3,、理解,80C51,指令的操作功能,教学重点:,1,、,80C51,寻址方式与寻址空间的对应关系,2,、,80C51,指令分类,3,、,80C51,常用指令使用方法,教学难点:,灵活运用所学的指令写程序,一、指令的形式,MCS-51,单片机主要有两种指令形式,:,1,、机器语言指令,:,也称机器码,都由,”0”,和,”1”,组合。代码长,记忆困难。,例:“累加器,A,加,1”,指令用二进制表示是,是“,00000100”,。,2,、汇编语言指令:用容易记忆的缩写符号表示机器语言指令。两者语言是一一对应的。,例:,INC A,3-1,指令系统概述,二、,汇编语言指令格式,标号:,操作码,操作数1,操作数2;注释,例:,LOOP:MOV A,#40H;,40,H-A,1.,标号:,是用户设定的符号,它实际代表该指令所在的地址。标号必须以字母开头,其后跟,1,8,个字母或数字,并以“,:”,结尾。,2.,操作码:,指明指令功能,即规定指令所实现的操作。25个字母。,例如:,MOV,传送,ANL,逻辑与,MUL,乘法,RR,右循环,SJMP,短跳转,RET,子程序返回,3.,操作数:,指令操作对象,包括目的操作数和源操作数,两者之间用逗号“,”分开。,数据、地址、寄存器名及约定符号。,4.,注释行:,说明指令在程序中的作用。汇编程序不对这部分编译。以分号“,;”,开头,可以用中文、英文或某些符号来表示。,操作码,和,操作数,是指令主体。,标号:操作码,操作数1,操作数2;注释,例:,LOOP:MOV A,#40H;,40,H-A,三、,指令系统的分类及特点,1,、按所占存储器字节数分为,(,1,)单字节指令(,49,条),(,2,)双字节指令(,46,条),(,3,)三字节指令(,16,条,),2,、按指令执行周期数分为,(,1,)单周期指令(,64,条),(,2,)双周期指令(,45,条),(,3,)四周期指令(,2,条),3,、按指令功能分为,数据传送指令(,29,条)、算术运算指令(,24,条)、逻辑运算指令(,24,条)、控制转移类指令(,17,条)、位操作指令(,17,条),四、,伪指令,汇编时不产生机器码,仅供汇编识别控制。,1.定位伪指令:,ORG m,例3-3,ORG 0000H,START:SJMP MAIN,ORG 0030H,MAIN:MOVSP,#30H,以,START,开始的程序汇编为机器码后从0000,H,存贮单元开始连续存放。,2.结束伪指令:,END,4.定义字伪指令:,DW Y,1,,Y,2,,,Y,n,3.定义字节伪指令:,DB X1,X2,Xn,例3-4,ORG7F00H,DB01110010B,16H,45,8,A,汇编后存贮单元内容为:,(7,F00H)=72H(7F01H)=16H,(7F02H)=2DH (7F03H)=38H,(7F04H)=40H,5,定义空间伪指令:,DS,表达式,例3-6,ORG0F00H,DS10H,DB20H,40H,汇编后,从0,F00H,开始,保留16个字节的内存单元,然后从0,F10H,开始,按照下一条,DB,伪指令给内存单元赋值,得(0,F10H)=20H,(0F11H)=40H。,6,等值伪指令:,字符名称,EQU,数据或汇编符,例,3-7,ORG8500H,AAEQUR1,A10EQU10H,DELAYEQU87E6H,MOVR0,,,A10,;,R0,(,10H,),MOVA,,,AA,;,A,(,R1,),LCALLDELAY,;,调用起始地址为,;,87,E6H,的子程序,END,EQU,赋值后,,AA,为寄存器,R1,,,A10,为,8,位直接地址,10,H,,,DELAY,为,16,位地址,87,E6H,。,7,数据地址赋值伪指令:,字符名称,DATA,表达式,8,位地址赋值伪指令:,字符名称,BIT,位地址,3-2,寻址方式,寻找操作数的方法叫寻址方式。(,P52,),一、,立即寻址方式,指令中给出实际操作数据(立即数),,一般用于为寄存器或存储器赋常数初值。,举例:,8位立即数:,MOV A,#40H;A,40H,16位立即数:,MOV DPTR,#2100H;DPTR,2100H,二、,直接寻址方式,指令操作数是存储器单元地址,数据在存储器单元中。,MOV A,40H;A,(40H),直接寻址方式对数据操作时,地址是固定值,而地址所指定的单元内容为变量形式。,8051,使用直接寻止方式可以访问的地址空间有:内部数据存储器的,128,个字节单元、所有特殊功能寄存器。,直接寻址是访问特殊功能,寄存器的唯一寻址方式。,41,H,78H,40,H,56H,56,H,例:,设存储器两个单元的内容如图所示,,执行指令,MOV A,40H,后,A=,?,三、寄存器寻址方式,指令操作数为寄存器名,数据在寄存器中。,例:,MOV A,R0;A,R0,设指令执行前,A=20H,R0=40H,,执行指令后,,A=?,R0=?,四、寄存器间接寻址方式,指令操作数的地址事先存放在某个寄存器中,由该寄存器内容指定操作数的寻址方式。,为间接寻址指示符。,例:,MOV A,R0;A,(,(R0),设指令执行前,A=20H,R0=40H,,地址为,40,H,存储器单元内容如图所示,。,执行指令后,,A=?,R0=?,(40H)=?,41,H,67H,40,H,34H,34,H,40,H,34,H,40,H,40,H,R0,注意:,MCS-51,指令系统规定只有,R0,、,R1,、,SP,、,DPTR,寄存器以及,A,和,PC,、,DPTR,的组合才具有间接寻址的能力。,R0,、,R1,可寻址内部,RAM 128,字节及外部扩展,RAM,单元内容,但不能寻址特殊功能寄存器,而用,DPTR,可以寻址外部存储器,64K,字节空间。,五、变址间接寻址方式(基址寄存器,+,变址寄存器间接寻址),累加器,A,作为,变址寄存器,程序计数器,PC,或寄存器,DPTR,作基址寄存器,以,DPTR,或,PC,的内容与累加器,A,的内容相加作为,16,位地址。,例:,MOVC A,A+DPTR;A,(A+DPTR),设指令执行前,A=09H,DPTR=2000H,,存储器单元内容如图所示。执行指令后,,A=?DPTR=?,12,H,2000,H,2008,H,89H,2009,H,12H,六、,相对寻址方式,以,PC,的内容作为基地址,加上偏移量,所得结,果送,PC,寄存器作为转移地址。偏移量在,128,+127,之间。,例:,SJMP30H;,短跳转,1068H,67H,1,09AH,38H,PC,1,069H,34H,1,06AH,38H,PC+2,PC+1,PC,七,.,位寻址方式,指令给出位地址。一位数据在存储器位寻址区。,例:,MOV C,40H;Cy,(,位地址40,H)(P34),设指令执行前,Cy=1,,位地址40,H,存储器单元如图,执行指令后,,Cy=?,28,H,01100010,29,H,11010111,位寻址区,0,3-,2-1,指令的类型、字节和周期,MCS-51,指令系统中共有,111,条指令,按功能可分为以下四大类:,数据传送类,算术操作类,逻辑操作类,控制转移类,注意:除了用,POP,或,MOV,操作向,PSW,传送数据的指令 外,其它传送指令均不影响标志位。,“,传送,”,操作的功能是将源地址单元的内容传到目的地址单元中,而源地址单元的内容不变。,但当传送或交换数据后影响累加器,A,的值时,奇偶标志,P,的值则按,A,的值重新设定。,指令中常用符号,在分类介绍各类指令之前,先对描述指令的一些符号意义进行一些简单约定,:,(1),Ri,和,Rn,:R,表示当前工作寄存器区中的工作寄存器,i,表示,0,或,1,即,R0,和,R1,。,n,表示,0,7,即,R0,R7,当前工作寄存器的选定是由,PSW,的,RS1,和,RS0,位决定的。,(2),data:,表示立即数,data,为,8,位常数。,data,是指包含在指令中的,8,位立即数。,(3),data16:,包含在指令中的,16,位立即数。,(4),rel,:,相对地址,以补码形式表示的地址偏移量,范围为,-128,+127,主要用于无条件相对短转移指令,SJMP,和所有的条件转移指令中。,(5)addr16:16,位目的地址。目的地址可在全部程序存储器的,64 KB,空间范围内,主要用于无条件长转移指令,LJMP,和子程序长调用指令,LCALL,中。,(6)addr11:11,位目的地址。目的地址应与下条指令处于相同的,2 KB,程序存储器,地址空间范围内,主要用于绝对转移指令,AJMP,和子程序绝对调用指令,ACALL,指令中。,(7)direct:,表示直接寻址的地址,即,8,位内部数据存储器,RAM,的单元地址(,0,127/255),或特殊功能寄存器,SFR,的地址。对于,SFR,可直接用其名称来代替其直接地址。,(8)bit:,内部数据存储器,RAM,和特殊功能寄存器,SFR,中的可直接寻址位地址。,(9):,间接寻址寄存器或基地址寄存器的前缀,如Ri,DPTR,表示寄存器间接寻址,。,(10)(X):,表示,X,中的内容。,(11)(X):,表示由,X,寻址的单元中的内容,即,(X),作地址,该地址的内容用,(X),表示。,(12)/,和,符号,:/,表示对该位操作数取反,但不影响该位的原值。,表示指令操作,流程,将箭头一方的内容,送入箭头另一方的单元中去。,3-,3,数据传送指令,实现寄存器、存储器之间的数据传送。,1、,内部传送指令,:片内数据存储器数据传送。,2、,外部传送指令,:,片外数据存储器数据传送。,3、,交换指令,:片内数据存储器数据传送。,4、,堆栈操作指令,:片内数据存储器数据传送。,5、,查表指令,:程序存储器数据传送。,表,32,给出了各种数据传送指令的操作码助记符和对应的操作数。,表,3 2,数据传送类指令助记符与操作,(一),内部传送指令,:实现片内数据存储器中数据传送。,指令格式,:,MOV,目的,操作数,,源,操作数,寻址方式,:立即寻址、直接寻址、寄存器寻址、寄存器间址。,MOV,A,Rn,;,ARn,Rn,=R,0,R,7,MOV A,direct ;A(direct),MOV,A,Ri,;,A(Ri),Ri,=R,0,、R,1,MOV A,#data ;AdataMOV,Rn,direct,;,Rn(direct,)MOV,Ri,direct,;(,Ri)(direct,)MOV direct1,direct2;(direct1)(direct2)MOV DPTR,#d1d2 ;DPTRd1d2,操作码,目的,源,操作内容,字节数,执行时间,MOV,A,,,#,data,direct,Ri,Rn,(,A)#data,(A)(data),(,A)(Ri,),(,A)(Rn,),2,2,1,1,1,1,1,1,Rn,,,#,data,direct,A,(,Rn)#data,(,Rn)(data,),(,Rn)(A,),2,2,1,1,2,1,Data,,#,data,A,direct,Ri,Rn,(,data)#data,(data)(A),(data)(data),(,data)(Ri,),(,data)(Rn,),3,2,3,2,2,2,1,2,2,1,Ri,,,#,data,direct,A,(,Ri)#data,(,Ri)(data,),(,Ri)(A,),2,2,1,1,2,1,数据传送指令,例:,顺序执行下列指令序列,求每一步执行结果,。,MOV A,#30H,MOV 4FH,A,MOV R0,#20H,MOV R0,4FH,MOV 21H,20H,;,A=30H,;(4FH)=30H,;R0=20H,;(20H)=30H,;(21H)=30H,说明:,1.,一条指令中不能同时出现两个工作寄存器:,非法,指令:,MOV R1,R2MOV R2,R0,2.,间址寄存器只能使用,R0、R1。,非法,指令:,MOV A,R2,3.,SFR,区只能直接寻址,不能用寄存器间接寻址。,(二)外部传送指令,实现片外数据存储器和,A,累加器之间的数据传送。,指令格式:,MOVX,目的操作数,源操作数,寻址方式:片外数据存储器用寄存器间址方式。,1.,DPTR,作16位数据指针,寻址64,KB,片外,RAM,空间,MOVX A,DPTR,;A(DPTR),MOVX DPTR,A,;(DPTR)A,2.,Ri,作8位数据指针,寻址256,B,片外,RAM,空间,MOVX,A,Ri,;,A(Ri,),MOVX,Ri,A,;(,Ri)A,例,1,:,实现片外数据存储器数据传送(2000,H),(2100H)。,MOV DPTR,#2000H,MOVX A,DPTR,MOV DPTR,#2100H,MOVX DPTR,A,;,DPTR=2000H,;A=X,;DPTR=2100H,;(2100H)=X,片外数据存储器不能直接寻址。下列为,非法,指令:,MOVX A,2000H,MOVX 2100H,2000H,例,2,把内部,RAM50H,单元数据送到片外,20H,单元,设,50H,中单元存有数据,10H,。,程序 各条指令执行结果,MOV A,50H,;,(50H),各条指令执行结果,A,A=10H,MOV R0,#20H,;,20HR0,R0=20H,MOVX R0,A,;,A(R0),即,A(20H),则,20H,10H,注意:与外部,RAM,传送数据时,地址小于,256B,用,Ri,间址,大于,256B,时用,DPTR,间址。,(三)查表指令,实现从程序存储器读取数据到,A,累加器,,,只能使用变址间接寻址方式,。,多用于查常数表程序,可直接求取常数表中的函数值。,1,DPTR,为基址寄存器,MOVCA,A+DPTR,;A,(A+DPTR),查表范围为,64,KB,程序存储器任意空间,称为远程查表指令。,2,PC,为基址寄存器,MOVCA,A+PC,;A,(A+PC),常数表只能在查表指令后,256,B,范围内。(,PC,内容为下一条指令的起始地址。),例,1,程序,1000HMOV A,#10H,;,10HA,1002HMOVC A,A+PC,;,PC+1PC,,,PC=1003H,,,(A+PC)=(10H+1003H)A,1010H02H,1011H04H,1012H06H,1013H08H,程序执行结果:,A,08H,用,MOVC A,A+PC,指令需注意两点:,1,)指令中的,PC,是执行完本条指令后的,PC,值,即,PC,等于本条指令地址加,1,。,2,),A,是修正值,它等于查表指令和欲查数据相间隔字节数。,A,的范围是,0,255,,一次该指令只能查找本指令后的,256B,范围内的表格,故称为 近程查表。,例,2,程序,1000HMOV A,#01H,;,01HA,1002HMOV DPTR,#6000H,;,6000HDPTR,1005HMOVC A,A+DPTR,;,(A+DPTR)=(01H+6000H)=(6001H)A,6001H0AH,6002H0BH,6003H0CH,6004H0DH,程序执行结果:,A,0AH,,查到了地址为,6001H,单元中的数据。,用,MOVC A,A+DPTR,指令查表特点:,A,DPTR,都可以改变,因此可在,64KB,范围内查表,故称为远程查表。这条指令更方便。,(,四)堆栈操作类指令,堆栈操作有进栈和出栈操作,即压入和弹出数据,常用于保存或恢复现场。该类指令共,有如下两条指令,:,(SP)(SP)+1,(SP)(direct),(direct)(SP),(SP)(SP)-1,PUSH direct,POP direct,例,设堆栈指针为,30H,,为保护现场把,A,和,B,中的内容压入堆栈保护,然后根据需要再把两者弹出。设,A,中为,30H,,,B,中为,01H,。,程序 执行结果,MOV SP,#30H,;,30HSP,SP=30H,设堆栈指针为,30H,PUSH ACC,;,SP+1SP=31H,A(SP),即,A(31H),(31H)=30H,PUSH B,;,SP+1SP=32H,B(SP),即,B(32H),(32H)=01H,POP B,;,SPB,即(,32H,),B,B=01H,SP-1SP=31H,POP ACC,;,SPA,即(,31H,),A,A=30H,SP-1SP=30H,从此例可以看出压入、弹出过程,SP,的变化规律,(五)交换指令,实现片内,RAM,区的数据双向传送。,1.字节交换指令,XCH,A,Rn,;A,Rn,XCH,A,Ri,;A,(,Ri,),XCH A,direct,;A,(direct),例,3-32,:设(,A,),=34H,,(,R3,),=56H,,执行指令;,XCH A,R3,则结果为,(,A,),=56H,,(,R3,),=34H,2.半字节交换指令,XCHD,A,Ri,;A,03,(,(Ri),03,SWAP A,;A,47,A,03,例,3-33,:设(,A,),=34H,,(,R0,),=30H,,(,30H,),=56H,,执行指令:,XCHD A,R0,则结果为,(,A,),=36H,,(,30H,),=54H,例,3-34,:,设,(R0)=30H,(30H)=4AH,(A)=28H,则,:,执行,XCH A,R0 ;,结果为,:(A)=4AH,(30H)=28H,执行,XCHD A,R0 ;,结果为,:(A)=2AH,(30H)=48H,执行,SWAP A ;,结果为,:(A)=82H,例,3-35,:,若,R0=30H,A=F0H,(30H)=46H,执行,XCH A,R0,;结果:,A=30H,R0=F0H,R0,与,A,内容交换,执行,XCH A,R0,;结果:,A=46H,(30H)=F0H,R0,中不 ;变,实际上是(,R0,),A,即(,30H,),A,若执行,XCHD A,R0,;结果:,A=F6H,(30)H=40H,;,A,与(,30H,)中低,4,位交换,高,4,位不变,执行,SWAP A,;结果:,A=0FH,高低,4,位互换,3-,4,算术运算指令,与数据传送指令不同,多数算术运算指令会影响标志位的状态,即,CPU,执行算术运算指令后,根据数据操作情况自动设置标志位的状态。,状态标志,MCS-51,的程序状态字寄存器,PSW,为标志寄存器。其格式如下:,进位,/,辅助进位,/,用户定,/,选工作寄,/,溢出标志,/,保留,/,奇偶标志,Cy,AC,F0,RS1,RS0,OV,P,1标志位,(自动设置状态),1),Cy,:进位标志位,(,针对无符号数而言),保存运算后最高位的进位/借位状态,当有进位/借位,,Cy=1,,否则,Cy=0。,2),AC,:辅助进位标志位,保存低半字节的进位/借位状态,当,D,3,产生进位/借位,,AC=1,,否则,AC=0。,用于十进制调整。,3),OV,:溢出标志位,(,针对有符号数而言,),OV=Cy,7,Cy,6,,,补码运算产生溢出,OV=1,,否则,OV=0。,4),P,:奇偶标志位,反映累加器,A,中数据的奇偶性。当1的个数为奇数,,P=1,,否则,P=0。,2用户选择位,(编程设置状态),1),F0,:用户自定义标志位。2),RS1、RS0:,工作寄存器区选择位。,复位时,,PSW=00H,例:,复位后,设置使用工作寄存器3区,其余标志位不变。,解:,MOV PSW,#,18,H,RS1 RS0,工作寄存区,0 0,0区,0 1,1区,1 0,2区,1 1,3区,Cy,AC,F0,RS1,RS0,OV,P,3-5-1,加减指令,完成片内,RAM,和,A,中数据的加减乘除运算,。,1.加法指令,1)不带进位加法:,ADD A,,源操作数,ADD,A,Rn,;(A)(A)+,data,ADD,A,direct,;(,A)(A)+(direct,),ADD,A,Ri,;(,A)(A)+(Ri,),ADD,A,#data,;(A)(A)+,data,影响,Cy、OV、AC、P,2),带进位加法:,ADDC A,,源操作数,ADDC,A,Rn,;(,A)(A)+(CY)+(Rn,),ADDC,A,direct,;(,A)(A)+(CY)+(direct,),ADDC,A,Ri,;(,A)(A)+(CY)+(Ri,),ADDC,A,#data,;(A)(A)+(CY)+,data,影响,Cy、OV、AC、P,例,编写计算,1234H+0FE7H,的程序,将结果存入内部,RAM,的,41H,和,40H,单元,,40H,存低,8,位,,41H,存高,8,位。,程序,MOV A,#34H,;被加数低,8,位数,34H,送,A,ADD A,#0E7H,;加数低,8,位数,E7H,与之相加,,A=1BH,Cy=1,MOV 40H,A,;,A40H,即,34H+E7H,结果存入,40H,中,;(40H=1BH,),MOV A,#12H,;被加数高,8,位数,12H,送,A,ADDC A,#0FH,;加数高,8,位,0FH,和,Cy,与,A,相加,,A=22H,MOV 41H,A,;高,8,位与进位位之和存入,41H,中(,41H,),;=22,总和为,221BH,,总结果在,41H,,,40H,单元中,2减法指令,SUBB A,,源操作数;带借位减法指令,SUBB,A,Rn,;(A)(A),(CY),(,Rn,),SUBB,A,direct,;(A)(A),(CY),(direct),SUBB,A,Ri,;(A)(A),(CY),(,Ri,),SUBB,A,#data,;(A)(A),(CY),data,影响:,Cy、OV、AC、P,由于减法指令只有带借位减法指令,因此,若要进行不带借位位的减法操作,需先清借位位,即置,CY=0,。清,CY,有专门的指令,它属于位操作类指令,指令为,:,CLR C ;(CY)0,例如,:,设,(A)=52H,(R0)=B4H,执行指令,:,CLR C ;(CY)0,SUBB A,R0 ;(A)(A),(CY),(R0),结果为,:(A)=9EH,CY=1,AC=1,OV=1,P=1,。,执行加减法指令时,单片机确定,PSW,中的个标志位的规则是:,1,运算后如果位,7,有进(借)位输出,则,Cy,置“,1”,,否则清零。,2,运算后如果位,3,有进(借)位输出,则辅助进位位,AC,置“,1”,,否则清零。,3,运算后如果位,7,有进(借)位输出而位,6,没有,或者位,6,有进(借)位输出而位,7,没有,则溢出标志,OV,置“,1”,,否则清零。,4 A,的结果里,1,的个数为奇数,则奇偶标志,P,置“,1”,,否则清零。,1000 1111,进位,1000 0101,(,A,),+,1010 1111,(,R0,),0011 0100 34H,34H 1 1 1 1,【3-34,例,】,:,A=85H,R0=0AFH,,执行指令,ADD A,R0,运算过程为,求:,A=,Cy=,OV=,AC=,P=,,0011 1111,进位,0101 0110,(,A,),+,1000 1001 89H,1110 0000 E0H,0E0H 0 0 1 1,【3-35,例,】,:,A=56H,Cy=1,,执行指令,ADDC A,#89H,求:,A=,Cy=,OV=,AC=,P=,,例,3-36,设(,A,),=0C9H,(,R0,),=60H,,(,60H,),=54H,,,Cy=1,,,执行指令:,SUBB A,,,R0,运算过程为,1110 100,借位,1100 1001,(,A),0101,0100(,R0),-,1,Cy,0111 0100,结果为,(,A,),=74H,标志位为,Cy=0,,,0V=1,,,AC=0,,,P=0,十进制加法指令,:,ADD A,,源操作数,DA A,带进位十进制加法指令:,ADDC A,,源操作数,DA A,4,),十进制(,BCD,)调整指令:,DAA,;,对,A,中加法结果进行调整,若在加法过程中低4位向高4位有进位或累加器,A,中低4位大于9,则累加器,A,作加6调整;若在加法过程中最高位有进位或累加器,A,中高4位大于9,则累加器,A,作加60,H,调整(即高4位作加6调整)。,什么是,BCD,码,例3-39:,编制8559的,BCD,加法程序,并对其工作过程进行分析。,解:,相应,BCD,加法程序为:,MOV A,,,#85H,;,A85,ADD A,,,#59H,;,A85+59=0DEH,DA A,;,A44,,,Cy=1,二进制加法和进制调整过程为:,85 1000 0101 (,A),+)59 0101 1001 data,144 (0)1101 1110,110;,低,4,位,9,,加,6,调整,1110 0100,110 ;,高,4,位,9,,加,60,H,调整,(1)0100 0100,运算结果为(,A,),=44H,,,Cy=1,即十进制的,144,。,5.,增量指令,增量指令:,INC,单操作数,INC A ;(A)(A)+1,INC,Rn,;(Rn)(Rn)+1,INC direct,;(direct)(direct)+1,INC ,Ri,;(,Ri,)(Ri)+1,INC DPTR,;(DPTR)(DPTR)+1,除对,A,操作影响标志位,P,以外,不影响标志位状态。,例,:,判断,INC R0,和,INC R0,两条指令结果,比较两者的区别。设,R0,30H,,(,30H,),=00H,。,执行,INC R0,;,R0+1=30H+1R0,结果,R0=31H,执行,INC R0,;,(R0)+1=(30H)+1(R0),,,;,结果(,30H),=01H,R0,中内容不变,仍为,30H,减量指令:,DEC,单操作数,DEC A,;(A)(A),1,DEC direct,;(direct)(direct),1,DEC ,Ri,;(,Ri,)(,Ri,),1,DEC,Rn,;(,Rn,)(,Rn,),1,除对,A,操作影响标志位,P,以外,不影响标志位状态,。,注意:,没有指令 DEC DPTR,可用指令 DEC DPL 代替,6.,减量指令,3-5-2,乘、除法指令,乘、除法指令为单字节,4,周期指令,在指令执行周期中是最长的两条指令。,(1),乘法指令,MUL AB,(B)(A)(B)15,8,(A)(A)(B)7,0,(CY)0,A4,例:,A=80H,B=21,,执行指令,MUL AB,后,,求:,A=,B=,Cy=,OV=,P=,解:,8,0H,2,1H,=,1,080H,8,0H 10H 0 1 1,乘法指令,的功能是,把累加器,A,和寄存器,B,中的两个,8,位无符号数相乘,将乘积,16,位数中的,低,8,位存放在,A,中,高,8,位存放在,B,中,。,若乘积大于,FFH,(,255,),则溢出标志,OV,置,1,否则,OV,清,0,。,乘法指令执行后进位标志,CY,总是清零,即,CY=0,。,另外,乘法指令本身只能进行两个,8,位数的,乘法运算,要进行多字节乘法还需编写相应的程序。,例如,:,若,(A)=4EH,(,78,),(B)=5DH,(,93,),执行指令,:MUL AB,结果为,:,积为,(BA)=1C56H(7254)FFH(255),(A)=56H,(B)=1CH,OV=1,CY=0,P=0,。,(2),除法指令,(A)(A)(B),之商,,(B)(A)(B),之余数,(CY)0,(OV)0,除法指令的功能是,把累加器,A,中的,8,位无符号整数除以寄存器,B,中的,8,位无符号整数,所得,商存于累加器,A,中,余数存于寄存器,B,中,进位标志,CY,和溢出标志,OV,均被清零,。,若除数,B,中的内容为,0,时,除法运算没有意义,结果为不定值,此时溢出标志,OV,被置为,1,即,OV=1,而,CY,仍为,0,。,DIV A B;,84,例:,A=0B6H,B=0FH,,执行指令,DIV AB,后,求:,A=,B=,Cy=,OV=,P=,解:,1,82,1,5,=,1,2,(,0,CH),,余数=,2(,0,2H)。,0,CH 02H 0 0 0,3-,5,逻辑运算指令,3.6.1,、单操作数指令(,A,累加器为操作数),1.,A,清0指令:,CLR A,;A0,2.,A,取反指令:,CPL A,;A/A,3.,循环移位指令:,1),8位循环指令:,RL A,;A,循环左移一位,RR A,;A,循环右移一位,2),9位循环指令:,RLC A,;,带,Cy,循环左移一位,RRC A,;,带,Cy,循环右移一位,3.6.2,、两个操作数逻辑运算指令,(对位逻辑运算):,ANL、ORL、XRL,1,、逻辑与指令,ANL A,Rn,;,A,(A)(,Rn,),ANL A,direct,;,A,(A)(,direct),ANL A,Ri,;,A,(A)(,Ri,),ANL A,#data,;,A,(,A)data,ANL direct,A,;,direct,(direct)(,A),ANL direct,#data,;,direct,(,direct)data,逻辑与指令常用于清零字节中的某些位。,【,例,3-44】,将累加器,A,中压缩的,BCD,码拆成二字节的非压缩,BCD,码,低位放入,30H,,高位放入,31H,单元中。,PUSH ACC,ANL A,#0FH,MOV 30H,A,POP ACC,SWAP A,ANL A,#0FH,MOV 31H,A,2,、逻辑或指令,ORL A,Rn,;,A,(A)v(,Rn,),ORL A,direct,;,A,(A)v(,direct),ORL A,Ri,;,A,(A)v(,Ri,),ORL A,#data,;,A,(A)v data,ORL direct,A ;direct,(direct)v(,A),ORL direct,#data ;direct,(direct)v data,逻辑或指令常用于置,1,字节中的某些位。,【,例,3-45】,编制程序把累加器,A,中低,4,位送入,P1,口低,4,位,,P1,口高,4,位不变,解:,ANL A,#0FH,ANL P1,#0F0H,ORL P1,A,ORL,的合并功能,3,、逻辑异或指令,XRL A,Rn,;,A,(A),(,Rn,),XRL A,direct,;,A,(A)(,direct),XRL A,Ri,;,A,(A)(,Ri,),XRL A,#data,;,A,(A)data,XRL direct,A ;direct,(direct)(,A),XRL direct,#data ;direct,(direct)data,逻辑异或指令常用于对字节中的某些位取反。,【,例,3-46】,设,(A)=0FH,(R1)=55H,执行指令:,XRL A,R1,运算过程为,0000 1111 0FH,+,0101,0101,55H,0101 1010 5AH,结果为(,A,),=5AH (,高,4,位的,5,保留,低,4,位,5,取反,),3-6,位操作类指令,位操作又称为布尔变量操作,它是以位,(bit),作为单位来进行运算和操作的。,MCS,51,系列单片机内设置了一个位处理器(布尔处理机),它有自己的累加器(借用进位标志,CY,),自己的存储器(即位寻址区中的各位),也有完成位操作的运算器等。,这一组指令的操作对象是内部,RAM,中的位寻址区,即,20H,2FH,中连续的,128,位(位地址,00H,7FH,),以及特殊功能寄存器,SFR,中可进行位寻址的各位。,在指令中,位地,址的表示方法主要有以下,4,种(均以程序状态字寄存器,PSW,的第五位,F0,标志为例说明),:,(1),直接位地址表示方式,:,如,D5H;,(2),点操作符表示(说明是什么寄存器的什么位)方式,:,如,PSW.5,说明是,PSW,的第,五位,;,(3),位名称表示方法,:,如,F0;,(4),用户定义名表示方式,:,如用户定义用,FLG,这一名称(位符号地址)来代替,F0,1.,位传送指令,位传送指令有如下互逆的两条双字节单周期指令,可实现进位位,CY,与某直接寻址位,bit,间内容的传送。,MOV C,bit ;(CY),(,bit,),MOV bit,C ;(bit)(CY),上述指令中,:bit,为直接寻址位,C,为进位标志,CY,的简写。第,1,条指令是把,bit,中的一位,二进制数送位累加器,CY,中,不影响其余标志。,第,2,条指令是将,C,中的内容传送给指定位。,由于,两个寻址位之间没有直接的传送指令,常用上述两条指令并通过,C,作为中间媒介来进行寻址位间的传送。,例如,:,将内部,RAM,中,20H,单元的第,7,位(位地址为,07H,),的内容,送入,P1,口的,P1.0,中的程序如下,:,MOV C,07H ;(CY)(07H),MOV P1.0,C ;(P1.0)(CY),当,(20H)=A3H,(P1)=11111110B,时,执行上述指令后修改了,P1,口第,0,位,即,(CY)=1,(P,1)=11111111B,。,2.,位置位清零指令,对进位标志,CY,以及位地址所规定的各位都可以进行置位或清零操作,共有如下,4,条指令,:,CLR bit ;(bit)0,CLR C ;(CY)0,SETB bit ;(bit)1,SETB C ;(CY)1,前两条指令为位清零指令,后两条指令为位置,1,指令。当第,1,、,3,条指令的直接寻址位为某端口的某位时,指令执行时具有读,修改,写功能。,例如,:,将,P1,口的,P1.7,置位,并清进位位的程序如下,:,SETB P1.7 ;(P1.7)1,CLR C ;(CY)0,当,(P1)=00001111B,时,执行完上述指令后,(P1)=10001111B,(CY)=0,。,3.,位逻辑指令,位逻辑指令包含“与”,ANL,、“,或”,ORL,、“,非”,CPL,位逻辑运算操作,共有如下,4,条指令,:,ANL C,bit,;,C(bit,)C,,寻址位和,C“,与”,结果放在,C,ANL C,/bit,;,C(/bit)C,,寻址位的非和,C“,与”,结果放在,C,ORL C,bit,;,C(bit,)C,,寻址位和,C“,或”,结果放在,C,ORL C,/bit,;,C(bit,)C,,寻址位和,C,的非“或”,结果放在,C,4.,位条件转移指令,位条件转移指令是以进位标志,CY,或者位地址,bit,的内容作为是否转移的条件,共有,5,条指令。,(1),以,CY,内容为条件的双字节双周期转换指令。,JC,rel,;,若,(CY)=1,则,(PC)(PC)+2+rel,转移,;,否则,(PC)(PC)+2,顺序执行,JNC,rel,;,若,(CY)=0,则,(PC)(PC)+2+rel,转移,;,否则,(PC)(PC)+2,顺序执行,例,1,设,P1,为输入口,,P3.0,作输出线,执行下列指令:,MOV C,P1.0,;,(P1.0)C,ANL C,P1.1,;,(C)(P1.1)C,ANL C,/P1.2,;,(C)(/P1.2)C,MOV P3.0,C,;,CP3.0,结果是:,P3.0,(P1.0)(P1.1)(/P1.2)
展开阅读全文