《C51单片机的软件基础.ppt》由会员分享,可在线阅读,更多相关《C51单片机的软件基础.ppt(82页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、*14.180C51单片机的指令系统单片机的指令系统4.1.1指令格式指令格式一条汇编语言指令中最多包含一条汇编语言指令中最多包含4个字段,其格式为:个字段,其格式为:标号标号:操作码操作码目的操作数,源操作数;注释目的操作数,源操作数;注释例:例:LOOP:ADDA,10H;A(A)+10H根据设计使某台计算机具有的指令的集合便构成根据设计使某台计算机具有的指令的集合便构成了这一计算机的指令系统。了这一计算机的指令系统。80C51系列单片机的指令系统共有系列单片机的指令系统共有111条指令。条指令。*21.标号标号标号标号是用户定义的一个符号,是用户定义的一个符号,表示指令或数据的存储单元地
2、址。表示指令或数据的存储单元地址。标号由以英文字母开始的标号由以英文字母开始的18个字母或数字串组成,以冒号个字母或数字串组成,以冒号“:”结尾。不能用指令助记符、伪指令或寄存器名来做标号。一旦结尾。不能用指令助记符、伪指令或寄存器名来做标号。一旦使用了某标号定义一地址单元,在程序的其它地方就不能随意使用了某标号定义一地址单元,在程序的其它地方就不能随意修改这个定义,也不能重复定义。修改这个定义,也不能重复定义。一条指令中的标号代表该指令所存放的第一个字节存储单元的一条指令中的标号代表该指令所存放的第一个字节存储单元的地址,地址,故标号又称为符号地址,故标号又称为符号地址,在汇编时,把该地址赋
3、值给该在汇编时,把该地址赋值给该标号。标号。*32.操作码操作码操作码操作码是用是用英文缩写的指令或伪指令功能助记符英文缩写的指令或伪指令功能助记符,用来表示指,用来表示指令的性质或功能。如令的性质或功能。如MOV表示传送操作,表示传送操作,ADD表示加法操作。表示加法操作。*43.操作数操作数操作数字段给出参与操作的数据或数据所在单元的地址。操作数字段给出参与操作的数据或数据所在单元的地址。操作数字段的内容复杂多样,它可能为以下几种情况之一:操作数字段的内容复杂多样,它可能为以下几种情况之一:(1)工作寄存器名工作寄存器名(2)特殊功能寄存器名特殊功能寄存器名(3)标号名标号名(4)常数常数
4、(5)$(6)表达式表达式*5(1)工作寄存器名工作寄存器名由由PSW.3和和PSW.4规定的当前工作寄存器区中的规定的当前工作寄存器区中的R0R7都可以都可以出现在操作数字段中。出现在操作数字段中。(2)特殊功能寄存器名特殊功能寄存器名8051中的中的21个特殊功能寄存器的名字都可以作为操作数使用。个特殊功能寄存器的名字都可以作为操作数使用。(3)标号名标号名可以在操作数字段中引用的标号包括:可以在操作数字段中引用的标号包括:赋值标号:赋值标号:由汇编伪指令由汇编伪指令EQU等赋值的标号可以作为操作数。等赋值的标号可以作为操作数。指令标号:指令标号:指令标号虽未被赋值,但这条指令的第一字节地
5、址指令标号虽未被赋值,但这条指令的第一字节地址就是这个标号的值,在以后指令操作数字段中可以引用。就是这个标号的值,在以后指令操作数字段中可以引用。*6(4)常数常数为了方便用户,汇编语言指令允许以各种数制表示常数,即常为了方便用户,汇编语言指令允许以各种数制表示常数,即常数可以写成二进制、十进制或十六进制等形式。数可以写成二进制、十进制或十六进制等形式。(5)$操作数字段中还可以使用一个专门符号操作数字段中还可以使用一个专门符号“$”,用来表示程序计数,用来表示程序计数器的当前值。这个符号最常出现在转移指令中,如器的当前值。这个符号最常出现在转移指令中,如“SJMP$”,该指令表示继续执行该指
6、令,在原地循环。该指令表示继续执行该指令,在原地循环。*7(6)表达式表达式 汇编程序允许把表达式作为操作数使用。在汇编时,计算出表汇编程序允许把表达式作为操作数使用。在汇编时,计算出表达式的值,并把该值填入目标码中。例如:达式的值,并把该值填入目标码中。例如:MOVA,SUM+l。*84.1.2指令系统的寻址方式指令系统的寻址方式寻找操作数所在单元的地址称为寻找操作数所在单元的地址称为寻址寻址;确定操作数所在单元;确定操作数所在单元地址的方法称为地址的方法称为寻址方式寻址方式。80C51单片机指令系统中的寻址方式共有七类,分别为单片机指令系统中的寻址方式共有七类,分别为立即寻址、立即寻址、寄
7、存器寻址、寄存器寻址、寄存器间接寻址、寄存器间接寻址、直接寻址、直接寻址、变址寻址、变址寻址、相对寻址、相对寻址、位寻址。位寻址。*91.立即寻址立即寻址操作数就跟在操作码的后面,可以立即参与指令所规操作数就跟在操作码的后面,可以立即参与指令所规定的操作,不须另去寄存器或存储器等处寻找和取数。定的操作,不须另去寄存器或存储器等处寻找和取数。例:例:MOVA,#30H;A30HMOVDPTR,#2000H;DPTR2000H书写单片机指令时,为了辨识是立即数,规定在它的书写单片机指令时,为了辨识是立即数,规定在它的前面加一个前面加一个“#”号作为前缀。号作为前缀。*102.寄存器寻址寄存器寻址
8、寻址某工作寄存器,自该寄存器读取或存放操作数,寻址某工作寄存器,自该寄存器读取或存放操作数,以完成指令所规定的操作。以完成指令所规定的操作。例例MOVR3,A;R3(A)ADDA,R2;A(A)+(R2)可以寻址的寄存器种类有工作寄存器可以寻址的寄存器种类有工作寄存器R0R7、累加器、累加器A、寄存器、寄存器B、数据指针、数据指针DPTR、位累加器、位累加器Cy。*113.寄存器间接寻址寄存器间接寻址寄存器中存放的是地址而不是操作数,寻找到该工作寄存器寄存器中存放的是地址而不是操作数,寻找到该工作寄存器后,以其内容为地址,去寻找所指的后,以其内容为地址,去寻找所指的RAM单元以读取或存放单元以
9、读取或存放操作数,称为寄存器间接寻址。操作数,称为寄存器间接寻址。例例设设R1的内容为的内容为40H,则,则MOVA,R1;A片内片内RAM(40H)的内容。的内容。图图4-1MOVA,R1指令执行过程指令执行过程A1AH*124.直接寻址直接寻址直接给出操作数所在的存储单元地址,以供寻址取数直接给出操作数所在的存储单元地址,以供寻址取数或存放的寻址方式称为直接寻址。或存放的寻址方式称为直接寻址。对于对于80C51系列单片机,直接寻址可用于访问程序存储系列单片机,直接寻址可用于访问程序存储器,也可用于访问数据存储器。器,也可用于访问数据存储器。*135.变址寻址变址寻址(或称基址加变址寄存器间
10、接寻址或称基址加变址寄存器间接寻址)这种寻址方式只用于访问程序存储器,当然只能读这种寻址方式只用于访问程序存储器,当然只能读取,不能存放,它主要用于查表性质的访问。取,不能存放,它主要用于查表性质的访问。以程序计数器以程序计数器PC或数据指针或数据指针DPTR作为基址寄存器,作为基址寄存器,以累加器以累加器A作为变址寄存器,把它们的和作为程序存储作为变址寄存器,把它们的和作为程序存储器的地址,再寻址该单元,读取数据。器的地址,再寻址该单元,读取数据。指令指令MOVCA,A+DPTRMOVCA,A+PC*14例如:例如:MOVCA,A+DPTR;A(A)+(DPTR)设设(A)=10H,(DPT
11、R)=2000H,程序存储器的,程序存储器的(2010H)=36H,则,则上面语句的功能是将上面语句的功能是将A的内容与的内容与DPTR的内容相加,形成操作数的内容相加,形成操作数的地址的地址2010H,把该地址中的数据传送到累加器,把该地址中的数据传送到累加器A。即。即(DPTR)+(A)A。结果。结果(A)=36H。图图4-2MOVCA,A+DPTR的执行示意图的执行示意图*156.相对寻址相对寻址在相对转移指令中采用相对寻址方式,在指令的操作数部分给在相对转移指令中采用相对寻址方式,在指令的操作数部分给出地址的相对偏移量。相对偏移量为一个带符号的出地址的相对偏移量。相对偏移量为一个带符号
12、的8位二进制数。位二进制数。将相对转移指令所在的地址称为源地址;转移后的地址称为目将相对转移指令所在的地址称为源地址;转移后的地址称为目的地址。的地址。目的地址目的地址=源地址源地址+转移指令字节数转移指令字节数+相对偏移量。相对偏移量。*16例例SJMP50H设指令所在设指令所在PC值为值为2000H,而指令的机器码为,而指令的机器码为2字节字节80H、50H,则转移去的地址则转移去的地址=2000H+02H+50H=2052H,故指令执行后,故指令执行后,PC的值变为的值变为2052H,程序下一次执行的地址为,程序下一次执行的地址为2052H。在实际编程中,往往已知源地址和目的地址,从而计
13、算偏移量。在实际编程中,往往已知源地址和目的地址,从而计算偏移量。在在80C51中,常用中,常用“rel”表示为相对偏移量。表示为相对偏移量。rel计算方法:计算方法:rel=目的地址目的地址(源地址源地址+转移指令字节数)转移指令字节数)*177.位寻址位寻址80C51单片机设有独立的位处理器单片机设有独立的位处理器(布尔处理器布尔处理器),位寻址时,可以,位寻址时,可以对内部对内部RAM和特殊功能寄存器的某些位寻址单元进行寻址。和特殊功能寄存器的某些位寻址单元进行寻址。区分位地址与字节地址的方法:主要看是位操作指令还是其它指区分位地址与字节地址的方法:主要看是位操作指令还是其它指令,若为位
14、操作指令,则操作数中的地址一定是位地址,反之则令,若为位操作指令,则操作数中的地址一定是位地址,反之则为字节地址。为字节地址。例:例:SETB30H;(;(30H)1*18寻址方式总结:寻址方式总结:MCS-51系统的各寻址方式对应不同的存储器系统的各寻址方式对应不同的存储器空间,使用时要特别注意在各种不同的存储器中空间,使用时要特别注意在各种不同的存储器中采用什么寻址方式。采用什么寻址方式。*1951子系列的子系列的ROM编址图编址图1.直接寻址方式直接寻址方式(转移指令)转移指令)2.变址寻址方式(变址寻址方式(MOVC指令)指令)3.相对寻址方式(相对寻址方式(SJMP指令)指令)片内数
15、据存储器片内数据存储器1.直接寻址方式直接寻址方式2.间接寻址方式间接寻址方式3.位寻址位寻址1.直接寻址方式直接寻址方式2.位寻址位寻址间接寻址方式间接寻址方式片外数据片外数据存储器存储器间接寻址方式间接寻址方式80HFFHSFR00H7FH片内RAM80HFFH片内RAM80328052*204.1.3指令系统指令系统80C51系列单片机的指令系统包括系列单片机的指令系统包括数据传送、数据传送、算术运算、算术运算、逻辑运算、逻辑运算、控制转移、控制转移、位操作位操作五大类指令。五大类指令。分类介绍指令之前,先介绍描述指令的一些符号的意义。分类介绍指令之前,先介绍描述指令的一些符号的意义。R
16、n:表示通用寄存器表示通用寄存器R0R7。Ri:表示通用寄存器中可间接寻址表示通用寄存器中可间接寻址(即用做即用做8位地址指针位地址指针)的寄的寄存器存器R0和和R1。#data8:表示表示8位立即数。位立即数。#data16:表示表示16位立即数。位立即数。*21direct:表示表示8位片内位片内RAM或或SFR区的直接地址。区的直接地址。addr16/addr11:表示外部程序寄存器的表示外部程序寄存器的16位或位或11位地址。位地址。rel:表示表示8位偏移量。位偏移量。bit:表示直接位地址。表示直接位地址。:间接寻址寄存器或基址寄存器的前缀,如间接寻址寄存器或基址寄存器的前缀,如R
17、i,DPTR/:位操作数的前缀,表示对该位取反。:位操作数的前缀,表示对该位取反。(X):X中的内容。中的内容。(X):由由X寻址的单元中的内容。寻址的单元中的内容。:指令操作流程,将箭头右边的内容送入箭头左边的单元指令操作流程,将箭头右边的内容送入箭头左边的单元*22共共29条,是使用最频繁的一类指令,通用格式如下:条,是使用最频繁的一类指令,通用格式如下:MOV目的操作数,源操作数目的操作数,源操作数;目的操作数;目的操作数 源操作数源操作数属属“复制复制”性质,而不是性质,而不是“搬家搬家”数数据据传传送送类类指指令令不不影影响响标标志志位位:Cy、Ac和和OV,但但影影响响奇偶标志位奇
18、偶标志位P。1数据传送类指令数据传送类指令*231数据传送到累加器数据传送到累加器A的指令的指令 MOVA,#data;AdataMOVA,Rn;A(Rn)MOVA,Ri;A(Ri)MOVA,direct;A(direct)功能:把源操作数的内容送入累加器功能:把源操作数的内容送入累加器A。例如:例如:MOVA,#10H,该指令执行时将立即数,该指令执行时将立即数l0H送入送入累加器累加器A中。该操作影响中。该操作影响PSW的的P标志位。标志位。*242.数据传送到工作寄存器数据传送到工作寄存器Rn的指令的指令 MOVRn,#data;RndataMOVRn,direct;Rn(direct)
19、MOVRn,A;Rn(A)功功能能:是是把把源源操操作作数数的的内内容容送送入入当当前前一一组组工工作作寄寄存存器器区区的的R0R7中的某一个寄存器。中的某一个寄存器。指指令令中中Rn在在内内部部数数据据存存储储器器中中的的地地址址由由当当前前的的工工作作寄寄存存器器组组选选择择位位RS1、RS0确确定定,可可以以是是00H07H、08H0FH、10H17H、18H1FH。*25(3)(3)数据传送到直接地址的指令数据传送到直接地址的指令MOVdirect,A;(A)directMOVdirect,Rn;(Rn)direct,n=07MOVdirect1,direct2;MOVdirect,R
20、i;(Ri)directMOVdirect,#data;#datadirect功能:功能:把源操作数送入直接地址指出的存储单元。把源操作数送入直接地址指出的存储单元。direct指的是内部指的是内部RAM或或SFR的地址。的地址。*26(4)数据传送到间接地址的指令数据传送到间接地址的指令MOVRi,#data;(Ri)dataMOVRi,direct;(Ri)(direct)MOVRi,A;(Ri)(A)功能:把源操作数的内容送入由间接地址功能:把源操作数的内容送入由间接地址Ri所指所指的片内的片内RAM单元中。单元中。*27(5)16位数传送指令位数传送指令MOVDPTR,#data16;
21、#data16DPTR唯一的唯一的16位数据的传送指令位数据的传送指令,立即数的高立即数的高8位送入位送入DPH,立即,立即数的低数的低8位送入位送入DPL。*28设片内设片内RAM30H单元的内容为单元的内容为40H,设片内,设片内RAM40H单元单元的内容为的内容为10H,片内,片内RAM10H单元的内容为单元的内容为00H,(P1)=0CAH,请写出下列指令执行后的结果。,请写出下列指令执行后的结果。解:解:MOVR0,#30H;R030HMOVA,R0;A40HMOVR1,A;R140HMOVB,R1;B10HMOVR0,P1;30H0CAHMOVP3,P1;P30CAHMOV10H,
22、#20H;10H20HMOV30H,10H;30H20H*29(6)累加器累加器A与外部数据存储器传送指令与外部数据存储器传送指令MOVXA,DPTR;A(DPTR),且使,且使RD=0MOVXA,Ri;A(Ri),且使,且使RD=0MOVXDPTR,A;(DPTR)(A),且使,且使WR=0MOVXRi,A;(Ri)(A),且使,且使WR=0*30(7)程序存储器内容送累加器程序存储器内容送累加器A指令指令1.以数据指针寄存器与累加器内容的和为地址读取内容,传送以数据指针寄存器与累加器内容的和为地址读取内容,传送到累加器的指令到累加器的指令 MOVCA,A+DPTR;A(A)十十(DPTR)
23、932.以程序计数器与累加器内容的和为地址读取内容以程序计数器与累加器内容的和为地址读取内容MOVCA,A十十PC;PC(PC)十十1,83A(A)十十(PC)该类指令采用变址寻址方式,把程序存储器(该类指令采用变址寻址方式,把程序存储器(ROM或或EPROM)中存放的表格数据读出,传送到累加器中存放的表格数据读出,传送到累加器A。它共有两条单字节它共有两条单字节指令指令,指令操作码助记符为指令操作码助记符为MOVC。*31设程序存储器中数据与图设程序存储器中数据与图4-4相同,执行以下程序:相同,执行以下程序:1000H:MOVA,#10H1002H:MOVDPTR,#1000H1005H:
24、MOVCA,A+DPTR图图4-4 4-4 程序存储器的一组数据表格程序存储器的一组数据表格 结果为:结果为:(A)=02H,(R0)=02H,(PC)=1004H。;A10H,查表的偏移量,查表的偏移量;DPTR1000H,查表的偏移量查表的偏移量;A(10H+1000H)*32例:例:已知已知(A)=30H,(B)=40H,执行下列指令后,执行下列指令后,堆栈内容如何变化?堆栈内容如何变化?MOVSP,#60HPUSHAPUSHB堆栈工作示意图堆栈工作示意图60H61H62H63H64HSP60H61H62H63H64HSP30H60H61H62H63H64HSP30H40H;SP(SP)
25、十十1,(SP)(A);SP(SP)十十1,(SP)(B);SP60H进栈指令或压入指令进栈指令或压入指令PUSHdirect;SP(SP)十十1,(SP)(direct)(8)堆栈操作指令堆栈操作指令*33出栈指令或弹出指令出栈指令或弹出指令POPdirect;(direct)(SP);SP(SP)-1例:例:执行下列两条弹出指令后,堆栈内容如何变化?执行下列两条弹出指令后,堆栈内容如何变化?MOVSP,#60HPUSHAPUSHBPOPAPOPB堆栈工作示意图堆栈工作示意图;A(SP),SP(SP)-1;B(SP),SP(SP)-1A40H60H61H62H63H64H30H40HSP60
26、H61H62H63H64HSP30H40H60H61H62H63H64HSP30HB30H*34(9)交换指令交换指令XCHA,RnXCHA,RiXCHA,directXCHDA,RiSWAPA前三条前三条XCH指令是将指令是将A的内容和源操作数内容互换,的内容和源操作数内容互换,XCHD是将是将A的低的低4位和位和(Ri)所指出的内部所指出的内部RAM单元的低单元的低4位互换,最后一条位互换,最后一条SWAP指令是将指令是将A的高的高4位与低位与低4位之间进位之间进行交换。行交换。*352算术操作类指令算术操作类指令算术操作类指令有算术操作类指令有24条条,4种基本操作:加、减、乘、除。种基
27、本操作:加、减、乘、除。算术操作指令的执行将影响程序状态字算术操作指令的执行将影响程序状态字PSW的的3个标志位:个标志位:3个标志除特别指出外,服从以下规则:个标志除特别指出外,服从以下规则:操操作作结结果果在在最最高高位位有有进进位位输输出出(加加法法时时)或或借借位位输输入入(减法时),(减法时),Cy=1;否则;否则;Cy=0。操操作作结结果果的的低低4位位有有进进位位输输出出(加加法法时时)或或有有向向高高4位位的的借位(减法时),借位(减法时),Ac=1;否则;否则;Ac=0。溢出标志溢出标志OV满足逻辑关系式满足逻辑关系式OV=C6 C7。*36(1)加法指令加法指令1)不带进位
28、位的加法指令不带进位位的加法指令指令格式指令格式功能功能ADDA,Rn;A(A)+(Rn)ADDA,direct;A(A)+(direct)ADDA,Ri;A(A)+(Ri)ADDA,#data;A(A)+data说明:说明:(1)相加过程中各标志变化符合规则要求;相加过程中各标志变化符合规则要求;(2)无无符符号号数数相相加加,和和的的溢溢出出与与Cy置置位位是是统统一一的的;带带符符号号数数相相加加,和和的的溢溢出出是是指指和和+127或或-128,另另用用OV置置位来表示。位来表示。*37例例累加器内容为累加器内容为53H,R0内容为内容为FCH。执行指令。执行指令ADDA,R0后,后,
29、(A)=?(PSW)中有关各位中有关各位=?(A)=4FH,Cy=1,Ac=0,OV=0,P=1。*382)带进位位的加法带进位位的加法指令格式指令格式功能功能ADDCA,Rn;A(A)+(Rn)+(Cy)ADDCA,direct;A(A)+(direct)+(Cy)ADDCA,Ri;A(A)+(Ri)+(Cy)ADDCA,#data;A(A)+data+(Cy)说说明明:(1)Cy值值是是指指指指令令开开始始执执行行时时的的进进位位标标志志值值,而而不不是是相相加加过程中产生的值过程中产生的值;(2)带进位加法指令主要用于多字节的加法运算中。带进位加法指令主要用于多字节的加法运算中。*393
30、)加加1指令指令指令格式指令格式功能功能INCA;A(A)+1INCRn;Ri(Rn)+1INCRi;(Rj)(Ri)+1INCdirect;direct(direct)+1INCDPTR;DPTR(DPTR)+1说说明明:(1)与与加加法法小小类类指指令令不不同同,加加1小小类类指指令令执执行行后后不不影影响响标标志位。志位。(2)INCDPTR是唯一的是唯一的16位数算术运算指令。位数算术运算指令。(3)加加1指指令令用用途途广广泛泛,例例可可以以用用来来修修改改操操作作数数的的地地址址,以以便便使用间址指令。使用间址指令。*404)累加器内容十进制调整指令累加器内容十进制调整指令DAA说
31、说明明:(1)该该指指令令可可使使加加法法运运算算所所得得存存于于累累加加器器A中中的的和和进进行十进制调整。行十进制调整。执执行行的的具具体体操操作作是是:低低半半字字节节的的值值9或或Ac为为1时时低低半半字字节加节加6;高半字节的值;高半字节的值9或或Cy为为1时高半字节加时高半字节加6。(2)这一指令专门配用于这一指令专门配用于BCD码加法运算码加法运算(3)十十进进制制调调整整指指令令执执行行的的结结果果根根据据有有无无进进位位将将使使进进位位位位相应置位或复位。相应置位或复位。*41(A)=01H,C=1,相当于十进制数,相当于十进制数101。例例作加法后,(作加法后,(A)=9B
32、H,C=0,Ac=0则执行则执行DAA后,后,A和和C的内容为多少?的内容为多少?*421)带借位减法指令带借位减法指令指令格式指令格式功能功能SUBBA,Rn;A(A)-(Rn)-(Cy)SUBBA,direct;A(A)-(direct)-(Cy)SUBBA,Ri;A(A)-(Ri)-(Cy)SUBBA,#data;A(A)-data-(Cy)说说明明:(1)减减法法指指令令只只有有一一组组带带借借位位的的减减法法指指令令,没没有有不不带带借借位位的的减减法法指指令令。若若要要进进行行不不带带借借位位的的减减法法操操作作,则则在在减减法法之之前前,要先用指令使要先用指令使Cy清零,即使清零
33、,即使Cy=0;然后再相减。;然后再相减。(2)减法指令执行后按规则影响标志位减法指令执行后按规则影响标志位。(2)减法指令减法指令*43例例设设(A)=52H,(R0)=B4H,Cy=0,则则执执行行指指令令SUBBA,R0后后,(A)=?(PSW)中中有关位有关位=?结果结果(A)=9EH,C=1,Ac=1,OV=1,P=1*442)减减1指令指令指令格式指令格式功能功能DECA;A(A)-1DECRn;Rn(Rn)-1DECRi;(Ri)(Ri)-1DECdirect;direct(direct)-1说明:与减法小类指令不同,减说明:与减法小类指令不同,减1小类指令执行后不影响小类指令执
34、行后不影响标志位。标志位。*45说说明明:单单字字节节指指令令。但但执执行行时时间间要要4个个机机器器周周期期,与与下下面面的的除法指令相同,是指令系统中执行时间最长的两条指令。除法指令相同,是指令系统中执行时间最长的两条指令。该该指指令令可可使使放放在在累累加加器器A和和寄寄存存器器B中中的的两两个个待待乘乘数数相相乘乘,乘法的结果为乘法的结果为16位,高位,高8位存放于位存放于B中,低中,低8位在位在A中。中。指指令令执执行行后后将将影影响响三三个个标标志志位位:C、OV、P,C复复位位,当当乘乘积积(B)=0时时,OV=0,否否则则OV=1,P按按A中中1的的个个数数的的奇偶性确定。奇偶
35、性确定。(3)乘法指令乘法指令MULAB;BA(A)(B)*46说说明明:该该指指令令可可使使放放在在累累加加器器A中中的的被被除除数数,与与寄寄存存器器B中中的除数相除,商数在的除数相除,商数在A,余数在,余数在B中。中。指指令令执执行行后后将将影影响响标标志志位位,当当B中中的的原原始始值值为为零零,即即除除数数为为零零时时,除除法法没没有有意意义义,A、B中中的的数数不不定定,溢溢出出标标志志OV置置1,其其余余情情况况,OV都都清清零零;进进位位标标志志C始始终终都都为为零零,P按按A中中1的个数的奇偶性确定。的个数的奇偶性确定。(4)除法指令除法指令DIVAB;(;(A)(B),商数
36、在),商数在A,余数在,余数在B*473.逻辑操作类指令逻辑操作类指令逻辑操作类指令有逻辑操作类指令有24条,包括条,包括简单逻辑操作简单逻辑操作指令、指令、与与指令、指令、或或指令、指令、异或异或指令等指令等4小类。小类。指令格式指令格式功能功能CPLA;A(A)CLRA;A0RLA;A内容循环左移一位内容循环左移一位RRA;A内容循环右移一位内容循环右移一位RLCA;A内容带进位循环左移一位内容带进位循环左移一位RRCA;A内容带进位循环右移一位内容带进位循环右移一位(1)简单逻辑操作与移位指令简单逻辑操作与移位指令*48例:设(例:设(A)=5AH、C=1,问下列指令执行后,问下列指令执
37、行后,(A)=?则执行指令则执行指令CPLA后,后,执行指令执行指令CLRA后,后,执行指令执行指令RLA后,后,执行指令执行指令RRA后,后,执行指令执行指令RLCA后,后,执行指令执行指令RRCA后,后,(A)A5H;(A)0;(A)B4H;(A)2DH;(A)B5H,(A)ADH,*49(2)逻辑与指令逻辑与指令指令格式指令格式功能功能ANLA,Rn;A(A)(Rn)ANLA,direct;A(A)(direct)ANLA,Ri;A(A)(Ri)ANLA,#data;A(A)dataANLdirect,A;direct(direct)(A)ANLdirect,#data;direct(d
38、irect)data说明:说明:(1)逻辑与运算以及其它逻辑运算均是按位进行的。逻辑与运算以及其它逻辑运算均是按位进行的。(2)逻逻辑辑与与运运算算除除了了可可以以用用累累加加器器为为目目的的操操作作数数外外,还还有有两两条条以以直直接接地地址址单单元元为为目目的的操操作作数数的的指指令令,这这样样就就很很便便于于对对各各个特殊功能寄存器的内容按需要进行变换。个特殊功能寄存器的内容按需要进行变换。*50例:例:MOVA,#35H;A35HANLA,#0FH;A(A)0FH,即,即(A)=05H例:清除例:清除A.3、A.4、A.5、A.6 ANLA,#10000111B*51(3)逻辑或指令逻
39、辑或指令指令格式指令格式功能功能ORLA,Rn;A(A)(Rn)ORLA,direct;A(A)(direct)ORLA,Ri;A(A)(Ri)ORLA,#data;A(A)dataORLdirect,A;direct(direct)(A)ORLdirect,#data;direct(direct)data说说明明:与与、或或逻逻辑辑运运算算指指令令结结合合在在一一起起,将将更更便便于于对对RAM单单元元的内容进行变换,特别是对特殊功能寄存器的内容进行变换。的内容进行变换,特别是对特殊功能寄存器的内容进行变换。*52例:使例:使A.3、A.4、A.5、A.6 置置例例:要要选选用用工工作作寄寄
40、存存器器3组组,请请采采用用三三种种不不同同的的指指令令实实现现之。之。解:(解:(1)SETBPSW.4SETBPSW.3(2)ORLPSW,#18H(3)MOVPSW,#18HORLA,#01111000B*53(4)逻辑异或指令逻辑异或指令指令格式指令格式功能功能XRLA,Rn;A(A)(Rn)XRLA,direct;A(A)(direct)XRLA,Ri;A(A)(Ri)XRLA,#data;A(A)dataXRLdirect,A;direct(direct)(A)XRLdirect,#data;direct(direct)data0 0=00 1=11 0=11 1=0*54例:使例
41、:使A.3、A.4、A.5、A.6 取反。取反。例:使例:使A内容取反。内容取反。XRLA,#01111000BXRLA,#11111111B*554.控制转移类指令控制转移类指令80C51有有17条条程序程序转移指令:转移指令:无条件转移指令无条件转移指令条件转移指令条件转移指令子程序调用子程序调用返回指令返回指令有了丰富的程序转移类指令有了丰富的程序转移类指令,就能很方便地实现程序的向就能很方便地实现程序的向前、向后跳转,并根据条件前、向后跳转,并根据条件分支运行分支运行、循环运行循环运行、调用子调用子程序程序等。等。空操作指令空操作指令*56(1)无条件转移指令无条件转移指令1)长转移长
42、转移(64KB地址内地址内)指令指令LJMPaddr162)绝对转移绝对转移(2KB地址内地址内)指令指令AJMPaddr113)相对短转移相对短转移(-128B+127B地址内地址内)指令指令SJMPrel4)变址方式的转移变址方式的转移(64KB地址内地址内)指令指令JMPA十十DPTR指令中用到的符号含义:指令中用到的符号含义:addr16:16位位地地址址,可可以以为为16位位二二进进制制数数,常常写写为为四四位位十十六六进进制数,也可以用符号地址来代真。制数,也可以用符号地址来代真。addr11:11位位地地址址,是是16位位地地址址的的低低11位位,可可以以为为四四位位十十六六进进
43、制数,也可以是代表制数,也可以是代表16位地址的标号。位地址的标号。rel:8位位带带符符号号数数,是是相相对对转转移移地地址址的的偏偏移移量量,也也可可以以用用一一个个标标号号来来表表示示,此此时时只只表表示示所所要要转转移移到到的的目目的的地地址址,并并应应据据此此算算出出实实际偏移量。际偏移量。*574条无条件转移指令提供了不同的转移范围和寻址方式条无条件转移指令提供了不同的转移范围和寻址方式:LJMPaddr16;PCaddr16,02addr158addr70AJMPaddr11;PC(PC)+2,(PC)100addr11addr10800001addr70SJMPrel;PC(P
44、C)+2+rel,80relJMPA+DPTR;PC(A)+(DPTR),73*58 1长转移指令长转移指令LJMPaddr16;(PC)addr16,02addr158addr70 例如例如:在程序存储器在程序存储器0000H单元存放一条指令单元存放一条指令:LJMP3000H;1000H023000(PC)3000H则上电复位后程序将跳到则上电复位后程序将跳到3000H单元去执行用户程序。单元去执行用户程序。*59 2绝对转移指令绝对转移指令AJMPaddr11;(PC)(PC)+2,(PC)100addr11addr10800001addr70 PC15 PC14 PC13 PC12 P
45、C11 a10 a9 a8 a7 a6 a5 a4 a3 a2 a1 a0PC 转移目的地址转移目的地址:该该指指令令执执行行后后,程程序序转转移移的的目目的的地地址址是是由由AJMP指指令令所所在在位位置置的的地地址址PC值值加加上上该该指指令令字字节节数数2,构构成成当当前前PC值值。取取当当前前PC值值的的高高5位位与与指指令令中中提提供供的的11位位直直接接地地址址形形成成转移的目的地址转移的目的地址,即即:它它的的机机器器代代码码是是由由11位位直直接接地地址址addr11和和指指令令特特有有操操作作码码00001,按按下列分布组成的下列分布组成的:*60例如例如:若若AJMP指令地
46、址指令地址(PC)=2300H2300H01FFAJMP0FFH;(PC)(PC)+2=2302H(PC)10000011111111结果为结果为:转移目的地址转移目的地址(PC)=20FFH,程序向前转向程序向前转向20FFH单元单元开始执行。开始执行。又如又如:若若AJMP指令地址指令地址(PC)=2FFFH。执行指令执行指令:2FFFH01FFAJMP0FFH;(PC)(PC)+2=3001H,(PC)10000011111111结果为结果为:转移目的地址转移目的地址(PC)=30FFH,程序向后转向程序向后转向30FFH单元开始执行。单元开始执行。*613.相对短转移相对短转移(-12
47、8+127地址内地址内)指令指令SJMPrel说明:说明:(1)此转移指令是两字节。此转移指令是两字节。(2)指令进行的操作为:指令进行的操作为:PC(PC)+2,PC(PC)+rel(3)rel计算方法:计算方法:rel=目的地址目的地址-(源地址(源地址+2)*624.变址方式的转移变址方式的转移(64KB地址内地址内)指令指令JMPA+DPTR;PC(A)+(DPTR),73它它是是以以数数据据指指针针DPTR的的内内容容为为基基址址,以以累累加加器器A的的内内容容为为相相对对偏偏移移量量,在在64KB范范围围内内可可无无条条件件转转移移的的单单字字节节指指令令。该该指指令令的的特特点点
48、是是转转移移地地址址可以在程序运行中加以改变。可以在程序运行中加以改变。例例:已已知知累累加加器器A的的内内容容为为0、2、4、6、8五五个个偶偶数数中中的的一一个个,标标号号TAB的的地地址为址为1800H,试剖析下列程序段的执行结果:,试剖析下列程序段的执行结果:MOVDPTR,TAB;表首址送表首址送DPTRJMPA+DPTR;依据依据A值转移值转移TAB:AJMP100H;当当(A)=0时转时转1900H执行执行AJMP200H;当当(A)=2时转时转1A00H执行执行AJMP300H;当当(A)=4时转时转1B00H执行执行AJMP400H;当当(A)=6时转时转1C00H执行执行A
49、JMP500H;当当(A)=8时转时转1D00H执行执行*63(2)累加器判零条件转移指令累加器判零条件转移指令JZrel;若(若(A)=0,则,则PC(PC)+2+rel若(若(A)0,则,则PC(PC)+2JNZrel;若(若(A)0,则,则PC(PC)+2+rel若(若(A)=0,则,则PC(PC)+2例:将外部数据存储器的一个数据块传送到内部数据例:将外部数据存储器的一个数据块传送到内部数据RAM,两者的首地址分别为两者的首地址分别为2000H和和40H,遇到传送的数据为零时为,遇到传送的数据为零时为止。止。*64MOVDPTR,2000H;外部数据块首址送外部数据块首址送R0MOVR
50、1,40H;内部数据块首址送内部数据块首址送R1LOOP:MOVXA,DPTR;取外部取外部RAM数据入数据入AHERE:JZHERE;数据为零则终止传送数据为零则终止传送MOVR1,A;数据传送至内部数据传送至内部RAM单元单元INCR0;修改地址指针修改地址指针,指向下一数据地址指向下一数据地址INCR1SJMPLOOP;循环取数循环取数*652比较条件转移指令比较条件转移指令比较转移指令共有比较转移指令共有4条条,其一般格式为其一般格式为:CJNE目的操作数,源操作数,目的操作数,源操作数,rel这这组组指指令令是是先先对对两两个个规规定定的的操操作作数数进进行行比比较较,根根据据比比较