《湖南工大单片机辅助第3章MCS51系列单片机的指令系统ppt课件》由会员分享,可在线阅读,更多相关《湖南工大单片机辅助第3章MCS51系列单片机的指令系统ppt课件(125页珍藏版)》请在金锄头文库上搜索。
1、第三章 MCS-51单片机指令系统本章内容本章内容寻址方式 指令的分类、格式及符号阐明 分类指令 掌握MCS-51指令系统的各种寻址方式掌握每条指令的格式、功能及用法掌握指令的操作过程中操作数的变化情况以及对标志位的影响。学会正确选用指令完成简单的义务学学习目的目的MCS-51指令系统共有255种操作代码,用汇编言语表达时,只需熟记42种助记符就能表示33种指令功能共111条指令。 3.1 寻址方式址方式 MCS-51的指令系统共用了七种寻址方式。3.1.1存放器寻址以存放器的内容为操作数的寻址方式。 可进展存放器寻址的存放器有:任务存放器R0R7、A、B、DPTR和进位CY。MOV A ,
2、R0 ;A R0例如例如:R0(35H)A结果结果A=35H 指令指令码中直接含有所需的中直接含有所需的操作数,操作数字前加操作数,操作数字前加“#“#符符号号为前前缀。以区。以区别直接地址。直接地址。运用运用时一定要留意!一定要留意! 3.1.2 立刻寻址立刻寻址 特点特点功能:功能:功能:功能:1 1 1 1将片内将片内将片内将片内RAMRAMRAMRAM中中中中44H44H44H44H单元单元单元单元 的内容送累加器的内容送累加器的内容送累加器的内容送累加器A A A A,属于直,属于直,属于直,属于直 接寻址;接寻址;接寻址;接寻址; 2 2 2 2那么是把那么是把那么是把那么是把44
3、H44H44H44H这个数本这个数本这个数本这个数本 身送到累加器身送到累加器身送到累加器身送到累加器A A A A,属于立刻寻址。,属于立刻寻址。,属于立刻寻址。,属于立刻寻址。 1 1MOV AMOV A,44H ;A (44H)44H ;A (44H) 2 2MOV A, #44H ;A 44HMOV A, #44H ;A 44H例例 直接寻址指令的指令码中含有操作数地址。 可用于可用于访问程序存程序存储器,也可用器,也可用于于访问数据存数据存储器。器。 3.1.3直接寻址功能:将片内RAM 56H单元中的内容34H送到累加器A中。如左图3.1例:例:例:例:MOV AMOV A,56H
4、 56H ;A A 56H56H 机器机器机器机器码码:E5 56E5 5634H片内RAM34H累加器A56H 图3.1 指令传送 3.1.4存放器间接寻址指令指定存放器中的内容为操作数的地址。任务存放器R0、R1和公用存放器DPTR可用于间接寻址,在存放器前加“符号作前缀。MOVA,R0;AR0MOVA,R0;A(R0)例如:R065H,65H26H如图3.2所示,执行结果A65H,执行结果A26H。留意:是它区别存放器寻址的标志。26H片内RAMA65H图3.2R065H3.1.5相对寻址相对寻址是将程序计数器PC中的当前内容与指令第二字节所给出的数相加,其和为跳指令的转移地址。2000
5、20008026H8026HSJMPSJMPrelrel;PC PC+2+relPC PC+2+rel程序存储器A图3-3 指令过程PC 26H0000H2000H2019H80H26H2028H02H20H A L U2019H例例3.1.6变址寻址以DPTR和PC基址存放器和累加器A变址存放器的内容和为地址,寻址该地址单元,读取数据。(1)MOVCA,APC;AAPC(2)MOVCA,ADPTR;AADPTR 执执行行行行第第第第一一一一条条条条时时先先先先使使使使当当当当前前前前PCPCPCPC值值加加加加1 1 1 1,然然然然后后后后把把把把这这个个个个加加加加1 1 1 1后后后后
6、的的的的PCPCPCPC值值和和和和累累累累加加加加器器器器A A A A中中中中的的的的偏偏偏偏移移移移量量量量相相相相加加加加,作作作作为为操操操操作作作作数数数数地地地地址址址址,从从从从该该地地地地址址址址中中中中取取取取出出出出操操操操作作作作数数数数送送送送入入入入A A A A中。第二条中。第二条中。第二条中。第二条过过程与第一条指令程与第一条指令程与第一条指令程与第一条指令类类似,例如:似,例如:似,例如:似,例如: 知知: :片片外外ROMROM的的2019H2019H单元元中中有有一一数数34H34H,编写写程程序序用用变址址寻址址方方法法把把这个个数数送送入入A A中中,
7、试进展分析。展分析。 解解:根根据据标题要要求求,基基址址可可定定为2000H2000H,地址偏移量那么,地址偏移量那么为06H06H,程序如下:,程序如下:MOVMOVDPTRDPTR,2000H2000H ;DPTR2000HDPTR2000HMOVCMOVCA A,A ADPTRDPTR ;A34HA34HMOVMOVA A,06H06H ;A06HA06H例例3.1程序存储器A图3.4DPTR2006H0000H34H2019H00HA L U 如图如图3.43.4所示所示, ,这里这里A A具有双重作用,具有双重作用,在指令执行前用来存放地址偏移量,在指令执行前用来存放地址偏移量,指
8、令执行后为目的操作数。指令执行后为目的操作数。 3.1.7位寻址当我们把八位二进制数中某一位作为操作数对待时,这个操作数的地址就称为位地址,对位地址寻址简称位寻址。 MOV 30H MOV 30H,C C ; 30H 30H是位是位是位是位寻寻寻寻址位地址址位地址址位地址址位地址 MOV A,30h MOV A,30h ; 30H 30H是直接是直接是直接是直接寻寻寻寻址的字址的字址的字址的字节节节节地址地址地址地址 MOV MOVC,ACC.7 C,ACC.7 ;CyACC.7 CyACC.7 由由由由上上上上面面面面指指指指令令令令可可可可知知知知,位位位位寻寻址址址址的的的的位位位位地地
9、地地址址址址与与与与直直直直接接接接寻寻址址址址的的的的字字字字节节地地地地址址址址方方方方式式式式完完完完全全全全一一一一样样,主主主主要要要要由由由由操操操操作作作作码码来区分,运用来区分,运用来区分,运用来区分,运用时时需需需需应该应该特特特特别别留意。留意。留意。留意。例如例如 本节主要论述指令格式、指令的三种表示方式、指令字节数、指令分类和指令系统综述等五个问题。3.2 指令系指令系统 指令格式是指令码的构造方式。表达方式为:3.2.1指令格式 标号号又又称称为指指令令地地址址符符号号,普普通通由由1-1-6 6个符个符组成,以字母开成,以字母开头的字母数字串。的字母数字串。 标号标
10、号 : 操作码操作码操作数操作数; 注释注释 操作码用MCS-51单片机所规定的助记符来表示,它命令CPU作何种操作。 注释是对该指令作用或功能的阐明,以便于阅读,不参与编译(可有可无,不是必备的)。注释部分前一定要用分号“;隔开。 操操操操作作作作数数数数分分分分为为目目目目的的的的操操操操作作作作数数数数和和和和源源源源操操操操作作作作数数数数,常常常常用用用用符符符符号号号号( (如如如如存存存存放放放放器器器器、标标号号号号) )、常常常常量量量量( (如如如如立立立立刻刻刻刻数数数数、地地地地址址址址值值等等等等) )来来来来表表表表示示示示。操操操操作作作作码码和和和和操操操操作作
11、作作数数数数之之之之间间用用用用假假假假设设干干干干空空空空格格格格分分分分隔隔隔隔,而而而而目目目目的的的的操操操操作作作作数数数数和和和和源源源源操操操操作作作作数数数数之之之之间间用用用用逗逗逗逗号号号号“ “,分隔。分隔。分隔。分隔。3.2.2指令的三种表达方式 通常,指令有二进制,十六制和助记符等三种表示方式 1) 1) 指令的二指令的二指令的二指令的二进进制方式制方式制方式制方式 具具具具有有有有难难读读、难难写写写写、难难记记忆忆和和和和难难修修修修正正正正等等等等缺缺缺缺陷陷陷陷,因因因因此人此人此人此人们们通常不用它来通常不用它来通常不用它来通常不用它来编编写程序。写程序。写
12、程序。写程序。2) 2) 指令的十六指令的十六指令的十六指令的十六进进制方式制方式制方式制方式 虽虽然然然然读读写写写写方方方方便便便便,但但但但仍仍仍仍不不不不易易易易为为人人人人们们识识别别和和和和修修修修正正正正,通常也不被用来通常也不被用来通常也不被用来通常也不被用来编编写程序,写程序,写程序,写程序, 3) 指令的助指令的助记符方式符方式 又又称称为指指令令的的汇编符符或或汇编语句句方方式式,是是一一种种由由英英文文单词或或缩写写字字母母笼统表表征征指指令功能的方式。令功能的方式。 假设累加器A中已有一个加数20,那么可以完成206并把结果送入累加器A的加法指令的:二进制方式为:00
13、11100000000110B;十六进制方式为:3806H;助记符方式为:ADDA,06H;AA+06H例如例如3.2.3指令的字节数MCS-51单片机通常可以分为单字节、双字节和三字节指令三种。(1)(1)单单字字节节指令指令4949条条单字节指令只需一个字节。通常又可分为两类:1 1无操作数单节指令无操作数单节指令这类指令的指令码光有操作码字段,操作数是隐含在操作码中的。这类指令的指令码有操作码字段和专门用来指示操作数所在存放器号的字段组成。例如:八位数传送指令MOVA,Rn其中,n的取值范围为07。2 2含有操作数存放器号的单字节指令含有操作数存放器号的单字节指令双字节指令含有两个字,操
14、作码字节在前,操作数字节在后。例如:八位数例如:八位数例如:八位数例如:八位数传传送指令送指令送指令送指令 MOV MOV A , A , data ;Adatadata ;Adata 这这条条条条指指指指令令令令的的的的含含含含义义是是是是指指指指令令令令码码第第第第二二二二字字字字节节datadata取出来存放到累加器取出来存放到累加器取出来存放到累加器取出来存放到累加器A A中中中中2)2)双字双字节节指令指令4646条条这类指令的指令码的第一字节为操作码,第二字节为操作数或操作数地址。故三字故三字故三字故三字节节指令共可有如下四指令共可有如下四指令共可有如下四指令共可有如下四类类: :
15、 : :操作操作操作操作码码Data15-8Data15-8Data7-0Data7-0例如:指令例如:指令例如:指令例如:指令MOV DPTRMOV DPTR,data16data16操作操作操作操作码码DirectDirectDataData例如:指令例如:指令例如:指令例如:指令MOVMOVdirectdirect,datadata3)3)三字节指令三字节指令1616条条操作操作操作操作码码DataDataDirect(rel)Direct(rel)例如:指令例如:指令例如:指令例如:指令CJNE A , #data , relCJNE A , #data , rel操作操作操作操作码码
16、Data15-8Data15-8Data7-0Data7-0例如:指令例如:指令例如:指令例如:指令LCALL addr16LCALL addr163.2.4指令的分类及符号阐明 MCS-51 MCS-51单片机可以分为单片机可以分为五类:五类:1.指令分类指令分类2)算术运算指令算术运算指令4)位操作指令位操作指令3)逻辑运算指令逻辑运算指令1)数据传送指令数据传送指令5)控制转移指令控制转移指令2 2、符号的、符号的、符号的、符号的阐阐明明明明(1)Rn:表表示示当当前前选中中的的存存放放器器区区的的8个个任任务存放器,存放器,(n=0-7中的一个。中的一个。(2)Ri:表表示示存存放放器
17、器间接接寻址址,Ri只只能能 是是R0或或R1。 (3)#data:8位位直直接接地地址址,实践践运运用用时 data应是是00H-0FFH中的一个。中的一个。(4)#data16:表表示示包包含含在在指指令令中中的的16位位立立 即数。即数。(5)direct:表表示示8位位内内部部数数据据存存储器器单 元的地址。元的地址。(6)Addr16:表示表示16位的目的地址。位的目的地址。(7)Addr11:表示表示11位的目的地址。位的目的地址。(8)Rel:表示表示8位位带符号的偏移量。符号的偏移量。(9)DPTR:为数数据据指指针,可可用用作作16位位 的地址存放器。的地址存放器。 (10)
18、Bit:表表示示内内部部RAM或或公公用用存存放放器器中中 的直接的直接寻址位。址位。(11)A:累加器:累加器ACC。(12)B:公公用用存存放放器器,用用于于MUL和和DIV指指 令中。令中。(13):为间址址存存放放器器或或基基址址存存放放器器的的前前 缀。如。如Ri, A+PC,A+DPTR。(14)/:位位操操数数的的前前缀,表表示示对该位位操操作作 数取反。如数取反。如/bit.(15)$:当前指令的地址。:当前指令的地址。一、内部数据一、内部数据传送指令送指令15条条 这类指令的源操作数和目的操作数地址都在指令的源操作数和目的操作数地址都在单片机内部。片机内部。3.2.5数据传送
19、指令 知知:R0R030H30H,试试问问执执行行如如下下指指令令后后累累加加器器A A、R3R3、30H30H、31H31H单单元中内容各是什么?元中内容各是什么?MOVMOVAA,#20H#20HMOVR3,#45HMOVR3,#45HMOVR0,#46HMOVR0,#46HMOV31H,#47HMOV31H,#47H(1)立刻立刻寻址型址型传送指令送指令例例例例 3.2 3.2执行后,结果为执行后,结果为执行后,结果为执行后,结果为: A=20H, R3=45H,: A=20H, R3=45H, (30H)=46H, (31H)=47H (30H)=46H, (31H)=47H(2)直接
20、直接寻址型址型传送指令送指令 知知 : R1=20HR1=20H、 (21H)=54H(21H)=54H、 (22H)=55H(22H)=55H、(30H)=56H(30H)=56H,试试问问执执行行如如下下指指令令后后,结结果果A A、40H40H、R2R2、20H20H、和、和P2P2口中的内容各是什么?口中的内容各是什么?MOVAMOVA,21H21HMOV40HMOV40H,A AMOVR2,22HMOVR2,22HMOVR1,21HMOVR1,21HMOVP2,30HMOVP2,30H结结 果果 为为 : A=54HA=54H, (40H)=54H(40H)=54H , R2=55H
21、R2=55H ,(20H)=54H(20H)=54H,P2=56HP2=56H例例例例 3.3 3.3 3.3 3.3(3)存放器存放器寻址址传送指令送指令 知知知知:R1=30H:R1=30H、R2=31HR2=31H、(56H)=23H(56H)=23H,试试问执问执行以下指令后,行以下指令后,行以下指令后,行以下指令后,结结果各是什么?果各是什么?果各是什么?果各是什么?MOV A , R1 MOV A , R1 MOV R2 , A MOV R2 , A MOV 56H , R1MOV 56H , R1结结果果果果为为:A=30H A=30H ,R2=30H R2=30H ,(56H)
22、=30H(56H)=30H例例例例 3.4 3.4 3.4 3.4(4)存放器存放器间址址传送指令送指令 知:知:(30H)=12H、(31H)=13H、R0=30H、R1=31H,试问执行以下指令后,试问执行以下指令后A、30H、31H和和32H各是什么?各是什么? MOV A , R0 MOV R1,A MOV R0, #34h MOV 32h , R1执行后,执行后,A=12H ,30H=34H ,31H=12H ,32H=12H例例例例3.53.53.53.5 只需独一的一条只需独一的一条16位数位数传送指令,送指令,该指指令令为:MOVDPTR,Data ;DPTRdata16 (1
23、)十六位数据十六位数据传送指令送指令二、外部数据二、外部数据传送指令送指令7条条该该指令共有以下二条:指令共有以下二条:指令共有以下二条:指令共有以下二条:MOVCMOVCA A,A ADPTRDPTR;A(AA(ADPTR)DPTR)MOVCMOVCA A,A APC PC ;PCPC+1,A(APCPC+1,A(APC)PC)(2)外部外部ROM的字的字节数指令数指令 知知: :片片外外2019H2019H单单元元中中有有一一个个数数为为34H34H,试试用用以以上上二二条条指指令令各各写写一一个个程程序序,把把数数送送到到外外内内7FH7FH单单元元中中。解:解:采用采用DPTRDPTR
24、作作为为基址存放器基址存放器ORG0000HORG0000HSJMPSTARTSJMPSTARTORG0030HORG0030HSTART:START:CLRACLRA;清空清空AAMOVDPTR,#2019H;MOVDPTR,#2019H;表起始表起始值值MOVCA,A+DPTR;MOVCA,A+DPTR;把把A A与与DPTRDPTR相加,相加,;结结果果A A34H34HMOV7FH,AMOV7FH,A;结结果果(7FH)=34H(7FH)=34HSJMP$SJMP$;停停顿顿例例3.63.6采用采用PCPC作作为为基址存放器基址存放器ORG0000HORG0000HSJMPSTARTS
25、JMPSTARTORG2000HORG2000H2000HSTART:2000HSTART:MOVAMOVA,05H05H; ;偏移量偏移量为为05H,05H,; ;由于由于该该指令占指令占; ;了二个字了二个字节节数数2019H2019HMOVCMOVCA A,A+pc;A+pc;首先将首先将PCPC1, 1,那么那么;PC;PC2019,2019,然后然后; ;加加05H05H,那么,那么PCPC指向指向;2019;2019单单元元MOV7FH,A;MOV7FH,A;结结果果7FH7FH34H34HSJMP$SJMP$;停停顿顿(3)外部外部RAM的字的字节传送指令送指令该类型指令共有:型
26、指令共有:MOVX A ,Ri ;A(Ri)MOVX Ri ,A ;A(Ri)MOVX A ,DPTR ;A(DPTR)MOVX DPTR ,A ;A(DPTR)知外部RAM的60H单元中有一个数为30H,试编程把30H送到片外RAM的2000H单元中。解:上面虽都是片外RAM的地址单元,但不能直接传送,必需经过累加器A的转送,才干实现。程序如下:ORG1000HMOVR1,#60H;R1=60HMOVXA,R1;A30HMOVDPTR,#2000H;DPTR=2000HMOVXDPTR,A;2000H30HSJMP$;停顿例例 3.7三、数据交三、数据交换指令指令5条条SWAPA;A74A3
27、0XCHA,Rn;ARnXCHA,direct;AdirectXCHA,Ri;ARiXCHDA,Ri;A30Ri30 知知:片片内内20H单元元有有一一个个数数为30H,片片外外20H单元元有一个数有一个数为03H,编程把二个数相互交程把二个数相互交换。解:程序解:程序为:ORG 0030HMOV R0 , #20H ;R030HMOVX A ,R0 ; A03HXCH A , R0 ;A30H ,20H03HMOVX R0 ,A ;30H20H外部外部RAMSJMP $ ;停;停顿例例 3.8四、堆四、堆栈操作指令操作指令2 2条条PUSHdirect;SPSP+1,(SP)(direct)
28、POPdirect;(SP)direct,SPSP-1第一条指令称为压栈指令,用于把direct为地址的操作数传送到堆栈中去。第二条指令称为出栈指令。知:(20H)=M1,(50H)=M2编程用堆栈指令把20H和50H单元中内容相交换。解:由堆栈所具备的原那么,程序为:MOVSP,#60H;栈底首地址为60HPUSH 20H;SPSP1,61HM1PUSH 50H;SPSP1,62HM2POP20H;20M2,SPSP-1=61H例例3.9 该类指指令令是是其其中中心心,总共共49条条,分分为算算术运运算算指指令令,逻辑运运算和移位指令等三大算和移位指令等三大类。3.2.6算逻运算和移位指令1
29、、加法指令13条(1)不带进位位(Cy)加法(4条)ADD A, Rn ADD A, directADD A, RjADD A, #data一、算一、算术运算指令运算指令24条条 试试分分析析执执行行如如下下指指令令后后,累累加加器器A和和PSW中各标志的变化情况如何?中各标志的变化情况如何?MOVA ,#5AHADD A , #6BH 解解:第第一一条条指指令令先先向向累累加加器器A传传送送一一个个数数5AH,第第二二条条为为加加法法指指令令,机机器器执执行行加法指令时按带符号数运算。加法指令时按带符号数运算。例例 3.10竖式表示如图竖式表示如图3.63.6:A=01011010Bdata
30、=01101011B90107+)111000101B1CS1970CP1AC图图3.6 3.6 3.6 3.6 加法指令加法指令加法指令加法指令执执行行行行过过程程程程2.带进位位(Cy)加法(4条)ADDC A, RnADDC A, #dataADDC A, directADDC A, Ri知:知:A A8FH8FH、R1R120H20H、20H20H12H12H、21H21H0FEH0FEH和和CyCy1 1,试问试问CPUCPU依次依次执执行以下行以下指令后累加器指令后累加器A A和和CyCy中的中的值值是多少。是多少。a.ADDCA,R1b.ADDCA,21Ha.ADDCA,R1b.
31、ADDCA,21Hc.ADDCA,R1d.ADDCA,#7FHc.ADDCA,R1d.ADDCA,#7FH解:操作解:操作结结果果应为应为: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=1例例 3.113.加1指令5条 INCA;AA1INCRn;RnRn1INCdirect;(direct)(direct)1INCRi;(Ri)Ri1INCDPTR;DPTRDPTR1知:知:A A34H34H、R0R042H42H、43H43H23H23H、
32、DPTRDPTR3020H3020H,试问试问CPUCPU执执行如下程序后行如下程序后A A、R4R4、45H45H、R0R0、DPTRDPTR中的内容各是什么?中的内容各是什么?INCAINCAINCR0INCR0INC43HINC43HINCR0INCR0INCDPTRINCDPTR解:由加解:由加1 1指令的指令的规规那么,上述指令那么,上述指令执执行后的的行后的的操作操作结结果果为为:A A35H35H、R0R043H43H、43H43H25H25H、DPTRDPTR3021H3021H。由于,加由于,加1 1指令在程序中指令在程序中频频繁地出繁地出现现,常用来修正地,常用来修正地址和
33、数据指址和数据指针针加加1 1处处置。置。 例例 3.122、减法指令(8条)1带进位位位位Cy减法指令减法指令(4条条)SUBB A, RnSUBB A, Rn;A A+Rn+Cy;A A+Rn+CySUBB A,RjSUBB A,Rj ;AA+;AA+ RiRi +Cy+CySUBB A, directSUBB A, direct;AA+direct+Cy;AA+direct+CySUBB A, #dataSUBB A, #data;A A+data+Cy;A A+data+Cy试试分析分析执执行以下指令后,累加器行以下指令后,累加器A A和和PSWPSW中中各各标标志位形状?志位形状?C
34、LRCCLRCMOVAMOVA,#35H#35HSUBBASUBBA,#0B6H#0B6H解:第一条指令用于清解:第一条指令用于清标标志位志位CyCy;第二条;第二条指令是指令是对对被减数送累加器被减数送累加器A A中;第三条指令是中;第三条指令是进进展减法指令,展减法指令,结结果果为为:A=7FHA=7FH,PSWPSW为为:0000011CyACF0Rs1 Rs0OV1P例例 3.142 2减减1 1指令指令4 4条条DEC A ;AA-1DEC Rn ;RnRn-1DEC direct ;direct(direct)-1DEC Ri ;(Ri)(Ri)-1知:知:A A10H10H、R1
35、R13BH3BH、R7R734H34H、60H60H00H00H、3BH3BH0FFH0FFH,试试分析,分析,执执行如下行如下程序后累加器程序后累加器A A和和PSWPSW中各中各标标志位形状?志位形状?DECADECA DECR1DECR1DEC60HDEC60HDECR7DECR7例例 3.15解:根据减解:根据减1 1指令功能,指令功能,结结果果为为:A A0FH,P=10FH,P=1 3B3B0FEH,0FEH,PSWPSW不不变变60H60H0FFH,PSW0FFH,PSW不不变变 R7=33H,R7=33H,PSWPSW不不变变特点特点特点特点3 3、十、十进制制调整指令整指令1
36、 1条条1. BCD加法加法DA ADA A对A中两个中两个紧缩BCD数相加之和数相加之和调整整为2位位BCD码数。数。1只能用在只能用在对BCD码数数进展展ADD或或ADDC操操 作后运用。作后运用。2影响影响标志位:有志位:有进位位时 C1。试编试编程程实现实现44H44H86H86H的的BCDBCD加法程序,加法程序,并并对对其任其任务务原理分析。原理分析。解:相解:相应应BCDBCD加法程序加法程序为为:MOVAMOVA,44H44H ;A44H;A44HADDAADDA,86H86H;A44;A4486860CAH0CAHDAADAA;A30H,Cy;A30H,Cy1,AC1,AC1
37、 1SJMP$SJMP$ ; ;终终了了例例 3.16A=01000100Bdata=10000110B4486+)011010000B110100110000B011001010B130110B低4位9,加6调整高4位9,加6调整图图3.7 BCD3.7 BCD加法加法加法加法过过程程程程2.BCD2.BCD减法减法 MCS51单片机中没有十进制减法调整指令,因此,这里的BCD减法运算必需采用BCD补码运算法那么。 例例 3.17 知:M1和M2中分别存有被减数80和减数25,试编程求差,并把结果存入M3单元中。 解:根据BCD减法的实施步骤,程序如下:ORGORG0100H0100HCLR
38、CLRCC; ;清清CyCyMOVMOVA A,9AH9AH ;ABCD;ABCD模模100100SUBBSUBBA,M2A,M2;ABCD;ABCD减数的减数的补补数数ADDA,M1ADDA,M1;A;A被减数减数的被减数减数的补补数数DAADAA; ;对对A A进进展加法展加法调调整整MOVM3,AMOVM3,A; ;存入存入M3M3BCDM3M3BCD差差CLRCCLRC ; ;清清CyCySJMP$SJMP$ ; ;停停顿顿两位BCD数的模100BCD减数加60调整BCD差BCD减数减数的补数10011010B00100101B11110101B110101010101B0111010
39、1B10000000B+图图3.8 BCD3.8 BCD减法减法减法减法过过程程程程4、乘法和除法指令MULAB;ABBA,构成标志 C0积积255 OV1DIVAB;ABAB,构成标志乘法指令除法指令 C=0除数除数0 OV1除数除数0 OV0 知:有两个8位无符号数乘数分别放在20H和21H单元中,试编写程序把相乘积的低8位放入22H单元中,积的高8位放入23H单元中。 解:求8位无符号单字节乘法,可直接利用乘法指令来实现,程序为: 例例 3.18 3.18ORG1000HORG1000HMOVR1MOVR1,#20H#20H;R1R1第一个乘数地址第一个乘数地址MOVAMOVA,R1R1
40、;AA第一个乘数第一个乘数INCR1INCR1;修正乘数地址;修正乘数地址MOVBMOVB,R1R1;BB第二个乘数地址第二个乘数地址MULABMULAB;A*B=BAA*B=BAINCR1INCR1;修正目的;修正目的单单元地址元地址MOVR1MOVR1,AA;22H22H积积的低的低8 8位位INCR1INCR1;修正目的;修正目的单单元地址元地址MOVR1MOVR1,BB;23H23H积积的高的高8 8位位SJMP$SJMP$;停;停顿顿共共20条,分条,分为与、或、异或、与、或、异或、A操作指令。操作指令。一与指令一与指令ANL A,RnANL A,RiANL A,directANL
41、A,#dataANL direct, AANL direct, #data; A A Rn; A A (Ri); A A direct; A A #data; direct direct A; direct direct #data二、二、逻辑运算运算类指令指令 知知:R0=20HR0=20H、20H20H=0FEH=0FEH,试试问问分分别别执执行行如如下下指指令令后后,累累加加器器A A和和20H20H单单元元中中内内容容各各是是什么?什么?MOVAMOVA,#20H#20HMOVAMOVA,#0FH#0FHANLAANLA,R0ANLAR0ANLA,20H20HMOVAMOVA,#0F0
42、H#0F0HMOVAMOVA,#80H#80HANLAANLA,R0ANL20H,AR0ANL20H,A例例 3.19解解:根根据据逻逻辑辑乖乖指指令令功功能能,上上述述指指令令执执行行后后的的操作操作结结果果为为:A=20HA=20H,20H20H=0FEH=0FEHA=0EHA=0EH,20H20H=0FEH=0FEHA=0F0HA=0F0H,20H20H=0FEH=0FEHA=80HA=80H,20H20H=80H=80HORLA,RnORLA,Rn;AA;AARnRnORLA,directORLA,direct;AA;AAdirectdirectORLA,RiORLA,Ri;AA;AA
43、(Ri)(Ri)ORLA,#dataORLA,#data;AA;AAdatadataORLdirect,AORLdirect,A;direct(direct);direct(direct)A AORLdirect,#dataORLdirect,#data;direct(direct);direct(direct)datadata二或指令二或指令知:A0AAH和P20FFH,编程把累加器A中低4位送入P2口低4位,P2口高位不变。解:程序思绪为:根据逻辑与、逻辑或二类指令进展合用来实现ORG0030HANLA,0FH;屏蔽A中的高4位,低4位不变ANLP2,0F0H;屏蔽P2中的低4位,高4位不
44、变ORLP2,A ;装配数据,结果送P2SJMP$ ;终了例例 3.20XRL A ,RnXRL A ,Rn;AA;AA RnRnXRL A ,directXRL A ,direct;AA;AA (direct)(direct)XRL A ,RiXRL A ,Ri;AA;AA (Ri)(Ri)XRL A ,#dataXRL A ,#data;AA;AA datadataXRL direct ,AXRL direct ,A;direct(direct);direct(direct) A AXRL direct ,#data XRL direct ,#data ;direct (direct);d
45、irect (direct) datadata三异或指令三异或指令知知:外外部部RAMRAM0040H0040H中中有有一一数数BBHBBH,假假定定高高4 4位不位不变变和低和低4 4位取反,位取反,试编试编出它的相出它的相应应程序。程序。解:利用解:利用MOVXA,DPTRMOVXA,DPTR类类指令指令ORG0300HORG0300HMOVDPTR,#0040HMOVDPTR,#0040H;地址送指;地址送指针针DPTRDPTRMOVXA,DPTRMOVXA,DPTR;ABBHABBHXRLA,#0FHXRLA,#0FH;ABBHABBH 0FH=B4H0FH=B4HMOVXDPTR,A
46、MOVXDPTR,A;结结果送回果送回30H30H单单元元SJMP$SJMP$;停;停顿顿例例 3.21四累加器清零和取反指令四累加器清零和取反指令CPL ACLR A; A A; A 0知:40H单元中有一数为34H,试写出对它求补的程序。解:一个8位带符号二进制机器数的补码可以定义为反码加“1。为此,相应程序为:ORG0030HMOVA,40H;A34HCPLA;A/34HINCA;A34H的补码MOV30H,A;结果送回40H单元SJMP$;停顿例例例例 3.22 3.22RL A ;RR A ;A7A0ACyA7A0ACyA7A0AA7A0ARLC A ;RRC A ;三、移位指令三、
47、移位指令4条条知:M和M1单元中有一个16位二进制数M为低8,编程将其扩展到二倍留意:该数最大可扩展到65536。解:一个16位二进制数扩展到二倍就等于是把它进展一次算术左移。由于MCS51单元片机的移位指令都是二进制8位的移位指令,因此16位数的移位指令必需用程序来实现。算法为:MM+10例例例例3.233.23程序程序为为:ORGORG0030H0030HCLRCLRC C; ;清清进进位位标标志位志位MOVMOVR0R0,MM; ;操作数低操作数低8 8位地址送位地址送R0R0MOVMOVA A,R0R0;A;A操作数低操作数低8 8位位RLCRLCAA; ;低低8 8位操作数左移低位位
48、操作数左移低位补补0 0MOVMOVR0R0,A A; ;结结果送回果送回MM单单元,元,CyCy中中为为最高位最高位INCINCR0R0;R0;R0指向指向MM1 1单单元元MOVMOVA A,R0R0;A;A操作数高操作数高8 8位位RLCARLCA ; ;高高8 8位操作数左移并加上低位位操作数左移并加上低位CyCyMOVR0,AMOVR0,A; ;结结果送回果送回MM1 1单单元元SJMPSJMP$ $; ;停停顿顿一、控制一、控制一、控制一、控制一、控制一、控制转转转移指令移指令移指令移指令移指令移指令(17(17(17(17(17(17条条条条条条) ) ) ) ) )LJMPad
49、dr16 ;Pcaddr16AJMP addr11 ;PcPC+2,PC100arrr11SJMP rel ;PcPC+2,PCPC+relJMP A+DPTR ;PcA+DPTR1、无条件转移指令、无条件转移指令3.2.7控制转移和位操作指令F800HFFFFHF000HF7FFHE800HEFFFHE000HE7FFHD800HDFFFHD000HD7FFHC800HCFFFHC000HC7FFHB800HBFFFHB000HB7FFHA800HAFFFHA000HA7FFH9800H9FFFH9000H97FFH8800H8FFFH8000H87FFH7800H7FFFH7000H77F
50、FH6800H6FFFH6000H67FFH5800H5FFFH5000H57FFH4800H4FFFH4000H47FFH3800H3FFFH3000H37FFH2800H2FFFH2000H27FFH1800H1FFFH1000H17FFH0800H0FFFH0000H07FFH程序存储器程序存储器64K地址空间地址空间MCS-51系列系列单单片机可以在片机可以在64KB地址范地址范围围内内寻寻址,址,绝对转绝对转移指令的移指令的转转移范移范围围只在只在PC当前当前值值所指的所指的2KB地址范地址范围围内。内。一一页: 256个地址个地址单元元一区:一区: 8页,共,共2KB地址地址单元;
51、地址高元;地址高5位决位决议区。区。 64K: 32区,区,256页。 长转移指令移指令LJMPaddr16;PCaddr16 三字节指令,不影响标志位,可在三字节指令,不影响标志位,可在64KB地址范围内无条件转移。地址范围内无条件转移。 绝对转移指令移指令二字节指令,可在二字节指令,可在2KB地址范围内转移。地址范围内转移。AJMPaddr11;PCPC+2,PC10-0addr11知:SZ:AJMPaddr11其中,SZ为AJMPaddr11指令的标号地址,由该指令在程序存储器中位置确定,addr11为11位地址,试分析该指令执行后的情况以及指令码确实定方法。解:设SZ=4100H,ad
52、dr11=11010101101B,那么根据上述指令码格式可得绝对转移指令的指令码为:例例 3.24图图3.10 3.10 转转移指令移指令addr11AJMPPCPC+1PC+2ROM2KB1100000110101101操作码a9a10a11a7a0PC=0100011010101101B=46ADHPC15 PC11a0. 短短转移移机器码:80Hrel本指令是一条双字节双周期指令,在PC内容加2所指地址上,以rel:-128+127为偏移量,在一页地址(-128+127)范围内实现短转移。SJMP rel ; PC PC+2+relORGORG1000H1000H1000H7401HS
53、TART:MOVA,#01H1000H7401HSTART:MOVA,#01H; ;字位字位码码初初值值送送A A1002HF8H1002HF8H MOVR0MOVR0,AA; ;暂暂存于存于R0R01003H90CF01HLOOP:MOVDPTR,#0CF01H1003H90CF01HLOOP:MOVDPTR,#0CF01H ; ;端口地端口地址址CF01HCF01H; ;送送DPTRDPTR 1017H80rel1017H80relSJMPSJMPSTARTSTART; ;转转入入STARTSTART SJMPSJMP$ $; ;偏上偏上例例3.25 以以下下程程序序中中,请请计计算算SJ
54、MPSJMP STARTSTART指指令令码码中中的的relrel,并并分分析析目目的的地地址址的的转转移移范范围围。a a 地址偏移量地址偏移量relrel的的计计算:如下关系成立。算:如下关系成立。 目的目的转转移地址源地址移地址源地址2 2relrelrel=rel=目的目的转转移地址源地址移地址源地址2 2 1000H1000H1017H1017H2 22525relrel应应采用采用补码补码表示,表示,为为此此rel=-25rel=-25补补E7HE7H 解解 : SJMPSJMP指指 令令 中中 地地 址址 偏偏 移移 量量 是是 采采 用用STARTSTART符符号号表表示示的的
55、,指指明明指指令令执执行行后后转转入入本本程程序开序开头头重新重新执执行。行。b) b) 转转转转移地址范移地址范移地址范移地址范围围围围确确确确实实实实定:定:定:定:转转转转移地址通常以移地址通常以移地址通常以移地址通常以SJMPSJMP 指令始址指令始址指令始址指令始址为为为为参照点,但参照点,但参照点,但参照点,但实实实实践的参照点是践的参照点是践的参照点是践的参照点是对对对对 PC PC2 2,因,因,因,因relrel的取的取的取的取值值值值范范范范围围围围是是是是128128127127, 故可得到故可得到故可得到故可得到转转转转移地址的移地址的移地址的移地址的实实实实践践践践转
56、转转转移范移范移范移范围为围为围为围为 126126129129。 . 变址址寻址址转移指令移指令JMP A+DPTR; PC A+DPTR机器码:机器码: 73H 该类指令是一条单字节双周期无条件转移指令。在64KB地址范围内无条件转移。 知:累加器A中放有待处置命令编号0-4,程序存储器中放有始址为MAIN的两字节长转移指令表,试编一程序能使机器按照累加器A中的命令编号转去执行相应的命令程序。例例3.26解:程序解:程序为为:STAR:STAR: MOVMOVAA,R1R1RLRLAA;AA*2;AA*2MOVMOVDPTRDPTR,MAINMAIN ; ;转转移指令表始址送移指令表始址送
57、DPTRDPTRJMPJMPA ADPTRDPTRMAIN:MAIN:AJMPAJMPPM0PM0; ;转转入入0 0命令程序命令程序AJMPAJMPPM1PM1 ; ;转转入入1 1命令程序命令程序AJMPAJMPPM2PM2 ; ;转转入入2 2命令程序命令程序AJMPAJMPPM3PM3; ;转转入入3 3命令程序命令程序AJMPAJMPPM4PM4 ; ;转转入入4 4命令程序命令程序AJMP$AJMP$; ;停停顿顿JB rel; A=0 PC PC+2+rel A 0 PC PC+2JNB rel; A0 PC PC+2+rel A=0 PC PC+22、条件转移指令、条件转移指令
58、累加器累加器A判零判零转移移(2条条) 知:外部RAM中DATA1为始址的数据块以零为终了标志,试编程将之送到以DATA2为始址的内部RAM单元中。 例例3.27 3.27 解:程序为:ORG1000HMOVR0,#DATA1;外部RAM数据块始址送R0MOVR1,#DATA2;内部RAM数据块始址送R1MAIN:MOVXA,R0;取外部RAM数据送AJZQUIT;假设A=0,那么跳转到QUIT处,;否那么往下执行MOVR1,A;A中的数据送给内部RAM单元中INCR0;修正外部RAM地址的指针INCR1;修正内部RAM地址的指针SJMPMAIN;循环执行QUIT: SJMP$;停顿CJNE
59、A, #data, rel ;不相等不相等转转移移;#data=A, PC PC+3, C 0 ;#dataA, PC PC+3+rel, C 1CJNE A, direct,rel;不相等不相等转转移移 ;假假设设A=(direct) ,那么那么PCPC+3,C0 ;假假设设A(direct) ,那么那么PCPC+3+rel, C0 ;假假设设Adata ,那么那么PCPC+3+rel, C0 ;假假设设Rndata ,那么那么PCPC+3+rel, C0 ;假假设设(Ri)data ,那么那么PCPC+3+rel, C1DJNZdirect,rel;(direct)(direct)-1;假
60、设(direct)0,那么PCPC+3+rel;假设(direct)=0,那么PCPC+3DJNZRn,rel;RnRn1;假设Rn=0那么PCPC+2;假设Rn0那么PCPC+2+rel减一不减一不为零零转移移从从P2.0P2.0输输出出2020个方波个方波解:程序解:程序为为:ORG1000HORG1000HMOVR2,#40MOVR2,#40; ;预预置方波数置方波数BACK:BACK: CPLP2.0CPLP2.0;P2.0;P2.0取反取反DJNZR2,BACKDJNZR2,BACK ;R2-1;R2-1不不等等于于0 0继继续续循循环环SJMP$SJMP$; ;停停顿顿例例 3.2
61、8调用指令用指令(2条条)ACALL addr11;PC PC+2 ;SP SP+1 ;(SP) PC70 ;SP SP-1 ;(SP) PC158 维护维护前往地址前往地址 ;PC100 addr11 a)短调用是一条双字节指令,格式为:3、子程序调用和前往指令、子程序调用和前往指令机器机器码: a10 a9 a8 1 0 0 0 1 a7 a6 a5 a4 a3 a2 a1 a0 双字双字节指令,不影响指令,不影响标志位,在志位,在2KB地址地址范范围内内寻址,以址,以调用子程序。用子程序。页数决数决议于于addr11的高的高3位,位,页内地址决内地址决议于于addr11的低的低8位。位。
62、b) 长调长调用指令用指令LCALL addr16;PCPC+3;SPSP+1,(SP)PC70;SPSP1,(SP)PC158;PCaddr16三字三字三字三字节节指令,在指令,在指令,在指令,在64KB64KB地址范地址范地址范地址范围围内内内内调调用子程序。用子程序。用子程序。用子程序。 知:MAIN0200H,试问执行如下指令后,中数据如何变化?PC中内容是什么?MOVSP,65H MAIN: LCALL2000H 解:执行上述指令后,SP67H、66H03H、67H02H,PC2000H。例例 3.29前往指令前往指令(2(2条条) )RETPC158 (SP) ,SP SP-1PC
63、70 (SP), SP SP-1 调调用子程序后必需前往主程序,因此,每种用子程序后必需前往主程序,因此,每种用子程序后必需前往主程序,因此,每种用子程序后必需前往主程序,因此,每种子程序的最后一条指令必需是前往指令子程序的最后一条指令必需是前往指令子程序的最后一条指令必需是前往指令子程序的最后一条指令必需是前往指令RETRET。前。前。前。前往往往往时时完成将完成将完成将完成将调调子子子子时压时压入堆入堆入堆入堆栈栈的断点地址送回的断点地址送回的断点地址送回的断点地址送回PCPC以恢复断点功能。堆以恢复断点功能。堆以恢复断点功能。堆以恢复断点功能。堆栈栈遵照遵照遵照遵照“ “后后后后进进先出
64、原那么。先出原那么。先出原那么。先出原那么。a)a)子程序前往指令子程序前往指令 b)b)中断前往指令中断前往指令RETI中断效力程序的最后一条指令后是中断返主指令。其恢复断点的操作与前往指令RET一样。此条指令前必需将相应的优先级形状触发器清0。空操作空操作NOPPC158 (SP), SP SP-1PC70 (SP), SP SP-1试利用子程序指令编写出以20H23H单元中的数分别拆字送以50H为首的地址单元中。 例例 3.30 3.30解:程序解:程序为为:ORG0030HORG0030HMOVSP,#60HMOVSP,#60HCZCX:CZCX:MOVMOVR0,#50HR0,#50
65、H;目目的的首首地址地址MOVMOVA,20HA,20H;拆第一个字;拆第一个字LCALLLCALLPTDSPTDS;调调用用拆拆字字子子程程序序MOVA,21HMOVA,21H ;拆第二个字;拆第二个字LCALLLCALLPTDSPTDS ;调调用用拆拆字字子子程程序序MOVA,22HMOVA,22H;拆第三个字;拆第三个字LCALLPTDSLCALLPTDS ;调调用拆字子程序用拆字子程序MOVA,23HMOVA,23H ;拆第四个字;拆第四个字LCALLPTDSLCALLPTDS;调调用用拆拆字字子子程程序序SJMPSJMP$ ;停;停顿顿PTDS:PTDS: MOVB,AMOVB,A;
66、把要拆的字送;把要拆的字送B B保管保管 ACALLPTDS1ACALLPTDS1;调调拆字子程序拆字子程序 MOVA,BMOVA,B;调调B B中的内容中的内容 SWAPASWAPA ;交;交换换高低位高低位PTDS1:ANLA,#0FHPTDS1:ANLA,#0FH;屏蔽高位,保管低位;屏蔽高位,保管低位 MOVR0,AMOVR0,A;送目的地址;送目的地址 INCR0INCR0;目的地址加;目的地址加1 1 RETRET;前往;前往 内部内部内部内部RAMRAM中中中中20H2FH20H2FH单单元是位元是位元是位元是位寻寻址区和址区和址区和址区和1111个可以位个可以位个可以位个可以位
67、寻寻址的存放器址的存放器址的存放器址的存放器P0P0、P1P1、P2P2、P3P3、TCONTCON、SCONSCON、IEIE、IPIP、PSWPSW、A A、B B。二、位操作二、位操作二、位操作二、位操作类类指令指令指令指令(17(17(17(17条条条条) ) ) )送指令送指令送指令送指令送指令送指令MOV C, bit ; C bitMOV bit,C ; bit C 试编写把00H位中内容和3FH位中内容相交换。解:程序为:MOVC,00H;Cy00HMOV01H,C;暂存于01H位中MOVC,3FH;Cy3FHMOV00H,C;存入目的00H位中MOVC,01H;00H位的原内
68、容送CMOV3FH,C;存入目的3FH位中SJMP$;停顿例例 3.31位置位和位清零指令位置位和位清零指令位置位和位清零指令位置位和位清零指令位置位和位清零指令位置位和位清零指令(4(4(4条条条条条条) ) )CLR C ; Cy 0CLR bit;bit 0SETB C;Cy 1SETB bit;bit 1位运算指令位运算指令位运算指令位运算指令位运算指令位运算指令(6(6(6条条条条条条) ) )ANL C,bit;Cy Cy(bit)ANL C, /bit ;Cy Cy/(bit)ORL C,bit;Cy Cy(bit)ORL C, /bit ;Cy Cy/(bit)CPL C ;C
69、y /CyCPL bit;bit /bit位控制位控制位控制位控制位控制位控制转转转移指令移指令移指令移指令移指令移指令(5(5(5条条条条条条) ) )假假设条件条件满足那么足那么PC值改改动,实现程序的程序的转移。移。JC JC rel relJNC JNC rel relJB bit, relJB bit, relJNB bit, relJNB bit, relJBC bit, relJBC bit, rel; ;假假假假设设设设bitbit1 1 那么那么那么那么bit=0bit=0且且且且PC PC PC+3+relPC+3+rel1)ORG伪指令指令格式为:ORG16位地址例:OR
70、G0030HMAIN:MOVSP,#60HSJMP$3.2.8伪指令2)END伪指令指令格式为:ENDEND标号3)EQU伪指令指令格式为:标识符EQU项或数例:例:TIME EQU 34HTIME EQU 34H WEEK EQU 35HWEEK EQU 35H MOV MOV A,TIME A,TIME ;ATIME;ATIME MOV MOV R1,WEEKR1,WEEK;R1WEEK;R1WEEK4)DB伪指令指令格式为:标号:DB项或项表例:例:ORG2000HTAB:DB 03H,04H,05H,06H, 07H,08H5)DW伪指令指令格式为:DW项或项表例:例:ORG1000HTAB: DW0070H, 0071H,0072H6)DS伪指令指令格式为:标识:DS数字例:例:ORG30HDS08H7)BIT伪指令指令格式为:标识符bit项例:例:REGISTER0BITRS0