资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,成,都,理,工,大,学,工,程,技,术,学,院,第三章 MCS-51指令系统,2 算术运算类指令,(,24条),Arithmetic Operations,主要对8位无符号数;也可用于带符号数运算。,包括:加、减、乘、除、加1、减1运算指令,影响PSW有关位。,1,算术运算类指令,(6种/24条),加法运算:(,ADD,4条),带进位加法运算:(,ADDC,4条),带借位减法运算:(,SUBB,4条),加1/减1操作:(,INC,DEC,9条),单字节乘/除法运算,:(,MUL,DIV,2条),十进制调整:(,DA A,1条),2,加法运算:(,ADD,4条),带进位加法运算:(,ADDC,4条),带借位减法运算:(,SUBB,4条),所有的加法(,ADD,)、带进位加法(,ADDC,)、带借位减法(,SUBB,)运算都是以,A,为一个加数或被减数,最终结果也存进,A,。,加法(,ADD,)、带进位加法(,ADDC,)以及带借位减法(,SUBB,)运算中,如果产生了进位或借位,将自动对PSW中的,Cy,标志位置“,1,”。,带进位加法(,ADDC,):(A),(A)+(Cy)+(第二操作数)带借位减法(,SUBB,):(A),(A)-(Cy)-(第二操作数),3,ADD A,,#,data,;,A,data,A,ADD A,direct,;,A(direct)A,ADD A,Rn,;,ARnA,ADD A,,Ri,;,A(Ri)A,用途:,将A中的值与源操作数所指内容相加,最终结果,存在A中。,1.,不带进位位的加法指令,(4条),加法指令,4,例:,设(A)=49H,(R0)=6BH,执行:ADD A,R0,结果:,CY,=?,,AC,=?,,P,=?,,OV,=?,,(A),=?,CY=0,AC=1,P=0,OV=1,(A)=B4H,5,2.,带进位位的加法指令,(4条),ADDC A,Rn,;,ARn,CY,A,ADDC A,direct,;,A(direct)CYA,ADDC A,Ri,;,A(Ri)CYA,ADDC A,#data,;,AdataCYA,用途:,将,A中的值,和其后面的值以及进位位,C,中的值相加,最终,结果存在A,,常用于多字节数运算中。,6,说明:,由于51单片机是一种8位机,所以只能做8位的数学运算,但8位运算的范围只有0255,这在实际工作中是不够的,因此就要进行扩展,一般是将2个8位(两字节)的数学运算合起来,成为一个16位的运算,这样,可以表达的数的范围就可以达到065535。,7,例:,先做67H+A0H=107H,而107H显然超过了0FFH,因此最终保存在A中的是07H,而1则到了PSW中的CY位了。换言之,CY就相当于是100H。,然后再做10H+30H+CY,结果是41H,所以最终的结果是4107H。,1067H+30A0H,0001 0000 0110 0111,0011 0000 1010 0000,0100 0001 0000 0111,1067H,30A0H,4107H,8,例:,设1067H存在R1R0中,3020H存在R3R2中,计算R1R0+R3R2,结果存在R5R4中。,MOV A,R0,ADD A,R2 ;R0+R2A和CY,MOV R4,A,MOV A,R1,ADDC A,R3 ;R1+R3+,CYA和CY,MOV R5,A,9,又例:,先做67H+20H=87H,没有超过0FFH,因此最终保存在A中的是87H,而PSW中的CY=0。,然后再做10H+30H+CY,结果是40H,所以最终的结果是4087H。,1067H+3020H,0001 0000 0110 0111,0011 0000 0010 0000,0100 0000 1000 0111,1067H,3020H,4087H,10,DA A,在进行BCD码加法运算时,跟在ADD和ADDC指令之后,用于对累加器A中刚进行的两个BCD码的加法的结果进行十进制调整。,例:,A=0001 0101BCD(代表十进制数15),ADD A,#8,3.,十进制调整指令,(1条),;A=1DH,按二进制规律加,;A=23H,按十进制规律加,DA A,11,调整要完成的任务是:,(1)当累加器A中的,低4,位数出现了非BCD码(10101111)或低4位产生进位(AC=1),则应在低4位加6调整,以产生低4位正确的BCD结果。,(2)当累加器A中的,高4位,数出现了非BCD码(10101111)或高4位产生进位(CY=1),则应在高4位加6调整,以产生高4位正确的BCD结果。,十进制调整指令执行后,PSW中的CY表示结果的百位值,。,12,例 若(A)0101 0110B,表示的BCD码为56,(R3)0110 0111B,表示的BCD码为67,(CY)0。执行以下指令:,ADD A,R2,DA A,由于(A)0010 0011B,即23,且(CY)1,即,结果为BCD数123。,应该注意,DA指令不能对减法进行十进制调整。,13,减法指令,(8条),SUBB A,Rn,;,ARn,CY,A,SUBB A,direct,;,A(direct)CYA,SUBB A,,Ri,;,A(Ri),CY,A,SUBB A,,#,data,;,AdataCYA,将A中的值减去源操作数所指内容以及进位位C中的,值,最终结果存在A中。,1.,带借位的减法指令,(4条),14,例:,SUBB A,R2,设:A=C9H,R2=55H,CY=1,,执行指令之后,A中的值为73H。,15,说明:,没有不带借位的减法指令,如果需要做不带位的减法指令(在做第一次相减时),只要将CY清零即可。,对带符号数,要注意OV标志。OV=1,出错。,16,例,:设(A)=52H,(R0)=B4H,执行指令:,CLR C,SUBB A,R0,结果为:,(A),=?,CY,=?,AC,=?,OV,=?,P,=?,(A)=9EH,CY=1,AC=1,OV=1,P=1,17,加1/减1操作:,(INC,DEC9条),INC,DEC,与用加/减法指令做加1/减1 操作不同之处在于INC、DEC,不影响标志位,(CY、OV、AC).只有涉及累加器A的指令INC A、DEC A才影响奇偶标志P。,18,单字节乘/除运算:,(MUL,DIV2条),两个单字节数的乘/除法运算只在A与B之间进行。,MUL AB,:(A)与(B)相乘,积为16位数,(B),积的,高8位;(A),积的,低8位,DIV AB,:(A)除以(B),结果用2字节表示,(A),商的整数部分;(B),余数,19,乘法指令执行后,进位标志,CY,总是清零,即,CY=0,除法指令执行后,进位标志,CY,和溢出标志,OV,均被,清零,。若,除数B,中的内容,为0,时,除法运算没有意义,结果为不定值,此时溢出标志OV被置为1,即,OV=1,而CY仍为0.,20,1、写出下列程序的运行结果。,MOV SP,#40H,MOV 42H,,,#85H,MOV 55H,,,#37H,PUSH 42H,PUSH 55H,POP 42H,POP 55H,(SP)=,?,(42H)=,?,(55H)=,?,练习题,21,2、执行下面程序段后,片内RAM 30H和片外RAM 30H单元的值是:,MOV 30H,#30,MOV R1,#30H,MOV A,#03H,MOVX R1,A,XCH A,R1,MOVX R1,A,内部RAM(30H)=?;外部RAM(30H)=?,22,3、判断题,下面指令是否正确,并将错误指令改正之。,MOV#30H ,A,MOV DPTR ,A,DA R1,DIV A ,R0,MOV 30H,40H,PUSH#30H,23,5 逻辑运算类指令,(,24条),主要用于对2个操作数按,位进行逻辑,操作,结果送到,A或直接寻址单元。,主要操作,与、或、异或、移位、取反、清零等。,对标志位的影响,除了目的操作数为,ACC,的指令影响奇偶标志,P,外,一般不影响标志位。,Logic Operations,24,逻辑运算指令的常见用法,逻辑与ANL用于,清0,或者,保留,某些位:,例,:ANL A,#0FH;则(A)=0AH,(已知累加器A中已存有数:9AH ),逻辑或ORL用于,置1,或者,保留,某些位:,例,:ORL A,#0FH;则(A)=9FH,逻辑异或XRL用于,取反,或者,保留,某些位:,例,:XRL A,#0FH;则(A)=95H,25,1,逻辑或指令,(6条),ORL A,Rn;,ARnA,ORL A,direct;,A(direct)A,ORL A,,Ri;,A(Ri)A,ORL A,,#,data;,AdataA,ORL direct,A;,(direct)A(direct),ORL direct,,#,data;,(direct)data(direct),影响,P,标志,后两条指令,若直接地址为,I/O,端口,则为“,读改写,”操作。,OR,Logic Instruction,26,例:,71H和56H相或:,01110001(71H),)01010110(56H),01110111 即77H,27,2,逻辑与指令,(6条),ANL A,Rn,;,ARnA,ANL A,direct,;,A(direct)A,ANL A,,Ri,;,A(Ri)A,ANL A,,#,data,;,AdataA,ANL direct,A,;,(direct)A(direct),ANL direct,,#,data,;,(direct)data(direct),影响,P,标志,后两条指令,若直接地址为I/O端口,则为,“,读改写,”操作。,AN,d,L,ogic,Instruction,28,例:,71H和56H相与:,01110001(71H),)01010110(56H),01010000 即50H,29,3,逻辑异或指令,(6条),XRL A,Rn ;,A,RnA,XRL A,direct ;,A(direct)A,XRL A,,Ri ;,A(Ri)A,XRL A,,#,data ;,A dataA,XRL direct,A ;(direct),A(direct),XRL direct,,#,data ;,(direct)data(direct),影响,P,标志,后两条指令,若直接地址为I/O端口,则为“,读改写,”操作,。,e,X,clusive,-,o,R,L,ogic Instruction,30,例:,71H和56H相异或:,01110001(71H),)01010110(56H),00100111 即27H,31,4,清0与,取反指令,(2条),取反:CPL A,;,/AA,例:,若A=5CH,执行CPL A,结果:A=A3H,清0:CLR A,;0A,C,om,P,lement,L,ogic Operation,32,5,循环移位指令,(4条),RL A,RR A,RLC A,RRC A,A.7 A.0,A.7 A.0,A.7 A.0,CY,CY,A.7 A.0,后两条指令,影响,P,标志和,CY,。,R,otate,L,ogic instruction,33,例:,若A=5CH,CY=1,执行,RLC A,后,,对,RLC,、,RRC,指令,在,CY=0,时,RLC,相当于,乘,以,2,RRC,相当于,除,以,2,结果:A=B9H,CY=0,P=1,0101 1100,1,1011 1001,0,34,例:按要求编程,完成下列各题:,1)选通工作寄存器组中0区为工作区。,2)利用移位指令实现累加器A的内容乘6。,3)将ACC的低4位送P1口的低4位,P1口的高4位不变。,1)ANL PSW,#11100111B ;PSW的D4、D3位为00,2)CLR C,RLC A ;左移一位,相当于乘2,MOV R0,A,CLR C,RLC A ;再乘2,即乘4,ADD A,R0;乘2+乘4=乘6,3)ANL A,#0FH;高4位屏蔽(清0),ANL P1,#F0H;P1低4位清0,ORL P1,A ;(P1.31.0)(A30),35,例:将八盏霓虹灯从右往左逐个循环点亮,MOV A,#01H,MOV P1,A,RL A,XXXX(跳转指令),36,阅读程序段并写出运行结果,设(A)=83H,(R0)=17H,(17H)=34H,问执行以下程序段后,(A)=?,ANL A,#17H,ORL 17H,A,XRL A,R0,练习,37,Over!,38,
展开阅读全文