《单片机 第3章MCS-51单片机的指系统及汇编语言程序设计.ppt》由会员分享,可在线阅读,更多相关《单片机 第3章MCS-51单片机的指系统及汇编语言程序设计.ppt(138页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第三章第三章第三章第三章 MCS-51MCS-51MCS-51MCS-51单片机指令系单片机指令系单片机指令系单片机指令系 统及汇编语言程序设计统及汇编语言程序设计统及汇编语言程序设计统及汇编语言程序设计内容提要:3-1指令指令编码格式及常用符号编码格式及常用符号3-2MCS51单片机的寻址方式单片机的寻址方式3-3数据传送类指令数据传送类指令3-4算术运算类指令算术运算类指令3-5逻辑运算类指令逻辑运算类指令3-6控制转移类指令控制转移类指令3-7位操作类指令位操作类指令高级语言高级语言:3-13-13-13-1指令指令指令指令编码格式及常用符号编码格式及常用符号编码格式及常用符号编码格式及
2、常用符号一、汇编语言程序设计的意义一、汇编语言程序设计的意义什么是程序?什么是程序?完成某项特定任务的指令的集合。完成某项特定任务的指令的集合。计算机按程序一条一条地依次执行指令,从而完成指定任务。计算机按程序一条一条地依次执行指令,从而完成指定任务。要让计算机完成各项任务,就应设计各种程序。要让计算机完成各项任务,就应设计各种程序。汇编语言汇编语言:机器语言机器语言:程序设计语言:程序设计语言:用二进制代码表示指令和数据。用二进制代码表示指令和数据。用助记符表示指令操作功能,用标号表示操作对象。用助记符表示指令操作功能,用标号表示操作对象。独立于机器独立于机器,面向过程面向过程,接近自然语言
3、和数学表达式接近自然语言和数学表达式.汇编语言程序的每一条语句都与计算机的某一条指令对应,所汇编语言程序的每一条语句都与计算机的某一条指令对应,所以必需熟悉指令系统。以必需熟悉指令系统。指令:指令:CPU按照人们的意图来完成某种操作的命令。按照人们的意图来完成某种操作的命令。指令指令=操作码操作码+操作数操作数操作码操作码表示了该指令所能执行的操作功能表示了该指令所能执行的操作功能。操作数操作数表示参加操作的数的本身或操作数所在的地址。表示参加操作的数的本身或操作数所在的地址。MCS-51指令格式:指令格式:标号:标号:操作码助记符操作码助记符 第一操作数第一操作数,第二操作数,第二操作数;注
4、释;注释MCS51指令格式指令格式LOOP:MOVA,R0;将将R0的内容送的内容送A标号操作码操作码第一操作数第一操作数第二操作数第二操作数注释(目的操作数)(目的操作数)(源操作数)(源操作数)注:黑色的内容不是必须的注:黑色的内容不是必须的指令按其编码的长短分为指令按其编码的长短分为:单字节指令单字节指令双字节指令双字节指令三字节指令三字节指令7 6 5 4 3 21 0opcodeData或directData或directMCS-51MCS-51单片机汇编程序书写格式范例单片机汇编程序书写格式范例地址地址机器码机器码(目标程序)(目标程序)标号标号汇编程序汇编程序注释注释ORG 20
5、00HORG 2000H;伪指令伪指令(汇编程序开始汇编程序开始)20002000H H7474H 20HH 20H START START:MOV A,#20HMOV A,#20H;把数把数2020H H送入累加器送入累加器A A中中20022002H H0404H HINC AINC A;把把A A的内容加一后送的内容加一后送A A20032003H H2424H 30HH 30HADD A,#30HADD A,#30H;把把A A的内容加的内容加3030H H后送后送A AxxxxHxxxxH8080H FEHH FEHLOOP:LOOP:SJMP$SJMP$;暂停指令暂停指令ENDEN
6、D伪指令伪指令(汇编程序结束汇编程序结束)二、二、MCS-51MCS-51系列单片机的指令系统系列单片机的指令系统111111条条指令,共分指令,共分五大类五大类:数据传送类;(数据传送类;(29条)条)算术运算类;(算术运算类;(24条)条)逻辑运算类;(逻辑运算类;(24条)条)控制转移类;(控制转移类;(17条)条)位操作类。(位操作类。(17条)条)指令中操作数的描述符号指令中操作数的描述符号:Rn工作寄存器工作寄存器R0R7Ri间接寻址寄存器间接寻址寄存器R0、R1Direct直接地址,包括内部直接地址,包括内部128BRAM单元地址、单元地址、26个个SFR地址。地址。#data8
7、位常数位常数#data1616位常数位常数addr1616位目的地址位目的地址addr1111位目的地址位目的地址rel8位带符号的偏移地址位带符号的偏移地址DPTR16位外部数据指针寄存器位外部数据指针寄存器bit可直接位寻址的位可直接位寻址的位A累加器累加器B寄存器寄存器BC进、借位标志位,或位累加器进、借位标志位,或位累加器间接寄存器或基址寄存器的前缀间接寄存器或基址寄存器的前缀/指定位求反指定位求反(x)x中的内容中的内容(x)x中的地址中的内容中的地址中的内容当前指令存放的地址当前指令存放的地址3-23-2 MCS51MCS51单片机的寻址方式单片机的寻址方式寻址方式:寻找(或确定)
8、操作数所在单元寻址方式:寻找(或确定)操作数所在单元地址的方式。地址的方式。寻址方式越多,计算机寻址能力越强,但指寻址方式越多,计算机寻址能力越强,但指令系统也越复杂。令系统也越复杂。说明:以下讨论的寻址方式都是针对源操作说明:以下讨论的寻址方式都是针对源操作数的。但实际上目的操作数也有寻址问题。数的。但实际上目的操作数也有寻址问题。MCSMCS5151系列单片机指令系统分类系列单片机指令系统分类按寻址方式分为以下七种:按功能分为以下五种:按寻址方式分为以下七种:按功能分为以下五种:1 1、立即寻址、立即寻址 1 1、数据传送指令位操、数据传送指令位操2 2、直接寻址、直接寻址 2 2、算术运
9、算指令、算术运算指令3 3、寄存器寻址、寄存器寻址 3 3、逻辑运算指令、逻辑运算指令4 4、寄存器间接寻址指令、寄存器间接寻址指令 4 4、控制转移类指令、控制转移类指令5 5、相对寻址、相对寻址 5 5、位操作指令、位操作指令6 6、变址寻址、变址寻址7 7、位寻址、位寻址 3.2.1寄存器寻址寄存器寻址操作数存放在工作寄存器操作数存放在工作寄存器R0R7中,或寄存器中,或寄存器B中。中。MOVA,R0;AA(R0R0)3.2.2直接寻址直接寻址指令中直接给出操作数的地址。指令中直接给出操作数的地址。MOVA,20H;AA(20H20H)MOV30H,DPH;书书放在放在甲甲抽屉中抽屉中;
10、甲甲抽屉的钥匙放在抽屉的钥匙放在乙乙抽屉中抽屉中;取取书书,A中中 20HMOV30H,#20HMOVR0,#30HMOVA,R0此例中,此例中,20H就当成是那本就当成是那本书书;30H就当成是就当成是甲甲抽屉;抽屉;R0就当成是就当成是乙乙抽屉,执行的结果就是将抽屉,执行的结果就是将20H这个立即数装入这个立即数装入A中。中。期间也经历了两次寻址,即间接寻址。期间也经历了两次寻址,即间接寻址。3.2.3寄存器间接寻址寄存器间接寻址指令中寄存器的内容作为操作数存放的地址,在工作上间接寻指令中寄存器的内容作为操作数存放的地址,在工作上间接寻址寄存器前用址寄存器前用“”表示前缀。表示前缀。例如例
11、如:“一本一本书书放在放在甲甲抽屉中,上了锁;其开锁的钥匙放在抽屉中,上了锁;其开锁的钥匙放在乙乙抽屉中,抽屉中,乙乙抽屉也上了锁。问如何才能取到哪本抽屉也上了锁。问如何才能取到哪本书书?”这就是一个间接寻址的问题,要经过两次寻址才能找到哪本这就是一个间接寻址的问题,要经过两次寻址才能找到哪本书书。而寄存器间接寻址也是同样。而寄存器间接寻址也是同样。例如例如:3.2.3 3.2.3 寄存器间接寻址寄存器间接寻址MOV 20H,#30HMOV 20H,#30HMOV RO,#20H AMOV RO,#20H A(R0R0)MOV A,R0MOV A,R0注:只有注:只有R0R0,R1R1,DPT
12、RDPTR,SPSP可用于寄可用于寄存器间接寻址。存器间接寻址。3.2.4、立即数寻址、立即数寻址所要找的操作数是一二进制数或十进制数,出现在指令中,所要找的操作数是一二进制数或十进制数,出现在指令中,用用“#”作前缀作前缀MOVA,#20H3.2.53.2.5、变址寻址、变址寻址操作数地址操作数地址=变地址变地址+基地址基地址基地址寄存器基地址寄存器DPTR或或PC变址寄存器变址寄存器A该寻址方式只用于访问程序存储器,查表;所以该寻址方式只该寻址方式只用于访问程序存储器,查表;所以该寻址方式只有读操作而无写操作。有读操作而无写操作。如如MOVCA,A+DPTR3.2.5 3.2.5 变址寻址
13、变址寻址MOVCA,A+DPTR 3.2.63.2.6、相对寻址相对寻址把指令中给定的地址偏移量与本指令所在单元地址(把指令中给定的地址偏移量与本指令所在单元地址(PC内容)内容)相加得到真正有效的操作数所存放的地址。主要用于实现程序的分相加得到真正有效的操作数所存放的地址。主要用于实现程序的分支转移。支转移。例如例如“李同学李同学20岁,张同学比李同学大岁,张同学比李同学大3岁,问张同学多少岁?岁,问张同学多少岁?”这就是一个相对寻年龄的问题,而相对寻址与此类似。这就是一个相对寻年龄的问题,而相对寻址与此类似。如如JC60H;设(设(PC)=2000H为基址,相对偏移量为为基址,相对偏移量为
14、60H;则当则当C=1时,时,转移的目的地址转移的目的地址=20002000H H+2+60H3.2.6 3.2.6 相对寻址方式相对寻址方式 3.2.73.2.7位寻址方式位寻址方式 采用位寻址的指令的操作数是某个字节中的一位。采用位寻址的指令的操作数是某个字节中的一位。片内片内RAMRAM中有:中有:2020H-2FHH-2FH和高和高128128字节地址能被字节地址能被8 8整除的整除的SFRSFR的相的相应位可以位寻址。应位可以位寻址。MOV A.1,PSW.7MOV A.1,PSW.7MOV A.0,20H.OMOV A.0,20H.O巩固新课:巩固新课:1、汇编语言有何种特点?指令
15、格式?、汇编语言有何种特点?指令格式?2、MCS51系列机共有多少条指令?分几类?系列机共有多少条指令?分几类?3、MCS51系列汇编语言指令有几种寻址方式?系列汇编语言指令有几种寻址方式?操作数寻址方式及有关空间操作数寻址方式及有关空间 寻址方式寻址方式寻址空间寻址空间立即寻址立即寻址程序存储器程序存储器ROMROM直接寻址直接寻址片内片内RAMRAM低低128128字节、特殊功能寄存器字节、特殊功能寄存器SFRSFR和片内和片内RAM 20HRAM 20H2FH2FH的位地的位地址址寄存器寻址寄存器寻址工作寄存器工作寄存器R0R7,A,B,CY,DPTRR0R7,A,B,CY,DPTR寄存
16、器间接寻寄存器间接寻址址片内片内RAMRAM低低128128字节字节(以以 R0R0、R1R1方式寻址方式寻址)、SP(SP(仅对仅对PUSHPUSH、POPPOP指令指令);片外;片外RAM(RAM(以以 R0R0、R1R1、DPTRDPTR方式寻址方式寻址)位寻址位寻址片内片内RAM 20HRAM 20H2FH2FH的所有位地址和部分特殊功能寄存器的所有位地址和部分特殊功能寄存器SFRSFR的位的位变址寻址变址寻址程序存储器(以程序存储器(以 A+PCA+PC、A+DPTRA+DPTR方式寻址)方式寻址)相对寻址相对寻址程序存储器程序存储器256256字节范围(以字节范围(以PC+PC+偏
17、移量)偏移量)3.3 3.3 数据传送类指令数据传送类指令片外片外程序程序存储器存储器ROMEPROM特殊功能特殊功能寄存器寄存器SFR片内片内RAM128字节字节片外片外数据数据存储器存储器RAMMOVCMOVXMOVPUSHPOPXCHXCHD数据传送类指令数据传送类指令共28条,是将源操作数送到目的操作数。指令执行后,源操作数不变,目的操作数被源操作数取代。数据传送类指令用到的助记符有MOV、MOVX、MOVC、XCH、XCHD、SWAP、PUSH、POP8种。源操作数可采用寄存器、寄存器间接、直接、立即、变址5种寻址方式寻址,目的操作数可以采用寄存器、寄存器间接、直接寻址3种寻址方式。
18、3.3.1以A为目的操作数如:MOVA,R2MOVA,30HMOVA,R0MOVA,#36H3.3.1以累加器以累加器A为目的操作数的指令为目的操作数的指令MOVA,data;AdataMOVA,Rn;n=07,A(Rn)MOVA,Ri;i=0,1,A(Ri)MOVA,direct;A(Rn)direct为内部RAM或SFR地址注:MOVA,Ri;以Ri的内容为地址,把该地址中的内容送到A中去。A(Ri)MOVA,R0;将R0的内容送到A去。A(R0)MOVA,#20H;(A)=20HA的内容为20HMOVA,20H;(A)=(20H)A的内容为20H中的内容注意以上两组指令的不同点例:例:M
19、OVR0,#30HMOV30H,#60HMOVA,R0(A)=?3.3.2以以Rn为目的操作数为目的操作数MOVRn,A;RnAMOVRn,direct;Rn(direct)MOVRn,#data;Rn#data如:MOVR0,AMOVR3,30HMOVR7,#36HMOVR1,#30MOVR6,#01101100B3.3.3以直接地址为目的操作数MOVdirect,A;direct(A)MOVdirect,Rn;direct(Rn),n=07MOVdirect,Ri;direct(Ri),i=0,1MOVdirect,direct;direct(direct)MOVdirect,#data;
20、directdata如:MOV30H,AMOVP1,R2MOV38H,60HMOVTL0,R1MOV58H,#36H3.3.4以间接地址为目的操作数以间接地址为目的操作数MOVRi,A;(Ri)AMOVRi,direct;(Ri)(direct)MOVRi,#data;(Ri)#data如:MOVR0,AMOVR1,36HMOVR0,SBUFMOVR1,#48MOVR0,#0D6H例如:设(30H)=6FH,R1=40H,执行MOVR1,30H后,30H单元中数据取出送入R1间接寻址的40H单元,(40H)=6FH。3.3.5以DPTR为目的操作数MOVDPTR,#data16;DPTR#da
21、ta16(唯一的唯一的16位数据传送指令。位数据传送指令。)MOVDPTR,#2010H相当于:相当于:MOVDPH,#20HMOVDPL,#10H例如执行例如执行MOVDPTR,#2000H后,后,(DPTR)=2000H。如:如:MOVDPTR,#2368HMOVDPTR,#35326MOV指令在片内指令在片内RAM的允许操作图的允许操作图不允许的操作有不允许的操作有:RiRiRnRnRiRn3.3.6访问外部数据RAMMOVXA,Ri;((Ri))A,且使且使/RD=0MOVXA,DPTR;(DPTR)A,且使且使/RD=0MOVXRi,A;(A)(Ri),且使且使/WR=0MOVXDP
22、TR,A;(A)(DPTR),且使且使/WR=0说明:说明:1、第、第2、4两条指令以两条指令以DPTR为片外为片外RAM16位地址指针,位地址指针,寻址范围为寻址范围为64KB空间;空间;2、第、第1、3两条指令以两条指令以R0或或R1作低作低8位地址指针,由位地址指针,由P0口送出,寻址范围为口送出,寻址范围为256B空间(空间(P2口仍可作通用口仍可作通用I/O口)。口)。例例3、试编写一程序段,实现将外试编写一程序段,实现将外RAM0FAH单元中的单元中的内容传送到外内容传送到外RAM04FFH单元中。单元中。解:解:MOVDPTR,#04FFHMOVR0,#0FAHMOVXA,R0M
23、OVXDPTR,A3.3.7读程序存储器MOVCA,A+DPTR;A((A)+(DPTR))MOVCA,A+PC;A((A)+(PC))执行后会使执行后会使/PSEN有效。有效。MOVC含义是传送常数。含义是传送常数。以以DPTR为基地址的指令,可在为基地址的指令,可在ROM的的64KB范围内查范围内查表;表;而以而以PC为基地址的指令只能在(为基地址的指令只能在(PC)+1为中心上、下为中心上、下256B范围内查表。范围内查表。例如已知A=30H,DPTR=3000H,程序存储器单元(3030H)=50H,执行MOVCA,A+DPTR后,A=50H。例、设(例、设(A A)=一个一个BCDB
24、CD码常数,试用查表法获得其相应的码常数,试用查表法获得其相应的ASCIIASCII码。码。解法II:MOVCA,A+PCTAB:DB30H,31H,32H,33HDB34H,35H,36H,37H解法解法I:MOVDPTR,#TABMOVCA,.A+DPTRTAB:DB30HDB31HDB32H,33H,34H,35H例近程查表设程序中的数据表格为:1010H:02H1011H:04H1012H:06H1013H:08H执行程序:1000H:MOVA,#0DH1002H:MOVCA,A+PC;(0DH+1003H)A1003H:MOVR0,A;(A)R0结果为:(A)=02H,(R0)=02
25、H,(PC)=1004H例例远程查表远程查表设程序中的数据表格为:设程序中的数据表格为:执行程序:执行程序:1000H:MOVA,#10H1002H:PUSHDPH1004H:PUSHDPL1006H:MOVDPTR,#7000H1009H:MOVCA,A+DPTR;(10H+7000H)A100AH:POPDPL100CH:POPDPH结果为:(结果为:(A)=02H,(PC)=100EH,(DPTR)=原值原值7010H:02H7011H:04H7012H:06H7013H:08H数据传送类指令 ROM和片外数据RAM传送类指令 ROM数据传送指令图 片外RAM数据传送指令 3.3.8数据
26、交换l字节交换XCHA,Rn;ARnXCHA,direct;A(direct)XCHA,Ri;A(Ri)l半字节交换XCHDA,Ri;A03(Ri)03SWAPA;A03A47不影响任何标志位。不影响任何标志位。半字节交换指令半字节交换指令二低半字节交换指令二低半字节交换指令XCHDA,Ri;(A03)(Ri)03)如:设(A)=36H,(R1)=65H,(65H)=42HXCHDA,R1;(A)=32H,(65H)=46HA累加器累加器A高、低半字节交换指令高、低半字节交换指令SWAPA;(A03)(A47)如:设(A)=36HSWAPA;(A)=63H例:(A)=80H,(R7)=97H执
27、行:XCHA,R7结果:(A)=97H,(R7)=80H例:将片内RAM60H单元与61H单元的数据交换。XCH60H,61H对吗?数据传送类指令 片内RAM数据传送及交换类指令 3.3.9堆栈操作堆栈操作所谓堆栈是在片内RAM中按“先进后出,后进先出”原则设置的专用存储区。数据的进栈出栈由指针SP统一管理。堆栈的操作有如下两条专用指令:PUSHdirect;SP(SP+1),(SP)(direct)POP direct;(direct)(SP),SPSP-1PUSH是进栈(或称为压入操作)指令。指令执行过程如图3-7所示。片内RAM30H11H10HSP片内RAM50H40H11H10HSP
28、40H30H片内RAM50H40H11H10H50HSP30H片内RAM40H11H10H34HSP30H34H34H执行前执行前执行前PUSH指令后执行POP指令后图3-7指令PUSH操作示意图图3-8指令POP操作示意图PUSH 40HPUSH 40HPOP 30HPOP 30H(2)(direct)栈操作指令栈操作指令PUSHdirectPOPdirect不影响任何标志位。不影响任何标志位。PUSHdirect指令执行中,机器自动进行两步操作:指令执行中,机器自动进行两步操作:(1)(SP)+1例例1、设(、设(SP)=09H,(,(DPTR)=0123H,分析:分析:执行执行PUSHD
29、PLPUSHDPH后,各单元中的内容。后,各单元中的内容。(SP)(SP)POPdirect指令执行中,机器也自动进行两步操作:指令执行中,机器也自动进行两步操作:(1)()(direct)(SP)(2)()(SP)(SP)1例例2、设(、设(SP)=0BH,(,(0BH)=01H,(,(0AH)=23H执行执行POPDPHPOPDPL后,各单元中的内容。后,各单元中的内容。堆栈操作指令堆栈操作指令进栈指令PUSHdirect如:(SP)=60H,(A)=30H,(B)=70H时,执行PUSHAcc;(SP)+1=61HSP,(A)61HPUSHB;(SP)+1=62HSP,(B)62H结果:
30、(61H)=30H,(62H)=70H,(SP)=62H退栈指令POPdirect如:(SP)=62H,(62H)=70H,(61H)=30H时,执行POPDPH;(SP)DPH,(SP)1=61HSPPOPDPHL;(SP)DPL,(SP)1=60HSP结果:(DPTR)=7030H,(SP)=60H堆栈的存储原则:先进后出(SP)(SP+1)(SP+2)(SP+3)数据传送类指令 关于堆栈 结论:结论:1)PUSH与与POP操作过程刚好相反;操作过程刚好相反;2)进、出栈规则:进、出栈规则:先进后出,后进先出。应注意指令书写先后顺序;先进后出,后进先出。应注意指令书写先后顺序;3)可用于可
31、用于“保护现场,恢复现场保护现场,恢复现场”。【例3.1】将片内RAM30H单元与40H单元中的内容互换。方法1(直接地址传送法):MOV31H,30HMOV30H,40HMOV40H,31HSJMP$方法2(间接地址传送法):MOVR0,#40HMOVR1,#30HMOVA,R0MOVB,R1MOVR1,AMOVR0,BSJMP$方法3(字节交换传送法):MOVA,30HXCHA,40HMOV30H,ASJMP$方法4(堆栈传送法):PUSH30HPUSH40HPOP30HPOP40HSJMP$上述指令不影响任何标志位,但上述指令不影响任何标志位,但PSW的的P位除外。位除外。注意:注意:M
32、OVRn,RnMOVRi,RiMOVRn,RiMOV#data,A等等等指令是非法指令。等指令是非法指令。哇!好容易出错啊!应用举例应用举例1MOVP1,#0FEH;11111110B可以使可以使P1.0上的发光二极管点亮上的发光二极管点亮MOVP1,#0F0H;11110000B可以使可以使P1口上的上面口上的上面4个发光二个发光二极管点亮极管点亮P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.75v8段数码管显示段数码管显示P1.0aP1.1bP1.2cP1.3dP1.4eP1.5fP1.6gP1.7dp5vMOVP1,#00H;显示显示8.MOVP1,#0F8H;显示显示7
33、MOVP1,#88H;显示显示A应用举例应用举例2一个引脚的高低电平,可以通过“光电耦合器”控制继电器,从而以“弱电”控制“强电”。小结:小结:数据传送类指令有几种类型?数据传送类指令有几种类型?是否影响标志位?是否影响标志位?3.4 3.4 算术运算类指令算术运算类指令包括加、减、乘、除运算;第一操作数一般为A;一般影响标志位CY、AC、OV和P。共24条指令,分成七个小类。3.4.1加法指令加法指令一、不带进位加法指令(一、不带进位加法指令(4条)条)ADDA,Rn;(A)+(Rn)AADDA,direct;(A)+(direct)AADDA,Ri;(A)+(Ri)AADDA,#data;
34、(A)+#dataA无符号数相加时:若无符号数相加时:若C=1,说明有溢出(其值说明有溢出(其值 255 255)。)。带符号数相加时:若带符号数相加时:若OV=D7cD6c=1OV=D7cD6c=1,说明有溢出。说明有溢出。例:(A)=0C3H,(R0)=0AAH执行“ADDA,R0”的和为6DH,标志位CY=1,OV=1,AC=1。OV=C7C6对第6、第7位的进位位C7、C6异或。二、带进位加法指令(二、带进位加法指令(4条)条)ADDCA,Rn;(A)+(Rn)+(C)AADDCA,direct;(A)+(direct)+(C)AADDCA,Ri;(A)+(Ri)+(C)AADDCA,
35、#data;(A)+#data+CA 上述四条指令多用于多字节数相加。上述四条指令多用于多字节数相加。例如,设例如,设A=20H,R0=21H,C=1,执行指令执行指令ADDC,R0后,后,A=42H。三、加三、加1指令(指令(5条)条)INCA;(A)+1AINCRn;(Rn)+1RnINCdirect;(direct)+1directINCRi;(Ri)+1(Ri)INCDPTR;(DPTR)+1DPTR说明:此类指令不影响标志C、AC和OVINC A INC A ;(;(A A)(A A)+1+1 ;INC INC RnRnINC directINC directINC INC RiRi
36、INC DPTRINC DPTR例例1 1、设(、设(R0R0)=7FH=7FH;(7EH7EH)=40H=40H 执行:执行:INC R0INC R0 INC R0 INC R0 INC R0 INC R0 后后,(R0)=7FH;R0)=7FH;(7EH)=(7EH)=00H;00H;(7FH)=41H(7FH)=41H四、四、DAA;调整累加器内容为调整累加器内容为BCD码(压缩的)码(压缩的)说明:(1)此指令跟在ADD或ADDC指令之后,将A中的和调整为BCD码,并且ADD或ADDC的两个操作数是BCD码;(2)对标志的影响:若结果A99,则CY=1;不影响OV。(A30)9 9时或
37、(时或(ACAC)=1=1时,时,(A30)(A30)+6(A74)9 9或(或(C C)=1=1时,时,(A74)(A74)+6选择修正值的规则:选择修正值的规则:执行过程中,执行过程中,CPU能根据加法运算后,累加器中的值和能根据加法运算后,累加器中的值和PSW中的中的AC及及C标志位的状况自动选择一个修正值(标志位的状况自动选择一个修正值(00H、06H、60H、66H)与原运算结果相加,进行二与原运算结果相加,进行二十进制十进制调整。调整。例例2、设(、设(A)=56H为为56的压缩的的压缩的BCD码数,(码数,(R3)=67H,(CY)=1执行执行ADDCA,R3DAA结果为:结果为
38、:124注意:注意:1)DA指令只能跟在加法指令后面使用;指令只能跟在加法指令后面使用;2)调整前参与运算的两数是)调整前参与运算的两数是BCD码数;码数;3)DA指令不能与减法指令配对使用,但可以实现对指令不能与减法指令配对使用,但可以实现对A中中压缩压缩BCD数进行减一操作。数进行减一操作。例例3、设(、设(A)=30H(压缩压缩BCD码数),执行:码数),执行:ADDA,#99HDAA后,便实现了后,便实现了301=29的操作。的操作。例:A=65BCD,B=78BCD,C=0,执行下列语句ADDA,BDAA后,A=43BCD,C=1。例例4、两个、两个4位位BCD码相加,一个存放在(码
39、相加,一个存放在(31H)()(30H););另一个存放在(另一个存放在(33H)()(32H););和数拟回存在和数拟回存在(31H)()(30H)中,试编程实现之。中,试编程实现之。解:解:MOVR0,#30HMOVR1,#32HMOVA,R0ADDA,R1DAAMOVR0,AINCR1MOVA,R0ADDCA,R1DAAMOVR0,AINCR03.4.2减法指令减法指令一、带借位减法指令(一、带借位减法指令(4条)条)SUBBA,Rn;(A)-(C)-(Rn)ASUBBA,direct;(A)-(C)-(direct)ASUBBA,Ri;(A)-(C)-(Ri)ASUBBA,#data;
40、(A)-(C)-#dataA注意:减法之前先清零注意:减法之前先清零C。二、减二、减1指令(指令(4条)条)DECA;(A)-1ADECRn;(Rn)-1RnDECdirect;(direct)-1directDECRi;(Ri)-1(Ri)说明:此类指令不影响标志CY、AC和OV例:设例:设A=39H,R0=20H,(,(20H)=32H,C=1,执执行指令行指令SUBB,R0后,后,A=06H例:设(例:设(R0)=7FH,在内在内RAM中,(中,(7EH)=00H,(7FH)=40H执行执行:DECR0DECR0DECR0结果为结果为:(R0)=7EH,(,(7EH)=0FFH,(,(7
41、FH)=3FH。3.4.3乘法指令乘法指令乘法:乘法:MULAB;(;(A)(B),),积的低积的低8位在位在A中,积的中,积的;高高8位在位在B中;中;C总为总为0。说明:(1)为无符号乘法;(2)若结果的B0,则OV=1,若B=0,则OV=0;C=0。例例如如,A=30H,B=60H,执执行行MULAB后后,A=00H,B=12H。3.4.4除法指令除法指令DIVAB;(;(A)(B),),商在商在A中,余数在中,余数在B中。中。说明:(1)为无符号除法;(2)若除数B=0,则OV=1,若B0,则OV=0;C=0。例如,A=30H,B=07H,执行DIVAB后,A=06H,B=06H。算术
42、运算类指令例、试将例、试将A中的二进制数转换为中的二进制数转换为3位位BCD码,其中,百位数存放码,其中,百位数存放于于31H单元,十位数和个位数压缩后存于单元,十位数和个位数压缩后存于30H单元中。单元中。解:解:MOVB,#100DIVABMOV31H,AMOVA,#10XCHA,BDIVABSWAPAADDA,BMOV30H,A【例】试把存放在R1R2和R3R4中的两个16位数相加,结果存于R5R6中。解:参考程序如下:MOVA,R2;取第一个数的低8位ADDA,R4;两数的低8位相加MOVR6,A;保存和的低8位MOVA,R1;取第一个数的高8位ADDCA,R3;两数的高8位相加,并把
43、低8位相加时的进位位加进来MOVR5,A;把相加的高8位存入R5寄存器中SJMP$小结:算术运算类指令都有哪些类型?小结:算术运算类指令都有哪些类型?3.5逻辑运算与循环类指令逻辑运算与循环类指令包括与、或、异或、清除、求反、移位等操作。这类指包括与、或、异或、清除、求反、移位等操作。这类指令一般不影响标志位令一般不影响标志位CY、AC和和OV。共共24条指令。条指令。3.5.1逻辑逻辑“与与”指令(指令(6条)条)ANLA,Rn;(;(A)(Rn)AANLA,direct;(;(A)(direct)AANLA,Ri;(;(A)(Ri)AANLA,#data;(;(A)#dataAANLdir
44、ect,A;(;(direct)(A)directANLdirect,#data;(;(direct)#datadirect说明:说明:(1)目的操作数只能是)目的操作数只能是A或者或者direct;(2)前前4条指令仅影响标志位条指令仅影响标志位P;后两条不影响标志位。后两条不影响标志位。(3)或运算常用于使某些位置)或运算常用于使某些位置1。“与与”,“有有0即即0,全,全1为为1”00000111)1111110100000101B05H例、(例、(P1)=35H,使其高使其高4位输出位输出0,低,低4位不变。位不变。解;解;ANLP1,#0FH此做法称为此做法称为“屏蔽屏蔽”位。位。3
45、.5.2逻辑逻辑“或或”指令(指令(6条)条)ORLA,Rn;(A)(Rn)AORLA,direct;(A)(direct)AORLA,Ri;(A)(Ri)AORLA,#data;(A)#dataAORLdirect,A;(direct)(A)directORLdirect,#data;(direct)#datadirect说明:(1)目的操作数只能是A或者direct;(2)前4条指令仅影响标志位P;后两条不影响标志位。(3)或运算常用于使某些位置1。“或或”,“有有1即即1,全,全0为为0”00000110)0110110101101111B6FH例、将例、将A中的低中的低3位送入位送入P
46、1中,并且保持中,并且保持P1中高中高5位不变。位不变。ANLA,#07HANLP1,#0F8HORLP1,A;(;(P1)=P17P16P15P14P13A2A1A0这称为这称为“数位组合数位组合”。3.5.3逻辑逻辑“异或异或”指令(指令(6条)条)XRLA,Rn;(A)(Rn)AXRLA,direct;(A)(direct)AXRLA,Ri;(A)(Ri)AXRLA,#data;(A)#dataAXRLdirect,A;(direct)(A)directXRLdirect,#data;(direct)#datadirect说明:(1)目的操作数只能是A或者direct;(2)前4条指令仅
47、影响标志位P;后两条不影响标志位。(3)用1异或使对应位取反,用0异或使对应位不变,异或运算常用于使某些位取反。“异或异或”,“相异为相异为1,相同为,相同为0”00000110)0110110101101011B6BH例例3、设(、设(P1)=0B4H=10110100B,执行:执行:XRLP1,#00110001B结果按结果按#00110001取反,即:取反,即:(P1)=10000101B=85H这称为这称为“指定位取反指定位取反”。逻辑操作类指令操作图逻辑操作类指令操作图例例(A)=01B,表示随机状态,为表示随机状态,为1或或0,执行下述,执行下述一组指令执行后一组指令执行后A的值如
48、何的值如何?XRLA,#0C0H;将累加器将累加器A的内容的内容D7、D6取反取反01ORLA,#03H;将累加器将累加器A的内容的内容D1、D0置置111010000ANLA,#0E7H;将累加器将累加器A的内容的内容D4、D3清清01000000011101111100111100011解解:执行上述指令后,(:执行上述指令后,(A)=100011B。习题习题1:如何将累加器:如何将累加器A中的数据高中的数据高4位清位清0,低位不变?,低位不变?习题习题2:如何将寄存器:如何将寄存器R2中的数据奇数位取反,偶数位不变?中的数据奇数位取反,偶数位不变?3.5.4累加器累加器A清清0与取反指令
49、(与取反指令(2条)条)1、累加器、累加器A清清0指令指令CLRA;0A说明:只影响标志位P。2、累加器累加器A取反指令取反指令(按位取反)CPLA;(/A)A,相当于0FFH-AA说明:不影响标志位。如:(A)=56HCPLA;结果为0A9H3.5.5移位指令(移位指令(4条)条)1、累加器、累加器A循环左移循环左移RLA;2、累加器累加器A循环右移循环右移RRA;3、累加器累加器A带进位位循环左移带进位位循环左移RLCA;4、累加器累加器A带进位位循环右移带进位位循环右移RRCA;说明:(1)各条指令每次只移动一位;(2)左移一位相当于乘以2;右移一位相当于除以2;(3)带进位位移动的影响
50、标志位CY和P。例例(A)6CH=01101100BRLA;(A)=11011000B=0D8H(A)6CH=01101100B,(C)=1RLCA;(A)=11011001B=0D9H例例(A)6CH=01101100BRRA;(A)=00110110B=36H(A)6CH=01101100B,(C)=1RRCA;(A)=10110110B=0B6H逻辑运算类指令图解逻辑运算类指令图解 在上述在上述ANL、ORL、XRL操作中,用于端口操作时,无论操作中,用于端口操作时,无论P0P3是第一,还是第二操作数,都遵循是第一,还是第二操作数,都遵循“读读修改修改写写”端口锁存器的操作。端口锁存器的