《三章MCS51单片机的指令系统ppt课件.ppt》由会员分享,可在线阅读,更多相关《三章MCS51单片机的指令系统ppt课件.ppt(117页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、1三章MCS51单片机的指令系统ppt课件 Still waters run deep.流静水深流静水深,人静心深人静心深 Where there is life,there is hope。有生命必有希望。有生命必有希望2 本本节节主主要要论论述述指指令令格格式式、指指令令的的三三种种表表示示形形式式、指指令令字字节节数数、指指令令分分类类和和指令系统综述指令系统综述等五个问题等五个问题。3.1概概述述3 标标号号又又称称为为指指令令地地址址符符号号,一一般般由由1-61-6个符组成,以个符组成,以字母字母开头的字母数字串。开头的字母数字串。一、指令格式一、指令格式 标号标号标号标号 :操作
2、码:操作码:操作码:操作码 目的操作数,源操作数目的操作数,源操作数目的操作数,源操作数目的操作数,源操作数 ;注释;注释;注释;注释 注意注意:方括号是可选项。方括号是可选项。4操操作作码码用用MCS-51单单片片机机所所规规定定的的助助记记符来表示,它规定指令进行何种操作。符来表示,它规定指令进行何种操作。操操作作数数是是指指令令操操作作的的对对象象,分分为为目目的的操操作数作数和和源操作数源操作数,两者之间用两者之间用“,”分开。分开。注释注释是对该指令作用或功能的说明。是对该指令作用或功能的说明。5二、二、指令的三种表达形式指令的三种表达形式1、指令的二进制形式指令的二进制形式2、指令
3、的十六进制形式指令的十六进制形式3、指令的助记符形式指令的助记符形式6如果累加器如果累加器如果累加器如果累加器A A中已有一个加数中已有一个加数中已有一个加数中已有一个加数2020,那么能够完,那么能够完,那么能够完,那么能够完成成成成20206 6并把结果送入累加器并把结果送入累加器并把结果送入累加器并把结果送入累加器A A的加法指令的加法指令的加法指令的加法指令:二进制形式二进制形式二进制形式二进制形式:0011100000000110B:0011100000000110B十六进制形式十六进制形式十六进制形式十六进制形式:3806H:3806H助记符形式助记符形式助记符形式助记符形式:AD
4、DADDAA,06H;AA+06H06H;AA+06H例如例如例如例如71、单字节指令(、单字节指令(49条)条)单字节指令只有一个字节。单字节指令只有一个字节。单字节指令只有一个字节。单字节指令只有一个字节。1)无操作数单节指令无操作数单节指令只有操作码字段,操作数隐含在操作码中只有操作码字段,操作数隐含在操作码中只有操作码字段,操作数隐含在操作码中只有操作码字段,操作数隐含在操作码中例如:例如:INCDPTR指令码:指令码:10100011三、三、指令的字节数指令的字节数82)含有操作数寄存器号的单字节指令含有操作数寄存器号的单字节指令例如:八位数传送指令例如:八位数传送指令MOVA,Rn
5、其中,其中,n的取值范围为的取值范围为07。指令码:指令码:11101rrr 这类指令的指令码有操作码字段和专门这类指令的指令码有操作码字段和专门用来指示操作数所在寄存器号的字段组成。用来指示操作数所在寄存器号的字段组成。9 双字节指令含有两个字,操作码字节在前,双字节指令含有两个字,操作码字节在前,双字节指令含有两个字,操作码字节在前,双字节指令含有两个字,操作码字节在前,操作数字节在后。操作数字节在后。操作数字节在后。操作数字节在后。例如:八位数传送指令例如:八位数传送指令MOVA,data;Adata指令码:指令码:74H2、双字节指令(、双字节指令(46条)条)10 指指指指令令令令码
6、码码码的的的的第第第第一一一一字字字字节节节节为为为为操操操操作作作作码码码码,第第第第二二二二、三三三三字字字字节节节节为操作数或操作数地址。为操作数或操作数地址。为操作数或操作数地址。为操作数或操作数地址。3、三字节指令(、三字节指令(16条)条)例如:逻辑与操作指令例如:逻辑与操作指令ANLdirect,data指令码:指令码:53H111、指令分类、指令分类2)算术运算指令算术运算指令3)逻辑运算指令逻辑运算指令1)数据传送指令数据传送指令4)控制转移和位操作指控制转移和位操作指令令 四、指令的分类及符号说明四、指令的分类及符号说明121)Rn:表示当前选中的寄存器区的表示当前选中的寄
7、存器区的8个工作寄存器个工作寄存器(n=07)中的一个。)中的一个。2)Ri:表示寄存器间接寻址,表示寄存器间接寻址,Ri只能是只能是R0或或R1。3)#data:8位立即数,实际使用时位立即数,实际使用时data应是应是00H0FFH中的一个。中的一个。4)#data16:16位立即数。位立即数。2、符号的说明、符号的说明135)direct:表表 示示 8位位 内内 部部 数数 据据 存存 储储 器器 单单 元的地址。元的地址。6)addr16:表示表示16位的目的地址。位的目的地址。7)addr11:表示表示11位的目的地址。位的目的地址。8)rel:表示表示8位带符号地址偏移量。位带符
8、号地址偏移量。9)DPTR:表表示示以以DPTR为为数数据据指指针针的的间间接接寻寻址,用于对外部址,用于对外部64KRAM/ROM寻址。寻址。1410)bit:表表示示内内部部RAM(包包括括专专用用寄寄存存器器)中中的直接寻址位。的直接寻址位。13):为为间间址址寄寄存存器器或或基基址址寄寄存存器器的的前前缀。如缀。如Ri,A+PC,A+DPTR。14)/:位位操操作作数数的的前前缀缀,表表示示对对该该位位操操作作数取反。如数取反。如/bit.15)$:当前指令的地址。:当前指令的地址。返返 回回15 MCS-51MCS-51单片机的指令系统共有七种寻址单片机的指令系统共有七种寻址方式。方
9、式。3.2寻址方式寻址方式16 特点:特点:操作数以寄存器的名字表示。操作数以寄存器的名字表示。寻址范围:寻址范围:工作寄存器工作寄存器R0R7、A、B、DPTR。一、寄存器寻址一、寄存器寻址17例如例如:R0(35H)A结果结果A=35HMOVA,R0;AR018特点:特点:指令直接给出操作数。操作数字指令直接给出操作数。操作数字前加前加“#”符号为前缀,以区别直接地符号为前缀,以区别直接地址。址。#data或或#data16,只能做,只能做源操作数源操作数,常用于赋初值。常用于赋初值。二、立即寻址二、立即寻址19例如例如(1)MOVA,44H;A(44H)(2)MOVA,#44H;A44H
10、(1)将片内将片内RAM中中44H单元的内容单元的内容送累加器送累加器A,属于直接寻址。,属于直接寻址。(2)则是把)则是把44H这个数本身送到累这个数本身送到累加器加器A,属于立即寻址。,属于立即寻址。功能:功能:20特特点点:直直接接给给出出操操作作数数地地址址,直直接接地地址址常用常用8位二进制地址。位二进制地址。寻址范围:寻址范围:只限于内部只限于内部RAM。内部。内部RAM的低的低128单元和单元和SFR,SFR除以单元地址除以单元地址形式给出外,还以寄存器符号形式给出。形式给出外,还以寄存器符号形式给出。v直接寻址是访问直接寻址是访问SFR的唯一方法。的唯一方法。三、直接寻址三、直
11、接寻址21功能:功能:将片内将片内RAM56H单元中的内容单元中的内容34H送到累加器送到累加器A中。中。例如:例如:MOVA,56H;A(56H)34H片内片内RAM34H累加器累加器A56H 图图3.1 3.1 指令传递指令传递 22特点:特点:操作数地址以寄存器名称间接操作数地址以寄存器名称间接给出,以寄存器中的内容作为操作数给出,以寄存器中的内容作为操作数的地址。加标识符的地址。加标识符区别于寄存器寻区别于寄存器寻址。址。MCS-51规定:规定:只能以只能以R0、R1和和DPTR实现问址。在寄存器前加实现问址。在寄存器前加“”符号作前缀。符号作前缀。四、寄存器间接寻址四、寄存器间接寻址
12、23(1)内内部部RAM低低128单单元元:只只能能使使用用R0、R1作作间间址址寄寄存存器器,通通用用形形式式为为Ri(i=0,1)。寻址范围:寻址范围:(2)外外部部RAM64KB:只只能能使使用用DPTR作间址寄存器,其形式为作间址寄存器,其形式为DPTR。24(3)外外部部RAM低低256单单元元:一一个个特特殊殊寻寻址址区区,除除可可用用DPTR作作为为间间址址寄寄存存器器寻寻址址外,还可用外,还可用R0或或R1作间址寄存器寻址。作间址寄存器寻址。(4)堆栈操作指令()堆栈操作指令(PUSH和和POP)也应)也应算作寄存器间接寻址,即以堆栈指针算作寄存器间接寻址,即以堆栈指针SP作间
13、址寄存器的间接寻址方式。作间址寄存器的间接寻址方式。25v寄寄存存器器间间接接寻寻址址指指令令不不能能用用于于寻寻址址SFR。v寄存器间接寻址是访问外部寄存器间接寻址是访问外部RAM的唯的唯一方法。一方法。26MOVA,R0;AR0MOVA,R0;A(R0)例例如如:R065H,(65H)26H26H片内片内RAMA65H图图3.23.2R065H注意:是它区别寄存器寻址的标志。注意:是它区别寄存器寻址的标志。执行执行结果结果A65H,执行执行结果结果A26H。27特点:特点:只出现在相对转移指令中。只出现在相对转移指令中。五、相对寻址五、相对寻址目的地址目的地址=指令地址指令地址+指令字节数
14、指令字节数+rel“rel”是一个是一个8位带符号二进制补码位带符号二进制补码数,最大范围是数,最大范围是128+127。28200020008026H8026HSJMPSJMPrelrel;PCPC+2+relPCPC+2+rel程序存储器A图3-3 指令过程PC 26H0000H2000H2001H80H26H2028H02H20HALU2002H例如例如例如例如29特点:特点:访问访问ROM,以,以DPTR或或PC基址寄基址寄存器存器和累加器和累加器A变址寄存器变址寄存器的内容和为地的内容和为地址,寻址该地址单元,读取数据。常用于址,寻址该地址单元,读取数据。常用于查表查表操作。操作。寻
15、址范围:寻址范围:64KB的的ROM六、变址寻址六、变址寻址30(1)MOVCA,APC;A(APC)(2)MOVCA,ADPTR;A(ADPTR)执执执执行行行行第第第第一一一一条条条条时时时时先先先先使使使使当当当当前前前前PCPC值值值值加加加加1 1,然然然然后后后后把把把把这这这这个个个个加加加加1 1后后后后的的的的PCPC值值值值和和和和累累累累加加加加器器器器A A中中中中的的的的偏偏偏偏移移移移量量量量相相相相加加加加,作作作作为为为为操操操操作作作作数数数数地地地地址址址址,从从从从该该该该地地地地址址址址中中中中取取取取出出出出操操操操作作作作数数数数送送送送入入入入A
16、A中。第二条过程与第一条指令类似。中。第二条过程与第一条指令类似。中。第二条过程与第一条指令类似。中。第二条过程与第一条指令类似。31已已知知:片片外外ROM的的2006H单单元元中中有有一一数数34H,编编写写程程序序用用变变址址寻寻址址方方法法把把这这个个数数送送入入A中中,试试进进行分析。行分析。例例3.1解解:根根据据题题目目要要求求,基基址址可可定定为为2000H,地地址址偏移量则为偏移量则为06H,程序如下:,程序如下:MOVDPTR,2000H;DPTR2000HMOVA,06H;A06HMOVCA,ADPTR;A34H32程序存储器A 图3.4 DPTR00H0000H34H2
17、006HALU如图如图如图如图3.43.4所示,这里所示,这里所示,这里所示,这里A A具有具有具有具有双重作用双重作用双重作用双重作用,在指令执行,在指令执行,在指令执行,在指令执行前用来存放地址偏移量,指令执行后为目的操作数。前用来存放地址偏移量,指令执行后为目的操作数。前用来存放地址偏移量,指令执行后为目的操作数。前用来存放地址偏移量,指令执行后为目的操作数。2006H33寻寻址址范范围围:对对片片内内RAM的的位位寻寻址址区区和和11个可位寻址的个可位寻址的SFR进行寻址。进行寻址。七、位寻址七、位寻址 当把八位二进制数中某一位作为操作数当把八位二进制数中某一位作为操作数看待时,这个操
18、作数的地址就称为位地址,看待时,这个操作数的地址就称为位地址,对位地址寻址简称对位地址寻址简称位寻址位寻址。34MOV30H,C;30H是位寻址位地址是位寻址位地址MOVA,30H;30H是直接寻址的字节地址是直接寻址的字节地址MOVC,ACC.7;CyACC.7由由上上面面指指令令可可知知,位位寻寻址址的的位位地地址址与与直直接接寻寻址址的的字字节节地地址址形形式式完完全全一一样样,主主要要由由操操作作码码来区分。来区分。例如例如例如例如返返 回回35这类指令的源操作数和目的操作数地址都这类指令的源操作数和目的操作数地址都在单片机内部。在单片机内部。MOVdest,src3.3MCS-51单
19、片机指令系统单片机指令系统一、数据传送指令一、数据传送指令1、内部数据传送指令(、内部数据传送指令(15条)条)36MOVA,Rn;ARnMOVA,direct;A(direct)MOVA,Ri;A(Ri)MOVA,#data;Adata1)以以A为目的操作数为目的操作数37MOVRn,A;RnAMOVRn,direct;Rn(direct)MOVRn,#data;Rndata2)以以Rn为目的操作数为目的操作数38MOVdirect,A;directAMOVdirect,Rn;directRnMOVdirect1,direct2;direct1(direct2)MOVdirect,Ri;di
20、rect(Ri)MOVdirect,#data;directdata3)以直接地址为目的操作数以直接地址为目的操作数39MOVRi,A;(Ri)AMOVRi,direct;(Ri)(direct)MOVRi,#data;(Ri)data4)以寄存器间接寻址为目的操作数以寄存器间接寻址为目的操作数40已已知知:R130H,试试问问执执行行如如下下指指令令后后累累加器加器A、R7、30H、31H单元中内容各是什么?单元中内容各是什么?MOVA,#40HMOVR7,#50HMOVR1,#45HMOV31H,#48H例例例例3.23.2执行后,结果为执行后,结果为:A=40H,R7=50H,(30H)
21、=45H,(31H)=48H41 已已知知:R0=20H、(21H)=54H、(22H)=55H、(30H)=56H,试试问问执执行行如如下下指指令令后后,结结果果A、40H、R2、20H、和、和P2口中的内容各是什么?口中的内容各是什么?MOVA,21HMOV40H,AMOVR2,22HMOVR0,21HMOVP2,30H例例例例3.33.3结结 果果 为为:A=54H,(40H)=54H,R2=55H,(20H)=54H,P2=56H42已知:已知:(30H)=12H、(31H)=13H、R0=30H、R1=31H,试问执行以下指令后,试问执行以下指令后A、30H、31H和和32H各是什么
22、?各是什么?MOVA,R0MOVR1,AMOVR0,#34HMOV32H,R1执行后,执行后,A=12H,(30H)=34H,(31H)=12H,(32H)=12H例例例例3.43.443内部数据传送指令的小结内部数据传送指令的小结 图图3.5内部指令描述内部指令描述Direct直接寻址直接寻址Ri间址间址Rn寄存器寄存器data立即数立即数累加器累加器A1 1 1 12 2 2 22 2 2 23 3 3 32 2 2 21 1 1 12 2 2 22 2 2 23 3 3 32 2 2 244MOVDPTR,data16;DPTRdata161)十六位数据传送指令十六位数据传送指令2、外部
23、数据传送指令(、外部数据传送指令(7条)条)45MOVCA,ADPTR;A(ADPTR)MOVCA,APC;PCPC+1,;A(APC)2)外部外部ROM的字节数指令的字节数指令46例例3.5已已知知片片外外2008H单单元元中中有有一一个个数数为为34H,试试用用以以上上二二条条指指令令各各写写一一个个程程序序,把把数数送送到到片片内内7FH单单元中。元中。解:解:采用采用DPTR作为基址寄存器作为基址寄存器ORG0000HLJMPSTARTORG0100HSTART:CLRA;清空清空AMOVDPTR,#2008H;表起始值表起始值MOVCA,A+DPTR;把把A与与DPTR相加,相加,;
24、结果结果A34HMOV7FH,A;结果结果(7FH)=34HSJMP$;停止停止47采用采用PC作为基址寄存器作为基址寄存器ORG0000HLJMPMAINORG2000HMAIN:MOVA,05H;偏移量为偏移量为05H,因为该指令占因为该指令占;二个字节数二个字节数MOVCA,A+PC;首先将首先将PC1,则则PC2003,;然后加然后加05H,则,则PC指向指向2008单元单元MOV7FH,A;结果(结果(7FH)34HSJMP$;停止停止483)外部外部RAM的字节传送指令的字节传送指令MOVXA,Ri;A(Ri)MOVXRi,A;A(Ri)MOVXA,DPTR;A(DPTR)MOVX
25、DPTR,A;A(DPTR)49已已已已知知知知外外外外部部部部RAMRAM的的的的60H60H单单单单元元元元中中中中有有有有一一一一个个个个数数数数为为为为30H30H,试试试试编程把编程把编程把编程把30H30H送到片外送到片外送到片外送到片外RAMRAM的的的的2000H2000H单元中。单元中。单元中。单元中。解解解解:虽虽虽虽都都都都是是是是片片片片外外外外RAMRAM的的的的地地地地址址址址单单单单元元元元,但但但但不不不不能能能能直直直直接接接接传传传传送,必须经过累加器送,必须经过累加器送,必须经过累加器送,必须经过累加器A A的转送,才能实现。的转送,才能实现。的转送,才能
26、实现。的转送,才能实现。ORG1000HMOVR1,#60H;R1=60HMOVXA,R1;A=30HMOVDPTR,#2000H;DPTR=2000HMOVXDPTR,A;2000H30HSJMP$;停止停止例例3.6503、数据交换指令(、数据交换指令(5条)条)XCHDA,Ri;A30(Ri)30SWAPA;A74A30XCHA,Rn;ARnXCHA,direct;A(direct)XCHA,Ri;A(Ri)51已知已知R0=20H,(,(20H)=75H,A=3FH(1)XCHA,R0(2)XCHDA,R0(3)SWAPA例例3.7结果:结果:A=75H,(20H)=3FH,R0=20
27、H结果:结果:A=35H,(,(20H)=7FH,R0=20H结果:结果:A=0F3H52已已知知:片片内内20H单单元元有有一一个个数数为为30H,片片外外20H单元有一个数为单元有一个数为03H,编程把二个数相互交换。,编程把二个数相互交换。解:解:例例例例3.83.8ORG0100HMOVR0,#20H;R020HMOVXA,R0;A03HXCHA,R0;A30H,(20H)03HMOVXR0,A;30H(20H)(外部(外部RAM)SJMP$;停止停止534、堆栈操作指令(、堆栈操作指令(2条)条)PUSHdirect;SPSP+1,(SP)(direct)POPdirect;(SP)
28、direct,SPSP-1 第一条指令称为压栈指令,用于把第一条指令称为压栈指令,用于把第一条指令称为压栈指令,用于把第一条指令称为压栈指令,用于把directdirect为地址的为地址的为地址的为地址的操作数传送到堆栈中去。操作数传送到堆栈中去。操作数传送到堆栈中去。操作数传送到堆栈中去。第二条指令称为出栈指令。第二条指令称为出栈指令。第二条指令称为出栈指令。第二条指令称为出栈指令。54堆堆栈栈是是在在内内RAM开开辟辟的的一一个个数数据据的的暂暂存存空空间间,遵遵守守“后后进进先先出出”原原则则操操作作,其其地地址址指指针针为为SP,它它指出栈顶的位置,复位时指出栈顶的位置,复位时SP=0
29、7H。“+1”进进栈栈,出出栈栈“-1”。A PUSH ACCSPXX88H55MOVSP,#70H;栈底首地址为栈底首地址为70HPUSH30H;SPSP1,71HXPUSH40H;SPSP1,72HYPOP30H;30HY,SPSP-1=71HPOP40H;40HX,SPSP-1=70H例例例例3.93.9已知已知:(30H)=X,(40H)=Y,编程用堆栈指令,编程用堆栈指令把把30H和和40H单元中内容相交换。单元中内容相交换。561、加法指令(、加法指令(13条)条)ADDA,Rn;ADDA,direct;ADDA,Ri;ADDA,#data;二、算术运算指令(二、算术运算指令(24
30、条)条)1)不带进位位不带进位位(Cy)加法指令加法指令(4条条)AA+RnAA+(Ri)AA+dataAA+(direct)57试试试试分分分分析析析析执执执执行行行行如如如如下下下下指指指指令令令令后后后后,累累累累加加加加器器器器A A和和和和PSWPSW中各标志的变化情况如何?中各标志的变化情况如何?中各标志的变化情况如何?中各标志的变化情况如何?MOVMOVA,#5AHA,#5AHADDA,#6BHADDA,#6BH例例3.1058A=01011010Bdata=01101011B90107+)111000101B1CS1970CP1AC图图图图3.6 3.6 加法指令执行过程加法指
31、令执行过程加法指令执行过程加法指令执行过程59ADDCA,Rn;ADDCA,#data;ADDCA,direct;ADDCA,Ri;2)带进位位)带进位位(Cy)加法指令加法指令(4条条)AA+Rn+CyAA+(Ri)+CyAA+(direct)+CyAA+data+Cy60已知:已知:A8FH、R120H、(、(20H)12H、(21H)0FEH和和Cy1,试问,试问CPU依次执行以下依次执行以下指令后累加器指令后累加器A和和Cy中的值是多少。中的值是多少。a.ADDCA,R1b.ADDCA,21Hc.ADDCA,R1d.ADDCA,#7FH例例例例3.113.11解:操作结果应为:解:操作
32、结果应为:解:操作结果应为:解:操作结果应为:a.A=0B0H,Cy=0b.A=8DH,Cy=1a.A=0B0H,Cy=0b.A=8DH,Cy=1c.A=0A2H,Cy=0d.A=0FH,Cy=1c.A=0A2H,Cy=0d.A=0FH,Cy=161INCA;AA1INCRn;RnRn1INCdirect;(direct)(direct)1INCRi;(Ri)(Ri)1INCDPTR;DPTRDPTR13)加)加1指令(指令(5条)条)62已知:已知:已知:已知:A A34H34H、R0R042H42H、(、(、(、(43H43H)23H23H、DPTRDPTR3020H3020H,试问,试问
33、,试问,试问CPUCPU执行如下程序后执行如下程序后执行如下程序后执行如下程序后A A、R4R4、45H45H、R0R0、DPTRDPTR中的内容各是什么?中的内容各是什么?中的内容各是什么?中的内容各是什么?INCAINCAINCR0INCR0INC43HINC43HINCR0INCR0INCDPTRINCDPTR例例例例3.123.12解:由加解:由加1指令的规则,上述指令执行后的的操作结果为:指令的规则,上述指令执行后的的操作结果为:A35H、R043H、(、(43H)25H、DPTR3021H。632、减法指令、减法指令(8条条)SUBBA,Rn;AA-Rn-CySUBBA,Ri;AA
34、-(Ri)-CySUBBA,direct;AA-(direct)-CySUBBA,#data;AA-data-Cy1)带进位位)带进位位(Cy)减法指令减法指令(4条条)64试分析执行下列指令后,累加器试分析执行下列指令后,累加器试分析执行下列指令后,累加器试分析执行下列指令后,累加器A A和和和和PSWPSW中中中中各标志位状态?各标志位状态?各标志位状态?各标志位状态?CLRCCLRCMOVAMOVA,#35H#35HSUBBASUBBA,#0B6H#0B6H解:第一条指令用于清标志位解:第一条指令用于清标志位解:第一条指令用于清标志位解:第一条指令用于清标志位CyCy;第二条;第二条;第
35、二条;第二条指令是对被减数送累加器指令是对被减数送累加器指令是对被减数送累加器指令是对被减数送累加器A A中;第三条指令是进中;第三条指令是进中;第三条指令是进中;第三条指令是进行减法指令,结果为:行减法指令,结果为:行减法指令,结果为:行减法指令,结果为:A=7FHA=7FH,PSWPSW为:为:为:为:0000011CyACF0Rs1Rs0OV1P例例例例3.133.1365DECA;AA-1DECRn;RnRn-1DECDEC directdirect;direct(direct)-1DECRi;(Ri)(Ri)-12)减)减1指令(指令(4条)条)66已知:已知:A10H、R13BH、
36、R734H、(60H)00H、(、(3BH)0FFH,试分析,执,试分析,执行如下程序后累加器行如下程序后累加器A和和PSW中各标志位状态?中各标志位状态?DECADECR1DEC60HDECR7例例例例3.143.14解:根据减解:根据减1指令功能,结果为:指令功能,结果为:A0FH,P=1(3BH)0FEH,PSW不变不变(60H)0FFH,PSW不变不变R7=33H,PSW不变不变673、十进制调整指令(、十进制调整指令(1条)条)DAA对对A中两个压缩中两个压缩BCD数相加之和调整为数相加之和调整为2位位BCD码数。码数。1)只能用在对)只能用在对BCD码数进行码数进行ADD或或ADD
37、C操操作后使用。作后使用。2)影响标志位:有进位时)影响标志位:有进位时C1。1)BCD加法加法v特点特点:68试编程实现试编程实现44H86H的的BCD加法程序,并对加法程序,并对其工作原理分析。其工作原理分析。解:相应解:相应BCD加法程序为:加法程序为:MOVA,44H;A44HADDA,86H;A44860CAHDAA;A30H,Cy1,AC1SJMP$例例例例3.153.1569A=01000100Bdata=10000110B4486+)011010000B110100110000B011001010B130110B低低4位位9,加加6调整调整高高4位位9,加加6调整调整图图图图3
38、.7BCD3.7BCD加法过程加法过程加法过程加法过程70注意:对于注意:对于BCD减法减法MCS51单片机中单片机中没有十进制减法调整没有十进制减法调整指令指令,因此,因此,BCD减法运算必须采用减法运算必须采用BCD补码运算法则。补码运算法则。714、乘法和除法指令、乘法和除法指令MULAB;BAABC0积积255OV1DIVAB;ABABC=0除数除数0OV1除数除数0OV01)乘法指令)乘法指令2)除法指令)除法指令721、与指令、与指令ANLA,RnANLA,RiANLA,directANLA,#dataANLdirect,AANLdirect,#data;AARn;AA(Ri);A
39、A(direct);AA#data;direct(direct)A;direct(direct)#data三、逻辑运算指令(三、逻辑运算指令(20条)条)73结果:将结果:将P1口锁存器的口锁存器的0、3、4、7位位内容屏蔽,而其余位保持原值不变。内容屏蔽,而其余位保持原值不变。例如例如常用常用ANL指令指令屏蔽屏蔽某些不用位或保留某些位某些不用位或保留某些位ANLP1,#01100110B742、或指令、或指令ORLA,Rn;AARnORLA,direct;AA(direct)ORLA,Ri;AA(Ri)ORLA,#data;AAdataORLdirect,A;direct(direct)A
40、ORLdirect,#data;direct(direct)data75结果:将结果:将P1口锁存器的口锁存器的1、4、5位进位进行置位,而其余位保持原值不变。行置位,而其余位保持原值不变。常用常用ORL指令对某些位指令对某些位置位置位或保留某些位或保留某些位例如例如ORLP1,#00110010B76ANLA,#00011111B(#1FH)ANLP1,#11100000B(#0E0H)ORLP1,A例例3.16:将累加器将累加器A的内容送的内容送P1口的低口的低5位,位,要求传送时不影响要求传送时不影响P1口的高口的高3位。位。MOVR0,AMOVA,R077XRLA,Rn;AA RnXR
41、LA,direct;AA(direct)XRLA,Ri;AA(Ri)XRLA,#data;AA dataXRLdirect,A;direct(direct)AXRLdirect,#data;direct(direct)data3、异或指令、异或指令78结果:结果:将将P1口锁存器的口锁存器的0、4、5位内容位内容取反,而其余位保持原值不变。取反,而其余位保持原值不变。常用常用XRL指令对某些位指令对某些位取反取反或保留某些位或保留某些位XRLP1,#00110001B例如例如79CPLACLRA;AA;A04、累加器清零和取反指令、累加器清零和取反指令80RL A ;RR A ;ARLCA;R
42、RCA;5、移位指令(、移位指令(4条)条)A7A0CyA7A0CyA7A0A7A0AAA81例:将双字节数(例:将双字节数(R2)()(R3)右移一位)右移一位 1 0 1 0 1 1 0 10RRC ACLRCMOVA,R2RRCAMOVR2,AMOVA,R3RRCAMOVR3,A0 1Cy82已知:已知:已知:已知:MM和和和和MM1 1单元中有一个单元中有一个单元中有一个单元中有一个1616位二进制位二进制位二进制位二进制数(数(数(数(MM为低为低为低为低8 8),编程将其扩大到二倍(注意:),编程将其扩大到二倍(注意:),编程将其扩大到二倍(注意:),编程将其扩大到二倍(注意:该数
43、最大可扩大到该数最大可扩大到该数最大可扩大到该数最大可扩大到6553665536)。)。)。)。解:一个解:一个16位二进制数扩大到二倍就等于位二进制数扩大到二倍就等于是把它进行一次算术左移。由于是把它进行一次算术左移。由于MCS51单元单元片机的移位指令都是二进制片机的移位指令都是二进制8位的移位指令,因位的移位指令,因此此16位数的移位指令必须用程序来实现。位数的移位指令必须用程序来实现。算法为:算法为:MM+10例例例例3.173.1783ORG0030HCLRC;清进位标志位清进位标志位MOVR0,M;操作数低操作数低8位地址送位地址送R0MOVA,R0;A操作数低操作数低8位位RLC
44、A;低低8位操作数左移低位补位操作数左移低位补0MOVR0,A;结果送回结果送回M单元,单元,Cy中为最高位中为最高位INCR0;R0指向指向M1单元单元MOVA,R0;A操作数高操作数高8位位RLCA;高高8位操作数左移并加上低位位操作数左移并加上低位CyMOVR0,A;结果送回结果送回M1单元单元SJMP$;停止停止84LJMPaddr16;PCaddr16AJMPaddr11;PCPC+2,PC100addr11SJMPrel;PCPC+2,PCPC+relJMPA+DPTR;PCA+DPTR四、控制转移和位操作指令四、控制转移和位操作指令1、控制转移指令、控制转移指令(17条条)1 1
45、)无条件转移指令)无条件转移指令85MCS-51系列单片机可以在系列单片机可以在64KB地地址范围内寻址,绝对转移指令的转址范围内寻址,绝对转移指令的转移范围只在移范围只在PC当前值所指的当前值所指的2KB地址范围内。地址范围内。86长转移指令长转移指令LJMPaddr16;PCaddr16三字节指令,不影响标志位,可三字节指令,不影响标志位,可在在64KB地址范围内无条件转移。地址范围内无条件转移。87绝对转移指令绝对转移指令二字节指令,可在二字节指令,可在2KB地址范围内转移。地址范围内转移。AJMPaddr11;PCPC+2,PC100addr1188短转移指令短转移指令机器码:机器码:
46、80Hrel本指令是一条双字节双周期指令本指令是一条双字节双周期指令本指令是一条双字节双周期指令本指令是一条双字节双周期指令,在在在在PCPC内容内容内容内容加加加加2 2所指地址上所指地址上所指地址上所指地址上,以以以以relrel:-128+127-128+127为偏移量。为偏移量。为偏移量。为偏移量。SJMPrel;PCPC+2+rel89ORG1000H1000H7401HSTART:MOVA,#01H;字位码初值送字位码初值送A1002HF8HMOVR0,A;暂存于暂存于R01003H90CF01HLOOP:MOVDPTR,#0CF01H 1017H80relSJMPSTART;转入
47、转入START SJMP$例例3.18下下列列程程序序中中,请请计计算算SJMPSTART指指令令码码中中的的rel,并并分分析析目目标标地地址址的的转转移移范围。范围。90a)地址偏移量地址偏移量rel的计算:的计算:目标转移地址源地址目标转移地址源地址2relrel=目标转移地址源地址目标转移地址源地址2 1000H1017H225rel应采用补码表示,为此应采用补码表示,为此rel=-25补补E7H 解解解解:SJMPSJMP指指指指令令令令中中中中地地地地址址址址偏偏偏偏移移移移量量量量是是是是采采采采用用用用STARTSTART符符符符号号号号表表表表示示示示的的的的,指指指指明明明
48、明指指指指令令令令执执执执行行行行后后后后转转转转入入入入本本本本程程程程序序序序开开开开头头头头重重重重新执行。新执行。新执行。新执行。91b)转移地址范围的确定:转移地址通常转移地址范围的确定:转移地址通常以以SJMP指令始址为参照点,但实际的指令始址为参照点,但实际的参照点是对参照点是对PC2,因,因rel的取值范围是的取值范围是128127,故可得到转移地址的实故可得到转移地址的实际转移范围为际转移范围为126129。92变址寻址转移指令变址寻址转移指令机器码:机器码:73H该类指令是一条单字节双周期无条件转该类指令是一条单字节双周期无条件转移指令。移指令。在在64KB地址范围内无条件
49、转移。地址范围内无条件转移。JMPA+DPTR;PCA+DPTR93JZrel;A=0PCPC+2+relA0PCPC+2JNZrel;A0PCPC+2+relA=0PCPC+2累加器累加器A判零转移判零转移(2条条)2 2)条件转移指令)条件转移指令94CJNEA,#data,rel;不相等转移不相等转移;#data=A,PCPC+3,C0;#dataA,PCPC+3+rel,C1CJNEA,direct,rel;不相等转移不相等转移;若若A=(direct),则则PCPC+3,C0;若若A(direct),则则PCPC+3+rel,C0;若若Adata,则则PCPC+3+rel,C0;若若
50、Rndata,则则 PCPC+3+rel,C0;若若(Ri)data,则则 PCPC+3+rel,C196ORG2000HCLRAMOVR0,#30HLOOP0:CJNER0,#64H,LOOP1INCALOOP1:INCR0CJNER0,#3FH,LOOP0SJMP$例例3.19在内部在内部RAM30H3EH中找出值为中找出值为100(64H)的单元有多少个的单元有多少个?MOVR1,#0FHDJNZR1,LOOP097DJNZdirect,rel;(direct)(direct)-1;若若(direct)0,则则PCPC+3+rel;若若(direct)=0,则,则PCPC+3DJNZRn