资源预览内容
第1页 / 共53页
第2页 / 共53页
第3页 / 共53页
第4页 / 共53页
第5页 / 共53页
第6页 / 共53页
第7页 / 共53页
第8页 / 共53页
第9页 / 共53页
第10页 / 共53页
亲,该文档总共53页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术13. 3. 汇编语言程序设计汇编语言程序设计 3.1 3.1 汇编语言源程序设计与汇编汇编语言源程序设计与汇编 3.2 3.2 程序计数器和程序运行程序计数器和程序运行 3.3 3.3 顺序程序设计顺序程序设计 3.4 3.4 分支程序设计分支程序设计 3.5 3.5 循环程序设计循环程序设计 3.6 3.6 子程序设计子程序设计 3.7 3.7 常用程序设计常用程序设计 Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术23. 3. 汇编语言程序设计汇编语言程序设计3.1 汇编语言源程序设计和汇编汇编语言源程序设计和汇编3.1.1 指令和助记符指令和助记符指令指令 = = 操作码操作码 + + 操作数操作数例如8051做10加20的加法,在程序存储器中需要预先存储程序存储器中需要预先存储2条机器码指令条机器码指令 0111 0100 ;指令;指令1操作码,把操作码,把10送入累加器送入累加器A 0000 1010 ;指令;指令1操作数,操作数,10=00001010B=0AH0010 0100 ;指令;指令2操作码,累加器操作码,累加器A内容加内容加20,结果存于,结果存于A 0001 0100 ;指令;指令2操作数,操作数,20=00010100B=14HMOV A,0AH ;操作码助记符;操作码助记符MOV,操作数助记符累加器,操作数助记符累加器A和立即数和立即数10ADD A,14H ;操作码助记符;操作码助记符ADD,操作数助记符累加器,操作数助记符累加器A和立即数和立即数20机器语言汇编语言手工汇编机器汇编Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术33. 3. 汇编语言程序设计汇编语言程序设计1 1、指令属性、指令属性时间属性时间属性:指令周期,一条指令执行需要一定的时间。:指令周期,一条指令执行需要一定的时间。1机器周期指令、机器周期指令、2机器周期指令和机器周期指令和4机器周期指令机器周期指令空间属性空间属性:在:在ROM存放占用的单元数,即指令的字节数。存放占用的单元数,即指令的字节数。1字节指令、字节指令、2字节指令和字节指令和3字节指令字节指令功能属性功能属性:指令完成的功能。:指令完成的功能。算术运算类指令、逻辑运算类指令、移位类指令等算术运算类指令、逻辑运算类指令、移位类指令等2 2、指令的字节数(空间属性)、指令的字节数(空间属性) 单字节指令单字节指令 双字节指令双字节指令 三字节指令三字节指令操作码操作码1字节,无操作数或者字节,无操作数或者操作数是寄存器寻址操作数是寄存器寻址 或或 操作码操作码1字节,操作数字节,操作数1字节。字节。操作码操作码1字节,操作数字节,操作数2字节。字节。Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术43. 3. 汇编语言程序设计汇编语言程序设计3.1.2 伪指令伪指令 伪指令虽然具有类似指令的形式,但不是真正的指令,伪指令虽然具有类似指令的形式,但不是真正的指令,不会产生任何可供机器直接不会产生任何可供机器直接执行的机器码执行的机器码。伪指令用来对汇编过程进行控制,是编程员发给汇编程序的命令,也称。伪指令用来对汇编过程进行控制,是编程员发给汇编程序的命令,也称为汇编命令或汇编程序控制命令。为汇编命令或汇编程序控制命令。 1 1、起始汇编伪指令、起始汇编伪指令ORGORG(OriginOrigin) ORG 16位地址位地址用来规定源程序或者数据块在程序存储器的起始地址。注意地址从小到大排列,不同的用来规定源程序或者数据块在程序存储器的起始地址。注意地址从小到大排列,不同的程序段不可彼此覆盖。程序段不可彼此覆盖。2 2、结束汇编伪指令、结束汇编伪指令ENDEND END 表示源程序到此结束。在一个源程序中只允许出现一条表示源程序到此结束。在一个源程序中只允许出现一条END语句,而且必须安排在源程语句,而且必须安排在源程序的末尾,汇编器对序的末尾,汇编器对END语句后的所有语句都不进行汇编。语句后的所有语句都不进行汇编。3 3、赋值伪指令、赋值伪指令EQUEQU(EquateEquate) 字符名称字符名称EQU赋值项赋值项其中赋值项可以是常数、地址、标号或者是表达式,以其中赋值项可以是常数、地址、标号或者是表达式,以8位或位或16位二进制数存放。汇编程位二进制数存放。汇编程序自动把序自动把EQU右边的赋值项赋给左边的字符名称。一旦字符名称被赋值它就可以在程序右边的赋值项赋给左边的字符名称。一旦字符名称被赋值它就可以在程序中作为数据或地址来多次使用。必须先赋值再使用,故该语句常放在程序开头。中作为数据或地址来多次使用。必须先赋值再使用,故该语句常放在程序开头。 Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术53. 3. 汇编语言程序设计汇编语言程序设计3.1.2 伪指令伪指令4 4、位地址赋值伪指令、位地址赋值伪指令BITBIT 字符名称字符名称 BIT 位地址位地址把把BIT右边的位地址或位名称赋给左边的字符名称。因此右边的位地址或位名称赋给左边的字符名称。因此BIT语句定义的字符名称是此位语句定义的字符名称是此位地址的别称。地址的别称。5 5、定义空间伪指令、定义空间伪指令DSDS(Define StorageDefine Storage) 标号:标号: DS 表达式表达式DS从指定的地址单元开始,保留由表达式指定的若干字节空间作为备用空间,空间大小从指定的地址单元开始,保留由表达式指定的若干字节空间作为备用空间,空间大小由由DS语句中表达式决定。同语句中表达式决定。同DB一样,一样,DS伪指令只能用于程序存储器。伪指令只能用于程序存储器。 ORG1000HDS 08H;从;从1000H开始保留开始保留8字节的存储空间备用字节的存储空间备用DB 71H,13H,11H ;数据表从;数据表从1008H开始存放开始存放经汇编后从经汇编后从1000H单元开始保留单元开始保留8个字节的存储单元,而从个字节的存储单元,而从1008H单元开始连续单元开始连续存放存放71H、13H和和11H等数据。等数据。Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术63. 3. 汇编语言程序设计汇编语言程序设计3.1.3 汇编语句格式汇编语句格式标号标号:操作码操作码 操作数操作数1,操作数,操作数2 ,操作数,操作数3 ;注释;注释 1 1、标号标号标号是标号是语句地址语句地址的标志符号,它由的标志符号,它由18个个ASCII字符组成,可以是字母、数字和一些特定字符组成,可以是字母、数字和一些特定字符,字符,英文字母开头,冒号结束英文字母开头,冒号结束。为了避免把标号中字符当作指令来汇编,用户在编写。为了避免把标号中字符当作指令来汇编,用户在编写自己的程序时绝对不应采用指令、寄存器名以及伪指令等作为语句的标号,而且同一标自己的程序时绝对不应采用指令、寄存器名以及伪指令等作为语句的标号,而且同一标号在一个程序中只能定义一次。对每一条语句而言,标号不是必选的,标号的有无取决号在一个程序中只能定义一次。对每一条语句而言,标号不是必选的,标号的有无取决于程序中有无其它语句访问该语句,一般用于转移程序的首地址。于程序中有无其它语句访问该语句,一般用于转移程序的首地址。2 2、操作码、操作码操作码是汇编指令格式中唯一不能空缺的部分,可分为指令性语句和指示性语句两类。操作码是汇编指令格式中唯一不能空缺的部分,可分为指令性语句和指示性语句两类。(1)指令性语句)指令性语句指令性语句是指采用指令助记符构成的汇编语言语句,指令性语句是指采用指令助记符构成的汇编语言语句,8051单片机中的指令性语句是指单片机中的指令性语句是指111条指令的助记符语句。因此,指令性语句是汇编语言语句的主体。每条指令性语句都条指令的助记符语句。因此,指令性语句是汇编语言语句的主体。每条指令性语句都有与之对应的机器码供有与之对应的机器码供CPU识别和执行。如前述及的识别和执行。如前述及的MOV、ADD、SETB、CLR等。等。(2)指示性语句)指示性语句指示性语句又称为伪指令语句,不会产生任何可供指示性语句又称为伪指令语句,不会产生任何可供CPU识别和执行的机器码,只是用来识别和执行的机器码,只是用来对汇编过程进行某种控制。对汇编过程进行某种控制。Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术73. 3. 汇编语言程序设计汇编语言程序设计3.1.3 汇编语句格式汇编语句格式标号:操作码标号:操作码 操作数操作数1,操作数,操作数2 ,操作数,操作数3 ;注释;注释 3 3、操作数、操作数 指令执行时涉及到的数据或者数据的地址。它与操作码以空格分界,两操作数或三指令执行时涉及到的数据或者数据的地址。它与操作码以空格分界,两操作数或三操作数时以逗号分开,可以是十进制数、二进制数(操作数时以逗号分开,可以是十进制数、二进制数(B)、十六制数()、十六制数(H)、)、ASCII码(码( )、寄存器名、存储器地址、位地址以及变量标识符等。)、寄存器名、存储器地址、位地址以及变量标识符等。16位地址位地址ROM:A+DPTR,A+PC 16位地址片外位地址片外RAM: DPTR8位地址片内位地址片内RAM: direct(8位字节地址),位字节地址), Ri寄存器寄存器(8位位):A, Rn, AB数值:数值:#data, #data16 只能作为源操作数只能作为源操作数寄存器寄存器(16位位): DPTR位操作位操作(1位位): C(寄存器寻址寄存器寻址),bit(8位位地址)位位地址)其他:其他:addr16 , addr11, rel(地址相对偏移量)(地址相对偏移量)4 4、注释、注释 对语句在程序中完成的功能加以解释,对语句在程序中完成的功能加以解释, “;”分号开头,不会被汇编程序理解为指令分号开头,不会被汇编程序理解为指令Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术83. 3. 汇编语言程序设计汇编语言程序设计数据传送类数据传送类片内RAM与寄存器传送操作特点:数据的特点:数据的复制复制操作,操作,目的与源看齐且等宽目的与源看齐且等宽。MOV 目的操作数目的操作数,源操作数源操作数大部分指令操作数在大部分指令操作数在片内片内RAM和寄存器和寄存器,字节字节操作。操作。访问片内访问片内RAM:directRi寄存器:寄存器:ARn立即数:立即数: #dataARndirectRiARndirectRi#data1、立即寻址不能做目的操作数、立即寻址不能做目的操作数2、工作寄存器不能在两边同时出现、工作寄存器不能在两边同时出现Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术93. 3. 汇编语言程序设计汇编语言程序设计算术运算类算术运算类算术运算指令按照算术运算指令按照8 8位位2 2进制运算法则运算,程序员负责按照程序的要求负责解释。进制运算法则运算,程序员负责按照程序的要求负责解释。注意:注意:运算对状态标志位的影响。运算对状态标志位的影响。PSWPSW的的CYCY(C C)、)、ACAC、OVOV单字节加法单字节加法 ADD A ,多字节加法(多字节加法(ADD with Carry) ADDC A ,RndirectRi#data多字节减法(多字节减法( Subtraction with Borrow 带借位减法带借位减法 ) SUBB A ,BCD码加法码加法 ( Decimal Adjust 十进制调整指令)十进制调整指令)DA A;硬件对BCD码加法结果修正,过9补6注意:此指令使用时紧跟在ADD和ADDC指令后,对BCD码加法结果进行自动修正自动修正CLR CSUBB A ,单字节减法单字节减法Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术103. 3. 汇编语言程序设计汇编语言程序设计自增自减自增自减自增自增 Increment with constant 1 实现操作数自身内容的加实现操作数自身内容的加1或减或减1操作,操作,不影响标志位状态。不影响标志位状态。自减自减 Decrement with constant 1 INC A RndirectRiDPTRDEC A RndirectRi注意:自增自减操作常用于地址变量(指针)内容的更新,数据指针只有自增操作。注意:自增自减操作常用于地址变量(指针)内容的更新,数据指针只有自增操作。例例3-4 多字节加法程序。设被加数存放在:多字节加法程序。设被加数存放在:40H(高字节),(高字节),41H,42H(低字节)。加(低字节)。加数存放在:数存放在:43H(高字节),(高字节),44H,45H(低字节)。运算结果仍存在被加数单元中(低字节)。运算结果仍存在被加数单元中片内RAM双指针R0,R1片外RAM单指针DPTR变址AEvaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术113. 3. 汇编语言程序设计汇编语言程序设计例例3-4 多字节加法程序。设被加数存放在:多字节加法程序。设被加数存放在:40H(高字节),(高字节),41H,42H(低字节)。加(低字节)。加数存放在:数存放在:43H(高字节),(高字节),44H,45H(低字节)。运算结果仍存在被加数单元(低字节)。运算结果仍存在被加数单元 ORG 0030HMOVR0,#42H;地址指针;地址指针0指向被加数指向被加数MOVR1,#45H;地址指针;地址指针1指向加数指向加数MOVA,R0;取被加数低字节;取被加数低字节ADDA,R1;与加数低字节相加;与加数低字节相加MOVR0,A;结果回存入被加数单元;结果回存入被加数单元DECR0 ;地址指针;地址指针0指向被加数中字节指向被加数中字节DECR1;地址指针;地址指针1指向加数中字节指向加数中字节MOVA,R0;取被加数中字节;取被加数中字节ADDCA,R1;与加数中字节及进位位相加;与加数中字节及进位位相加MOVR0,A;结果回存入被加数单元;结果回存入被加数单元DECR0;地址指针;地址指针0指向被加数高字节指向被加数高字节DECR1;地址指针;地址指针1指向加数高字节指向加数高字节MOVA,R0;取被加数高字节;取被加数高字节ADDCA,R1;与加数高字节及进位位相加;与加数高字节及进位位相加MOVR0,A;结果回存入被加数单元;结果回存入被加数单元 END Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术123. 3. 汇编语言程序设计汇编语言程序设计累加器累加器A清零清零 Clear accumulatorCLR A累加器累加器A按位求反按位求反 Complement accumulatorCPL A例例3-2 、设有、设有16位二进制数存放在位二进制数存放在R0、R1中,其中中,其中R0存放高存放高8位,位,R1存放低存放低8位。编位。编程实现其求反再加一运算,结果送原址。程实现其求反再加一运算,结果送原址。 ORG 0030HMOVA,R1;取低字节入;取低字节入ACPLA ;对低字节求反;对低字节求反ADDA,01H;加;加1MOVR1,A;存结果到原址;存结果到原址MOVA,R0;取高字节入;取高字节入ACPL A ;对高字节求反;对高字节求反ADDCA,00H;加可能产生的低字节对高字节的进位;加可能产生的低字节对高字节的进位MOVR0,A;存结果到原址;存结果到原址SJMP$;原地踏步;原地踏步 ENDEvaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术133. 3. 汇编语言程序设计汇编语言程序设计 累加器累加器A循环左移循环左移 Rotate LeftRL Aa7 a6 a5 a4 a3 a2 a1 a0a6 a5 a4 a3 a2 a1 a0 a7 A8位的循环移位器。位的循环移位器。如果如果a7=0左移一位相当于原数乘左移一位相当于原数乘2SWAP A累加器累加器A循环右移循环右移 Rotate RightRR A8位的循环移位器。位的循环移位器。a7 a6 a5 a4 a3 a2 a1 a0a0 a7 a6 a5 a4 a3 a2 a1 A累加器累加器A高低高低4位互换位互换 SWAP如果如果a0=0右移一位相当于原数除以右移一位相当于原数除以2Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术143. 3. 汇编语言程序设计汇编语言程序设计累加器累加器A带进位位的循环左移带进位位的循环左移 Rotate Left through CarryRLC Aa7 a6 a5 a4 a3 a2 a1 a0a6 a5 a4 a3 a2 a1 a0 CACa7CY9位的循环移位器。位的循环移位器。累加器累加器A带进位位的循环右移带进位位的循环右移 Rotate Right through CarryRRC A9位的循环移位器。位的循环移位器。a7 a6 a5 a4 a3 a2 a1 a0C a7 a6 a5 a4 a3 a2 a1 ACa0CYEvaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术153. 3. 汇编语言程序设计汇编语言程序设计例、片内例、片内RAM40H、41H单元存放着单元存放着16个单字节个单字节AD转换值的和,求其算术平均值。转换值的和,求其算术平均值。(40H和的高字节,和的高字节,41H和的低字节,不考虑余数)和的低字节,不考虑余数)CLR CMOV A,40HRRC AMOV 40H,AMOV A,41HRRC AMOV 41H,AEvaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术163. 3. 汇编语言程序设计汇编语言程序设计逻辑运算类逻辑运算类按位与按位与AND Logical : ANL A ,RndirectRi#data“遇遇1 1保持,遇保持,遇0 0复位复位”。常用于某些特定位的常用于某些特定位的强迫复位强迫复位(与(与“0”“0”与),与),其余位状态不改变(与其余位状态不改变(与“1”“1”与)。与)。按位或按位或OR Logical :ORL A ,“遇遇0 0保持,遇保持,遇1 1置位置位”。常用于某些特定位的常用于某些特定位的强迫置位强迫置位(与(与“1”“1”或),或),其余位状态不改变(与其余位状态不改变(与“0”“0”或)。或)。按位异或按位异或eXclusive-OR Logical :XRL A ,“相同为相同为0 0,相异为,相异为1 1”。常用于某些特定位的常用于某些特定位的求反求反(与(与“1”“1”异或),异或),其位状态不改变(与其位状态不改变(与“0”“0”异或)。异或)。Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术173. 3. 汇编语言程序设计汇编语言程序设计例、片内例、片内RAM40H、41H单元存放着单元存放着16个单字节个单字节AD转换值的和,求其算术平均值。转换值的和,求其算术平均值。(40H和的高字节,和的高字节,41H和的低字节,不考虑余数)和的低字节,不考虑余数)MOV A,40HSWAP AMOV R2,A ;暂存备拆分;暂存备拆分 ANL A,#0FH ;高四位清零;高四位清零MOV 40H,AMOV A,R2 ANL A,#0F0HMOV R2,A ;暂存暂存MOV A,41HSWAP AANL A,#0FHORL A,R2MOV 41H,A拆合;A;A;AEvaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术3. 3. 汇编语言程序设计汇编语言程序设计3.2程序计数器PC和程序运行3.2.1程序计数器PC(ProgramCounter)PC(ProgramCounter):程序计数器。16位的寄存器,存放的是ROM地址起始地址:0000H第一条指令地址形成下一条要执行指令的地址:自动加1:取指令的1个字节加1新地址直接替换:转移类指令从程序存储器某地址取指令分析指令(译码)执行指令形成下一条要执行指令的地址起始地址Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术3. 3. 汇编语言程序设计汇编语言程序设计3.2.2简单程序运行PC=0100HPC=0102H取指7A23译码执行PC=0104HPC=0104H取指7B24译码执行PC=0106HPC=0106H取指7C25译码执行PC=0108HPC=0108H取指7D26译码执行PC=010AHPC=010AH取指2A译码执行PC=010BHPC=010BH取指2B译码执行PC=010CHPC=010CH取指2C译码执行PC=010DHPC=010DH取指2D译码执行PC=010EHPC自动加1后形成的值称PC当前值能保证按照指令排列顺序执行程序取指7400译码执行PC=0102H0100H0102H0104H0106H0108H010AH010BH010CH010DHMOV A, #00HMOV R2, #23HMOV R3, #24HMOV R4, #25HMOV R5, #26HADD A, R2ADD A, R3ADD A, R4ADD A, R574 007A 237B 247C 257D 262A2B2C2DORG 0100HENDMAIN:标号是语句地址的标志符号010EHEvaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术3. 3. 汇编语言程序设计汇编语言程序设计3.3顺序程序设计顺序程序的特点是程序执行时,每一条指令都被执行一次(有别于分支程序)且仅一次(有别于循环程序)。计算机在执行这类程序时只需按照指令排列的先后顺序依次执行,中间不会产生任何分支,故又称为无分支程序或简单程序(不含有转移指令)。例3-3在实际压力测量系统中通过A/D转换器得到8位无符号二进制数测量值存于累加器A中。把A中的二进制数测量值转换为3位BCD码,并以压缩BCD码形式存放在地址40H、41H单元中。解题思路:8位二进制数3位BCD码例如A=11110101B转换450241H40H十个0百41H40H求百位数求十位数求个位数除以100得到的商DIVAB余数除以10得到的商除以10得到的余数DIVAB0百0十0个合成一字节十00个SWAPAORLA,十个Binary Coded DecimalEvaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术3. 3. 汇编语言程序设计汇编语言程序设计ORG0030H;百位数MOVB,100;除数100送BDIVABMOV40H,A;十位数和个位数MOVA,B;第一次除法余数;做第二次除法被除数MOVB,#10 ;除数10送B例3-3在实际压力测量系统中,通过A/D转换器得到8位二进制数测量值,存于A中。利用除法指令把累加器A中的二进制数测量值转换为3位BCD码,并以压缩BCD码形式存放在地址40H、41H单元中。1111 01010110 01000010 11010000 00100000 00100010 110100001010Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术3. 3. 汇编语言程序设计汇编语言程序设计0100 01010100 0101ORG0030H;百位数MOVB,100;除数100送BDIVABMOV40H,A;十位数和个位数MOVA,B;第一次除法余数;做第二次除法被除数MOVB,#10 ;除数10送BDIVAB;合SWAPAORLA,B;组成压缩BCD码MOV41H,AEND例3-3在实际压力测量系统中,通过A/D转换器得到8位二进制数测量值,存于A中。利用除法指令把累加器A中的二进制数测量值转换为3位BCD码,并以压缩BCD码形式存放在地址40H、41H单元中。0010 11010000 10100000 00100000 01000000 01010100 0000Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术233. 3. 汇编语言程序设计汇编语言程序设计3.3 顺序程序设计顺序程序设计例3-3 在实际压力测量系统中,通过A/D转换器得到8位二进制数测量值,存于A中。利用除法指令把累加器A中的二进制数测量值转换为3位BCD码,并以压缩BCD码形式存放在地址M1、M2单元中。赋值伪指令赋值伪指令EQUEQU(EquateEquate) 字符名称字符名称EQUEQU赋值项赋值项 其中赋值项可以是常数、地址、标号或者是表达式,以其中赋值项可以是常数、地址、标号或者是表达式,以8 8位或位或1616位二进制数存放。汇位二进制数存放。汇编程序自动把编程序自动把EQUEQU右边的赋值项赋给左边的字符名称。一旦字符名称被赋值它就可以在程右边的赋值项赋给左边的字符名称。一旦字符名称被赋值它就可以在程序中作为数据或地址来多次使用。必须先赋值再使用,故该语句常放在程序开头。序中作为数据或地址来多次使用。必须先赋值再使用,故该语句常放在程序开头。 BUFFER EQU 30HMOV A,#BUFFERMOV B,BUFFERMOV A,#30H;BUFFER做立即数使用做立即数使用MOV B,30H;BUFFER做地址使用做地址使用;先定义;先定义Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术243. 3. 汇编语言程序设计汇编语言程序设计M1 EQU 30H ;赋值伪指令,;赋值伪指令,M1=30HM2 EQU 31H ORG 0030HMOVB,64H;除数;除数100送送BDIVAB;得;得BCD百位数于百位数于AMOVM1,A;BCD百位数存于百位数存于M1中,中,M1作为地址使用作为地址使用MOVA,0AH;取除数;取除数10XCHA,B;第一次余数与第二次除数交换;第一次余数与第二次除数交换DIVAB ;得存;得存A的的BCD十位数和存十位数和存B的的BCD个位数个位数SWAPA;十位数存于;十位数存于A的高的高4位位ADDA,B;组成压缩;组成压缩BCD码码MOVM2,A;压缩;压缩BCD码存码存M2 END Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术3. 3. 汇编语言程序设计汇编语言程序设计3.2.2简单程序运行PC=0100HPC=0102H取指7A23译码执行PC=0104HPC=0104H取指7B24译码执行PC=0106HPC=0106H取指7C25译码执行PC=0108HPC=0108H取指7D26译码执行PC=010AHPC=010AH取指2A译码执行PC=010BHPC=010BH取指2B译码执行PC=010CHPC=010CH取指2C译码执行PC=010DHPC=010DH取指2D译码执行PC=010EHPC自动加1后形成的值称PC当前值能保证按照指令排列顺序执行程序取指7400译码执行PC=0102H0100H0102H0104H0106H0108H010AH010BH010CH010DHMOV A, #00HMOV R2, #23HMOV R3, #24HMOV R4, #25HMOV R5, #26HADD A, R2ADD A, R3ADD A, R4ADD A, R574 007A 237B 247C 257D 262A2B2C2DORG 0100HENDMAIN:010EH0000HEvaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术263. 3. 汇编语言程序设计汇编语言程序设计3.4 分支程序设计分支程序设计程序要求改变执行顺序,特点是含有控制转移类指令(转移目的地址替换程序要求改变执行顺序,特点是含有控制转移类指令(转移目的地址替换PCPC当前值)当前值)I.I.无条件转移指令无条件转移指令1 1、长转移指令、长转移指令LJMPLJMP: Long Jump Long JumpLJMP addr16;PCPC+3 PC当前值PCaddr16 程序实现转移转移范围:任意转移范围:任意1616位地址,即位地址,即64KB64KB空间。空间。ORG 0030HMAIN:ORG 0000HLJMP 0030HORG 0000HLJMP MAIN常用标号代替常用标号代替addr16addr16,程序员只需在要跳转到的,程序员只需在要跳转到的汇编语句前加标号,由汇编器负责计算。汇编语句前加标号,由汇编器负责计算。LJMP LJMP Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术273. 3. 汇编语言程序设计汇编语言程序设计3.2.2 3.2.2 简单程序运行简单程序运行1、PC=0000H 取指取指020100译码执行译码执行 PC=0003H 目的地址目的地址0100H装入装入PC替换掉当前值替换掉当前值,程序转移,程序转移2、PC=0100H 取指取指7400译码执行译码执行 PC=0102H3、PC=0102H 取指取指7A23译码执行译码执行 PC=0104H4、PC=0104H 取指取指7B24译码执行译码执行 PC=0106H5、PC=0106H 取指取指7C25译码执行译码执行 PC=0108H6、PC=0108H 取指取指7D26译码执行译码执行 PC=010AH7、PC=010AH 取指取指2A译码执行译码执行 PC=010BH8、PC=010BH 取指取指2B译码执行译码执行 PC=010CH9、PC=010CH 取指取指2C译码执行译码执行 PC=010DH10、PC=010DH 取指取指2D译码执行译码执行 PC=010EHLJMP MAINMAIN = 0100H02 01 00Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术283. 3. 汇编语言程序设计汇编语言程序设计3.4 分支程序设计分支程序设计I.I.无条件转移指令无条件转移指令2、绝对转移指令、绝对转移指令AJMP: Absolute JumpAJMP addr11机器码机器码;PCPC+2 PC当前值当前值PCPC当前值高五位当前值高五位 + addr11或或AJMP 转移范围:转移范围:高五位不变的任意高五位不变的任意1111位地址,位地址,按照地址的高五位分成按照地址的高五位分成3232页(每页页(每页2KB2KB),),即即2KB2KB空间。其相当于把空间。其相当于把64KB64KB的的ROMROM空间空间只能在当前页中跳转。只能在当前页中跳转。Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术293. 3. 汇编语言程序设计汇编语言程序设计3.2.2 3.2.2 简单程序运行简单程序运行1、PC=0000H 取指取指2100译码执行译码执行 PC=0002H 目的地址目的地址=0000 0001 0000 0000B=PC,转移,转移2、PC=0100H 取指取指7400译码执行译码执行 PC=0102H3、PC=0102H 取指取指7A23译码执行译码执行 PC=0104H4、PC=0104H 取指取指7B24译码执行译码执行 PC=0106H5、PC=0106H 取指取指7C25译码执行译码执行 PC=0108H6、PC=0108H 取指取指7D26译码执行译码执行 PC=010AH7、PC=010AH 取指取指2A译码执行译码执行 PC=010BH8、PC=010BH 取指取指2B译码执行译码执行 PC=010CH9、PC=010CH 取指取指2C译码执行译码执行 PC=010DH10、PC=010DH 取指取指2D译码执行译码执行 PC=010EH11、PC=010EH 取指取指80FE译码执行译码执行 PC=0110H 目的地址目的地址=0110H + 0FEH = 010E H,转移,转移Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术303. 3. 汇编语言程序设计汇编语言程序设计3.4 分支程序设计分支程序设计3.4.1 3.4.1 无条件转移指令无条件转移指令3、短转移指令和相对寻址方式、短转移指令和相对寻址方式SJMP: Short JumpSJMP rel或或SJMP 机器码机器码PCPC+2 ,PC当前值当前值PCPC当前值当前值+ rel转移范围:转移范围:转移目的地址转移目的地址PCPC当前值当前值+ rel+ relrelrel是是8 8位符号数(补码),因此转移范围位符号数(补码),因此转移范围(PC(PC当前值当前值128)128)(PC(PC当前值当前值+127)+127)relrel 转移目的地址转移目的地址PCPC当前值当前值 补补 = = 转移目的地址转移目的地址(PC+(PC+指令字节数指令字节数)补补 PCPC是转移指令首字节地址是转移指令首字节地址;80rel rel80rel rel是是8 8位符号数(补码位符号数(补码) )相对寻址方式相对寻址方式机器汇编只需在指令写出要转移到语句的标号,由汇编器自动计算相对偏移量。机器汇编只需在指令写出要转移到语句的标号,由汇编器自动计算相对偏移量。原地踏转指令原地踏转指令 SJMP $原地踏转指令一般用于程序结束处,实现原地踏步效果,原地踏转指令一般用于程序结束处,实现原地踏步效果,原地踏转指令原地踏转指令relrel计算:计算: relrel$($+2)($+2)补补 22补补0FEH0FEH$ $表示所在指令的表示所在指令的ROMROM地址。地址。HERE:SJMP HEREEvaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术313. 3. 汇编语言程序设计汇编语言程序设计 这类指令在执行过程中需要判断某种条件是否满足而决定要不要转移的指令。若这类指令在执行过程中需要判断某种条件是否满足而决定要不要转移的指令。若满足条件就转移,否则程序顺序执行。这类指令无一例外的都是相对寻址方式。满足条件就转移,否则程序顺序执行。这类指令无一例外的都是相对寻址方式。3.4.2 3.4.2 条件转移指令条件转移指令1 1、累加器、累加器A A状态转移指令状态转移指令JZ JNZ JZJZ: J Jump if A is ump if A is Z ZeroeroJNZJNZ: J Jump if A is ump if A is N Not ot Z Zeroero2 2、累加位、累加位C C状态转移指令状态转移指令 JCJC: J Jump if ump if C C is set is setJNCJNC: J Jump if ump if C C is is N Not setot setJC JNC Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术323. 3. 汇编语言程序设计汇编语言程序设计例、编程比较例、编程比较50H和和51H单元内容,相等单元内容,相等F0(PSW.5)0,否则,否则F01.分析:可以使用异或指令或者带借位减法指令;通过判断运算结果分析:可以使用异或指令或者带借位减法指令;通过判断运算结果A是否为零来是否为零来判断两个数是否相等。判断两个数是否相等。CLR F0 ;相等处理;相等处理SETB F0 ;不相等处理;不相等处理ORG 0030HMOV A, 51HXRL A,50H ;异或运算;异或运算START:JNZ L0 ;不相等转移去标号;不相等转移去标号L0处处ORG 0000HLJMP START;if A!=0,即两数不相等,即两数不相等SJMP $SJMP $L0:SETB F0CLR F0ORG 0030HMOV A, 51HXRL A,50HSTART:JZ L0ORG 0000HLJMP START;if A=0,即两数相等,即两数相等SJMP $;else,两数不相等,两数不相等SJMP $L0:;取;取51H单元内容单元内容ENDEND;else, 两数相等两数相等Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术333. 3. 汇编语言程序设计汇编语言程序设计3.4.2 3.4.2 条件转移指令条件转移指令3 3、bitbit位状态转移指令位状态转移指令JBJB:J Jump if ump if B Bit is set it is set JNBJNB:J Jump if ump if B Bit is it is N Not set ot set JBCJBC:J Jump if ump if B Bit is set and it is set and C Clear bit lear bit JB bit ,JNB bit ,JBC bit ,4 4、比较不等转移指令、比较不等转移指令 CJNECJNE:Compare and Jump if is not EqualCompare and Jump if is not Equal CJNE A ,#data,CJNE Rn ,#data,CJNE Ri ,#data,CJNE A ,direct, Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术343. 3. 汇编语言程序设计汇编语言程序设计例例3-5 3-5 判断判断2 2个个1616位无符号数位无符号数A A、B B的大小。的大小。A A存放在片内存放在片内RAMRAM的的40H40H、41H41H单元,单元,B B存放在存放在50H50H、51H51H单元中。当单元中。当ABAB时,将内部时,将内部RAMRAM的的42H42H单元内容清单元内容清0 0;否则,将该单元内容置;否则,将该单元内容置1 1。试编写实现此功能的程序。试编写实现此功能的程序。 ORG0030H MAIN:MOV R0,00H ;建立;建立AB标志标志 MOV A,40H ;取;取A高字节高字节 CJNE A,50H,LOOP2 ;与;与B高字节比较高字节比较 ; 若若AB,转移至,转移至LOOP2 MOV A,41H ;取;取A低字节低字节 CJNE A,51H,LOOP2 ;与;与B低字节比较低字节比较 ;若;若AB,转移至,转移至LOOP2 SJMP LOOP3 ;若;若A=B,转移至,转移至LOOP3LOOP2:JNC LOOP4 ;若;若AB,转移至,转移至LOOP4LOOP3:MOV R0,0FFH ;建立;建立AB标志标志LOOP4:MOV 42H,R0 ;存标志;存标志 SJMP $ ENDEvaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术353. 3. 汇编语言程序设计汇编语言程序设计3.5 循环程序设计循环程序设计特殊的分支结构,含有重复执行多遍的指令。特殊的分支结构,含有重复执行多遍的指令。 在一个循环程序结构包含在一个循环程序结构包含4 4个部分:个部分:循环变量设置循环变量设置。在循环开始时,往往需要定义一个循环变量(例如循环次数计数。在循环开始时,往往需要定义一个循环变量(例如循环次数计数器,地址指针等),并且给它设置一个初始值。器,地址指针等),并且给它设置一个初始值。循环体循环体。要求重复执行的程序段,即循环程序的主体部分。要求重复执行的程序段,即循环程序的主体部分。循环变量修改循环变量修改。修改循环变量的值,为下一次循环准备条件。修改循环变量的值,为下一次循环准备条件。循环控制循环控制。根据循环结束的条件,判断是否跳出循环。根据循环结束的条件,判断是否跳出循环。Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术363. 3. 汇编语言程序设计汇编语言程序设计3.5 循环程序设计循环程序设计计数控制循环(循环次数已知),常用先执行后判断结构。计数控制循环(循环次数已知),常用先执行后判断结构。减一非零转移指令减一非零转移指令DJNZ DJNZ : : D Decrement and ecrement and J Jump if is ump if is N Not ot Z Zero.ero.DJNZ Rn,DJNZ direct,此指令专用于计数控制循环,此指令专用于计数控制循环,RnRn和和directdirect作为减一计数的循环计数器。作为减一计数的循环计数器。例例3-6 编写一个程序,清空编写一个程序,清空16个数据存储单元,数据存储单元的开始地址是个数据存储单元,数据存储单元的开始地址是60H。 ORG0030H CLR A ;A=0 MOV R1,#60H;建立地址指针;建立地址指针R1=60H MOV R2,#16;计数器赋初值;计数器赋初值R7=16AGAIN:MOVR1,A;通过指针将各单元清;通过指针将各单元清0 INC R1 ;指针调整;指针调整 DJNZR2,AGAIN SJMP$;原地踏步,停机;原地踏步,停机 ENDEvaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术373. 3. 汇编语言程序设计汇编语言程序设计3.2.3 3.2.3 循环程序运行循环程序运行Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术383. 3. 汇编语言程序设计汇编语言程序设计例例3-7 计算从片内计算从片内RAM的的50H单元开始的单元开始的10个个BCD数的累加和。数的累加和。 ORG 0000H LJMP MAIN ORG 0030HMAIN: MOVR3,00H;清累加和的高位;清累加和的高位 MOVR4,00H;清累加和的低位;清累加和的低位 MOVR2,10;循环计数器初值;循环计数器初值 MOVR0,50H;指针指向;指针指向50H单元单元 MOVA,R4;取累加和低字节;取累加和低字节 ADDA,R0;累加和低字节相加;累加和低字节相加 DAA;BCD数调整数调整 JNCNEXT;如果无进位,则转移到;如果无进位,则转移到NEXT INCR3;如有进位,高字节加;如有进位,高字节加1NEXT: INCR0;修改指针,指向新的单元;修改指针,指向新的单元 DJNZR2,LOOP;判断是否累加完毕;判断是否累加完毕 MOVR4,A;存累加和低位;存累加和低位 SJMP$;停机;停机 ENDLOOP:Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术393. 3. 汇编语言程序设计汇编语言程序设计3.5 循环程序设计循环程序设计例例3-8 将片内将片内RAM 20H单元数据中的单元数据中的 1的个数统计出来。结果存的个数统计出来。结果存20H单元。单元。 ORG 0030HMAIN:MOVR1,00H;1 1的计数单元清的计数单元清0 0 MOVR2,08H ;循环计数器置初值;循环计数器置初值 MOVA,20H;取数据;取数据LOOP: RLCA;左移一位,待判定位移入;左移一位,待判定位移入C JNCNEXT ;如果进位位为;如果进位位为0,则转移到,则转移到NEXT INCR1;如进位位为;如进位位为1,计数单元加,计数单元加1 NEXT: DJNZR2,LOOP;判断是否判断完毕;判断是否判断完毕 MOV20H,R1;存计数结果;存计数结果 SJMP$;停机;停机 END Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术403. 3. 汇编语言程序设计汇编语言程序设计3.6 3.6 子程序结构子程序结构完成某一专用任务并能为其他程序反复调用的程序段称为子程序,调用子程序的完成某一专用任务并能为其他程序反复调用的程序段称为子程序,调用子程序的程序称为调用程序或主程序。程序称为调用程序或主程序。I.调用与返回调用与返回1、调用指令:、调用指令:保存断点地址保存断点地址提供子程序人口地址提供子程序人口地址长调用指令长调用指令LCALL: Long CallLCALL addr16机器码机器码或或LCALL ;12addr16SP=SP+1 *SP=PC70PC=PC+3 断点地址断点地址SP=SP+1 *SP=PC158调用范围:全部调用范围:全部ROM的的64KB空间。空间。例、下列程序执行到例、下列程序执行到LCALL指令指令(地址地址0100H)后,求断点地址,以及堆栈的值。后,求断点地址,以及堆栈的值。MOV SP,#60HLCALL SQUR断点地址:断点地址: 0100H+30103HSP62H(61H)03H(62H)01HPC=addr16转向子程序入口地址转向子程序入口地址Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术413. 3. 汇编语言程序设计汇编语言程序设计3.6 3.6 子程序结构子程序结构I.调用与返回调用与返回2、返回指令:、返回指令:恢复堆栈保存的断点地址,程序转回断点地址处继续执行主程序。恢复堆栈保存的断点地址,程序转回断点地址处继续执行主程序。返回指令返回指令RET:returnRET;PCPC+1PC158*SP SPSP-1PC70*SP SPSP-1II.参数传递参数传递主程序主程序子程序子程序入口参数入口参数主程序主程序子程序子程序出口参数出口参数双方共同约定的寄存器或某存储单元双方共同约定的寄存器或某存储单元堆栈堆栈Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术423. 3. 汇编语言程序设计汇编语言程序设计III.(共享资源)现场保护和现场恢复(共享资源)现场保护和现场恢复主程序在运行过程中使用了一些寄存器来存放临时数据(或中间结果),在子程序主程序在运行过程中使用了一些寄存器来存放临时数据(或中间结果),在子程序运行过程中有时也要用到这些寄存器,为了避免对主程序还有用的临时数据被子程序覆运行过程中有时也要用到这些寄存器,为了避免对主程序还有用的临时数据被子程序覆盖掉,就要设法保护这些临时数据,保护的过程称为盖掉,就要设法保护这些临时数据,保护的过程称为现场保护现场保护。在执行完子程序返回主。在执行完子程序返回主程序时,还要恢复这些数据,称为程序时,还要恢复这些数据,称为现场恢复现场恢复。常使用堆栈进行现场保护和恢复。常使用堆栈进行现场保护和恢复。PUSH ACC PUSH BPUSH PSWPOP PSWPOP BPOP ACC ;现场保护;现场保护;现场恢复,注意顺序;现场恢复,注意顺序IV.子程序完整结构子程序完整结构现场保护现场保护取入口参数取入口参数子程序功能子程序功能送出口参数送出口参数现场恢复现场恢复返回主程序返回主程序RET注意:在一些简单程序设计中,如果注意:在一些简单程序设计中,如果主程序和子程序并没有共享资源,可以主程序和子程序并没有共享资源,可以省略现场保护和现场恢复。省略现场保护和现场恢复。Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术433. 3. 汇编语言程序设计汇编语言程序设计远程查表指令远程查表指令 MOVC A,A+DPTR1、简单单字节表、简单单字节表项数与所计算的数是线性对应的关项数与所计算的数是线性对应的关 系系首地址送首地址送DPTR项数送项数送A执行远程查表指令执行远程查表指令MOVC A,A+DPTR3.7 常用子程序设计常用子程序设计一、查表子程序设计一、查表子程序设计数据表每项一字节,数据表每项一字节, 每项地址数据表首地址每项地址数据表首地址 + 项数项数 ORG 0200HTABLE:DB0,1,4,9,16,25 DB 36,48,64,81Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术443. 3. 汇编语言程序设计汇编语言程序设计例例3-12 用子程序调用的方法实现用子程序调用的方法实现 ,其中,其中a、b均小于均小于10,a、b、c存放在片内存放在片内RAM的的30H、31H和和32H单元中。单元中。入口参数:入口参数:A(项数)(项数) 出口参数:出口参数:A(结果)(结果) VAL1 EQU30H VAL2 EQU31HRESULT EQU32H ORG 0040HMAIN: MOVA,VAL1 ;准备入口参数;准备入口参数LCALL SQR ;调用子程序;调用子程序 MOVB,A ;取出口参数;取出口参数MOVA,VAL2LCALLSQRADDA,BMOVRESULT,ASJMP$ ORG 0100HSQR: MOVDPTR,TABLE MOVCA,A+DPTR RET ORG 0200HTABLE:DB0,1,4,9,16,25 DB 36,48,64,81 END Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术453. 3. 汇编语言程序设计汇编语言程序设计3.7 常用子程序设计常用子程序设计例例3-13 已知已知R0低低4位有位有1位位16进制数(进制数(0F中的一个),请将其转换成相应的中的一个),请将其转换成相应的ASCII码。码。入口参数:入口参数:R0(所查数据在数据表的项数)。(所查数据在数据表的项数)。出口参数:出口参数:R0(转换后的(转换后的ASCII值)。值)。 ORG 0100HHEX2A:MOVA,R0 ;读入口参数;读入口参数 ANLA ,0FH ;屏蔽高;屏蔽高4位位 ADDA , ;地址调整;地址调整 MOVC A,A+PC ;近程查表指令;近程查表指令 MOVR0,A ;送出口参数;送出口参数 1字节指令字节指令 RET ;子程序返回;子程序返回 1字节指令字节指令ASTAB:DB 0,1,2,3,4,5,6,7 DB 8,9,A,B,C,D,E,FEvaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术463. 3. 汇编语言程序设计汇编语言程序设计3.2.4 3.2.4 子程序运行子程序运行 断点地址0106H压入堆栈,并将010BH放进PC中,程序转移到010BH处执行延时子程序。 子程序执行到返回命令RET后,将堆栈中的0106H弹出到PC中,返回主程序继续执行。 FA31 0BEvaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术473. 3. 汇编语言程序设计汇编语言程序设计二、散转程序设计二、散转程序设计并行多分支程序,根据某个值,分别转向各个不同处理程序并行多分支程序,根据某个值,分别转向各个不同处理程序散转指令散转指令JMPJMP A+DPTR 由于各个分支处理程序长度不一,把各个分支处理程序的转移指令按序编制成转由于各个分支处理程序长度不一,把各个分支处理程序的转移指令按序编制成转移指令表(转移指令必须相同),用类似查表方式获得转移指令的地址,使程序先转移指令表(转移指令必须相同),用类似查表方式获得转移指令的地址,使程序先转向转移指令,然后再由不同的转移指令实现向各个分支处理程序的散转。如能实现向转移指令,然后再由不同的转移指令实现向各个分支处理程序的散转。如能实现128个分支的转移指令表:个分支的转移指令表:BRTAB:AJMP ROUT0 AJMPROUT1 AJMPROUT127转移指令地址移指令地址转移指令表首地址移指令表首地址+分支数分支数 字字节数数;PCPC+1;PCA+DPTR 转移转移Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术483. 3. 汇编语言程序设计汇编语言程序设计3.7 常用子程序设计常用子程序设计例例3-14 设设R0中为转移分支数(项数),实现程序散转。中为转移分支数(项数),实现程序散转。FPRO: MOVDPTR,BRTAB;送转移指令表首地址;送转移指令表首地址 MOVA,R0;送分支数;送分支数 RLA;分支数乘;分支数乘2 JMPA+DPTR;散转指令;散转指令BRTAB:AJMP ROUT0 ;转移指令表(标号;转移指令表(标号BRTAB转移指令表转移指令表 ;首地址)转向分支;首地址)转向分支0 AJMPROUT1;转向分支;转向分支1 AJMP ROUT127;转向分支;转向分支127 ROUT0: ;分支;分支0处理程序处理程序ROUT1: ;分支;分支1处理程序处理程序ROUT127: ;分支;分支127处理程序处理程序 Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术493. 3. 汇编语言程序设计汇编语言程序设计例例3-15 一个一个16键的行列式键处理程序中,每按下一个键后会得到相应的键的行列式键处理程序中,每按下一个键后会得到相应的键号键号存放在累存放在累加器加器A中,设中,设16个键键号为个键键号为00H0FH ,每键的处理程序不同。试编制相应的键盘散转,每键的处理程序不同。试编制相应的键盘散转程序。程序。FKEY: MOVDPTR ,KPRG;送转移指令表首地址;送转移指令表首地址 MOVB,03H MULAB ;项数乘字节数(;项数乘字节数(LJMP是是3字节指令)字节指令) JMPA+DPTR;程序散转;程序散转KPRG:LJMPKPRG0;长转移到;长转移到0号键键处理程序号键键处理程序 LJMPKPRG1 LJMPKPRG15KPRG0: ;0号键键处理程序号键键处理程序KPRG1: ;1号键键处理程序号键键处理程序KPRG15: ;15号键键处理程序号键键处理程序Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术503. 3. 汇编语言程序设计汇编语言程序设计三、代码转换程序设计三、代码转换程序设计例例3-16 单字节压缩单字节压缩BCD码转换成二进制码子程序。码转换成二进制码子程序。入口参数:待转换的入口参数:待转换的BCD码存于码存于R2。出口参数:转换结果(出口参数:转换结果(8位无符号二进制整数)仍存位无符号二进制整数)仍存R2。 ORG 2000HBCD2B:MOVA,R2;A(d1 d0)BCD ANLA,0F0H;取高位;取高位BCD码码d1,A=d1 0H SWAP A;A=0 d1H MOVB,0AH;B10 MULAB;d110 MOVR3,A;R3暂存乘积结果暂存乘积结果 MOVA,R2;A(d1 d0)BCD ANLA,0FH;取低位;取低位BCD码码d0,A=0 d0H ADDA,R3;d110+d0 MOVR2,A;送出口参数;送出口参数 RET;子程序返回;子程序返回Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术513. 3. 汇编语言程序设计汇编语言程序设计三、代码转换程序设计三、代码转换程序设计例例3-17 将将20H单元中单元中BCD数转换成两位数转换成两位ASCII字符存于字符存于21H(高位)、(高位)、22H(低位)单(低位)单元中。元中。入口参数:待转换的入口参数:待转换的BCD码存于码存于20H单元。单元。出口参数:转换结果存出口参数:转换结果存21H(高位)、(高位)、22H(低位)单元中(低位)单元中 。 ORG0500HBCD2AS:MOV R0,#22H;设置结果单元;设置结果单元 MOV R0,#00H;清零;清零 MOV A,20H;20H中中BCD数送数送A XCHD A,R0;低位;低位BCD数至数至22H ORL 22H,#30H;完成低位;完成低位BCD数转换数转换 SWAP A;高位;高位BCD数送低数送低4位位 ORL A,#30H;完成高位;完成高位BCD数转换数转换 MOV 21H,A;存入;存入21H单元单元 RET Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术523. 3. 汇编语言程序设计汇编语言程序设计 lVBO:MOVR0,#40H MOV4AH,#00 MOV4BH,#00 CLRC MOVA,4AH ADDA,R0 ;求低字节和;求低字节和 MOV4AH,A MOVA,4BH ADDCA,#00 ;存进位位,高字节;存进位位,高字节 MOV4BH,A INCR0 CJNER0,#48H,LOOP ;若数据未处理完则转移;若数据未处理完则转移 MOVR2,#3 ;右移三次,相当于除;右移三次,相当于除8 ACALL RRLOOP RET五、算术运算程序设计五、算术运算程序设计例例3-20 试试计计算算片片内内RAM区区40H47H八八个个单单元元中中数数的的算算术术平平均均值值,结结果果存存放放在在4AH(低低字节)、字节)、4BH单元中(高字节)。单元中(高字节)。右移右移n位子程序,入口参数位子程序,入口参数R2: CLR C MOV A,4BH RRC A MOV 4BH,A ;高字节;高字节 MOV A,4AH RRC A MOV 4AH,A ;低字节;低字节 DJNZ R2,RRLOOP RETLOOP:RRLOOP:Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术单片机原理及接口技术533. 3. 汇编语言程序设计汇编语言程序设计六、延时子程序设计六、延时子程序设计指令的时间属性:指令的时间属性:机器周期数,每条指令执行都有其固定的时间。机器周期数,每条指令执行都有其固定的时间。典型的循环结构,通过执行一个具有固定运行时间的循环体实现延时。典型的循环结构,通过执行一个具有固定运行时间的循环体实现延时。定时时间内循环体执行时间定时时间内循环体执行时间循环次数循环次数空操作指令空操作指令NOP:No OperationNOP;PC=PC+1等待一个机器周期等待一个机器周期例、设计延时例、设计延时100ms100ms子程序(单片机晶振分别为子程序(单片机晶振分别为6MHz6MHz,12MHz12MHz)1、6MHz单片机,每机器周期单片机,每机器周期2us2、12MHz单片机,每机器周期单片机,每机器周期1us1000002225010010000041250100DJNZ R2,$MOV R2,# 250DJNZ R3,LOOPLOOP:MOV R3,# 100DEL100:RET;2机器周期机器周期DJNZ R2,LOOP1NOPNOPMOV R2,# 250LOOP1:DJNZ R3,LOOP2LOOP2:MOV R3,# 100DEL100:RET;1机器周期机器周期;1机器周期机器周期;2机器周期机器周期Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.Evaluation only.Created with Aspose.Slides for .NET 3.5 Client Profile 5.2.0.0.Copyright 2004-2011 Aspose Pty Ltd.
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号