汇编语言程序设计课件.pptx
《汇编语言程序设计课件.pptx》由会员分享,可在线阅读,更多相关《汇编语言程序设计课件.pptx(78页珍藏版)》请在咨信网上搜索。
第 4 章 单片机汇编语言程序设计 第第4章章 汇编语言程序设计汇编语言程序设计 第 4 章 单片机汇编语言程序设计 所谓程序设计,就是按照给定的任务要求,编写出完整的计算机程序。要完成同样的任务,使用的方法或程序并不是唯一的。因此,程序设计的质量将直接影响到计算机系统的工作效率、运行可靠性。4.1 单片机程序设计语言概述第 4 章 单片机汇编语言程序设计 4.1.1按照语言的结构及其功能可以分为三种1机器语言:机器语言是用二进制代码0和1表示指令和数据的最原始的程序设计语言。2汇编语言:在汇编语言中,指令用助记符表示,地址、操作数可用标号、符号地址及字符等形式来描述。3高级语言:高级语言是接近于人的自然语言,面向过程而独立于机器的通用语言。第 4 章 单片机汇编语言程序设计 机器语言(MachineLanguage)直接用机器码编写程序、能够为计算机直接执行的机器级语言。机器码是一串由二进制代码“0”和“1”组成的二进制数据,其执行速度快,但是可读性极差。机器语言一般只在简单的开发装置中使用,程序的设计、输入、修改和调试都很麻烦。第 4 章 单片机汇编语言程序设计 汇编语言(AssemblyLanguage)指用指令助记符代替机器码的编程语言。汇编语言程序结构简单,执行速度快,程序易优化,编译后占用存储空间小,是单片机应用系统开发中最常用的程序设计语言。汇编语言的缺点是可读性比较差,只有熟悉单片机的指令系统,并具有一定的程序设计经验,才能研制出功能复杂的应用程序。第 4 章 单片机汇编语言程序设计 高级语言(High-LevelLanguage)在汇编语言的基础上用自然语言的语句来编写程序,例如PL/M-51、C51等,程序可读性强,通用性好,适用于不熟悉单片机指令系统的的用户。高级语言编写程序的缺点是实时性不高,结构不紧凑,编译后占用存储空间比较大,这一点在存储器有限的单片机应用系统中没有优势。因而,单片机的汇编语言不但不会被高级语言完全取代,甚至还将继续占据重要地位。第 4 章 单片机汇编语言程序设计 4.1.2 汇编语言语句的种类和格式汇编语言语句的种类和格式汇编语言语句有三种基本类型:指令语句、伪指令语句和宏指汇编语言语句有三种基本类型:指令语句、伪指令语句和宏指令语句。令语句。指指令令语语句句:每每一一个个指指令令语语句句都都在在汇汇编编时时产产生生一一个个目目标标代代码码,对应着机器的一种操作。对应着机器的一种操作。例如:例如:MOV A,#0 伪伪指指令令语语句句:主主要要是是为为汇汇编编语语言言服服务务的的,在在汇汇编编时时没没有有目目标标代码与之对应。代码与之对应。例如:例如:ONE EQU 1 宏指令语句:用以代替汇编语言源程序中重复使用的程序段宏指令语句:用以代替汇编语言源程序中重复使用的程序段的一种语句,由汇编程序在汇编时产生相应的目标代码。的一种语句,由汇编程序在汇编时产生相应的目标代码。第 4 章 单片机汇编语言程序设计 汇编语言语句的格式汇编语言语句的格式 指令语句和伪指令语句的格式是类似的。指令语句和伪指令语句的格式是类似的。指令语句的格式为:指令语句的格式为:【标号标号】:助记符:助记符(操作码)操作码)【操作数操作数】;【注释注释】伪指令语句的格式:伪指令语句的格式:名字名字 定义符定义符 参数参数 ;注释;注释两种语句都由四个部分组成。其中每一部分称为域也称为字段,两种语句都由四个部分组成。其中每一部分称为域也称为字段,各字段之间用一个空格或字段定界符分隔,常用的字段定界符各字段之间用一个空格或字段定界符分隔,常用的字段定界符有冒号有冒号“:”、逗号、逗号“,”和分号和分号“;”。其中方括号括起来。其中方括号括起来的是可选择部分。的是可选择部分。第 4 章 单片机汇编语言程序设计 4.2 80C51汇编语言程序设计汇编语言程序设计汇汇编编语语言言程程序序设设计计,就就是是采采用用汇汇编编指指令令来来编编写写计计算算机机程程序序。要要对对应应用用中中需需使使用用的的寄寄存存器器、存存储储单单元元、I/O端端口口等等先先要要作作出出具具体体安安排排。在在实实际际编编程程中中,如如何何正正确确选选择择指指令令、寻寻址址方方式式和和合合理理使使用用工工作作寄寄存存器器,包包括括数数据据存存储储器器单单元元,如如何何对对扩扩展展的的I/O端端口口进进行操作等,都是基本的汇编语言程序设计技巧。行操作等,都是基本的汇编语言程序设计技巧。程程序序结结构构一一般般采采用用以以下下三三种种基基本本控控制制结结构构,即即顺顺序序结结构构、分分支支结结构构和和循循环环结结构构来来组组成成,再再加加上上使使用用广广泛泛的的子子程程序序及及中中断断服服务子程序,共有五种基本结构。务子程序,共有五种基本结构。第 4 章 单片机汇编语言程序设计 4.2.1 顺序程序结构顺序程序结构 例例 1两个无符号双字节数相加。设被加数存放于内部RAM的40H(高位字节),41H(低位字节),加数存放于50H(高位字节),51H(低位字节),和数存入40H和41H单元中。第 4 章 单片机汇编语言程序设计 程序如下:START:CLRC;将Cy清零MOVR0,41H;将被加数地址送数据指针R0MOVR1,51H;将加数地址送数据指针R1AD1:MOVA,R0;被加数低字节的内容送入AADDA,R1;两个低字节相加MOVR0,A;低字节的和存入被加数低字节中DECR0;指向被加数高位字节DECR1;指向加数高位字节MOVA,R0;被加数高位字节送入AADDCA,R1;两个高位字节带Cy相加MOVR0,A;高位字节的和送被加数高位字节RET第 4 章 单片机汇编语言程序设计 例例 2将两个半字节数合并成一个一字节数。设内部RAM40H#,41H单元中分别存放着8位二进制数,要求取出两个单元中的低半字节,并成一个字节后,存入50H单元中。程序如下:START:MOVR1,40H;设置R1为数据指针MOVA,R1;取出第一个单元中的内容ANLA,0FH;取第一个数的低半字节SWAPA;移至高半字节INCR1;修改数据指针XCHA,R1;取第二个单元中的内容ANLA,0FH;取第二个数的低半字节ORLA,R1;拼字MOV50H,A;存放结果RET第 4 章 单片机汇编语言程序设计 4.2.2 分支程序设计分支程序设计 分支结构框图(a)单分支流程;(b)多分支流程第 4 章 单片机汇编语言程序设计 例例 3x,y均为8位二进制数,设x存入R0,y存入R1,求解:第 4 章 单片机汇编语言程序设计 程序如下:START:CJNER0,00H,SUL1;R0中的数与00比较不等转移MOVR1,00H;相等,R10SJMPSUL2SUL1:JCNEG;两数不等,若(R0)0,则R101HSJMPSUL2NEG:MOVR1,0FFH;(R0)0,则R10FFHSUL2:RET第 4 章 单片机汇编语言程序设计 例例 4比较两个无符号数的大小。设外部RAM的存储单元ST1和ST2中存放两个不带符号的二进制数,找出其中的大数存入外部RAM中的ST3单元中。第 4 章 单片机汇编语言程序设计 程序如下:ORG1000HST1 EQU2000HST2EQU2100HST3EQU2200HSTART:CLRC;清零CyMOVDPTR,ST1;第一个数的指针MOVXA,DPTR;取第一个数MOVR2,A;保存MOVDPTR,ST2;第二个数的指针MOVXA,DPTR;取第二个数CLRC第 4 章 单片机汇编语言程序设计 SUBBA,R2;两数比较JNCBIG1;若第二个数大,则转XCHA,R2;第一个数大BIG0:MOVDPTR,ST3MOVXDPTR,A;存大数AJMPBBIG1:MOVXA,DPTR;第二个数大SJMPBIG0B:RET第 4 章 单片机汇编语言程序设计 第 4 章 单片机汇编语言程序设计 4.2.3 循环程序设计循环程序设计 一、一、循环程序循环程序 第 4 章 单片机汇编语言程序设计 循环程序一般由四个主要部分组成:(1)初始化部分:为循环程序做准备,如规定循环次数、给各变量和地址指针预置初值。(2)处理部分:为反复执行的程序段,是循环程序的实体,也是循环程序的主体。(3)循环控制部分:这部分的作用是修改循环变量和控制变量,并判断循环是否结束,直到符合结束条件时,跳出循环为止。(4)结束部分:这部分主要是对循环程序的结果进行分析、处理和存放。第 4 章 单片机汇编语言程序设计 例例 5 工作单元清零。在应用系统程序设计时,有时经常需要将存储器中各部分地址单元作为工作单元,存放程序执行的中间值或执行结果,工作单元清零工作常常放在程序的初始化部分中。设有50个工作单元,其首址为外部存储器8000H单元,则其工作单元清零程序如下:第 4 章 单片机汇编语言程序设计 CLEAR:CLRAMOVDPTR,8000H;工作单元首址送指针MOVR2,#50;置循环次数CLEAR1:MOVXDPTR,AINCDPTR;修改指针DJNZR2,CLEAR1;控制循环RET第 4 章 单片机汇编语言程序设计 例例 6设在内部RAM的BLOCK单元开始处有长度为LEN的无符号数据块,试编一个求和程序,并将和存入内部RAM的SUM单元(设和不超过8位)。BLOCKEQU20HLENEQU30HSUMEQU40HSTART:CLRA;清累加器AMOVR2,LEN;数据块长度送R2MOVR1,BLOCK;数据块首址送R1LOOP:ADDA,R1;循环加法INCR1;修改地址指针DJNZR2,LOOP;修改计数器并判断MOVSUM,A;存和RET第 4 章 单片机汇编语言程序设计 二、二、多重循环多重循环 例例 710秒延时程序。延时程序与MCS-51执行指令的时间有关,如果使用12MHz晶振,一个机器周期为1s,计算出一条指令以至一个循环所需要的执行时间,给出相应的循环次数,便能达到延时的目的。10秒延时程序如下:DELAY:MOVR5,100DEL0:MOVR6,200DEL1:MOVR7,248NOPDEL2:DJNZR7,DEL2DJNZR6,DEL1DJNZR5,DEL0RET第 4 章 单片机汇编语言程序设计 上例程序中采用了多重循环程序,即在一个循环体中又包含了其它的循环程序,这种方式是实现延时程序的常用方法。使用多重循环时,必须注意:(1)循环嵌套,必须层次分明,不允许产生内外层循环交叉。(2)外循环可以一层层向内循环进入,结束时由里往外一层层退出。(3)内循环可以直接转入外循环,实现一个循环由多个条件控制的循环结构方式。第 4 章 单片机汇编语言程序设计 外循环中循环内循环外循环内循环外循环内循环内循环(a)嵌套正确(b)嵌套正确(c)交叉不正确多重循环示意图第 4 章 单片机汇编语言程序设计 例例8设某系统的模数转换器是ADC0809,它的转换结束信号EOC连接到8031的P1.7端,当EOC的状态由低变高时,则结束循环等待,并读取转换值,其程序如下:START:MOVDPTR,addr;0809端口地址送DPTRMOVA,00H;启动0809转换MOVXDPTR,ALOOP:JNBP1.7,LOOP;检测P1.7状态,判是否转换结束MOVXA,DPTR;读取转换结果第 4 章 单片机汇编语言程序设计 例例9在内部RAM中从50H单元开始的连续单元依次存放了一串字符,该字符串以回车符为结束标志,要求测试该字符串的长度。第 4 章 单片机汇编语言程序设计 ASCII码表第 4 章 单片机汇编语言程序设计 程序如下:START:MOVR2,0FFHMOVR0,4FH;数据指针R0置初值LOOP:INCR0INCR2CJNER0,0DH,LOOPRET第 4 章 单片机汇编语言程序设计 4.2.4 散转程序设计散转程序设计 散转程序是分支程序的一种,它可根据运算结果或输入数据将程序转入不同的分支。MCS-51指令系统中有一条跳转指令JMPA+DPTR,用它可以很容易地实现散转功能。该指令把累加器的8位无符号数与16位数据指针的内容相加,并把相加的结果装入程序计数器PC,控制程序转向目标地址去执行。此指令的特点在于,转移的目标地址不是在编程或汇编时预先确定的,而是在程序运行过程中动态地确定的。目标地址是以数据指针DPTR的内容为起始的256字节范围内的指定地址,即由DPTR的内容决定分支转移程序的首地址,由累加器A的内容来动态选择其中的某一个分支转移程序。第 4 章 单片机汇编语言程序设计 K=?转SUB0转SUB1转SUB6K=0K=1K=6开始JMPA+DPTR,第 4 章 单片机汇编语言程序设计 数据排序程序数据排序程序数数据据的的排排序序,其其算算法法很很多多,常常用用的的有有插插入入排排序序法法、冒冒泡泡排排序序法法、快快速速排排序序法法、选选择择排排序序法法、堆堆积积排排序序法法、二二路路归归并并排排序序法法及基数排序法等。及基数排序法等。冒冒泡泡法法是是一一种种相相邻邻数数互互换换的的排排序序方方法法,其其过过程程类类似似水水中中气气泡泡上上浮浮。执执行行时时从从前前向向后后进进行行相相邻邻数数比比较较,若若数数据据的的大大小小次次序序与与要要求求的的顺顺序序不不符符时时(逆逆序序),就就将将二二数数互互换换,正正序序时时不不交交换换,假假定定是是升升序序排排序序,则则通通过过这这种种相相邻邻数数互互换换方方法法,使使小小数数向向前前移移,大大数数向向后后移移,为为此此从从前前向向后后进进行行一一次次冒冒泡泡(相相邻邻数数互互换换),就就会会把把最最大大数数换换到到最最后后,再再进进行行一一次次冒冒泡泡,就就会会把把次次大大数数排排在在倒倒数数第第二二,直至冒泡结束。直至冒泡结束。应用举例:第 4 章 单片机汇编语言程序设计 说明:说明:每每次次冒冒泡泡都都从从向向后后排排定定了了一一个个大大数数(升升序序),每每次次冒冒泡泡所所需需进进行行 的的比比较较次次数数都都递递减减,例例如如有有n个个数数排排序序,则则第第一一次次冒冒泡泡需需比比较较(n-1)次次,第第二二次次冒冒泡泡则则需需(n-2)次次,依依此此类类推推,但但实实际际编编程程中中为为了了简简化化程程序序,往往往往把把各各次次比比较较次次数数都都固固定定为为(n-1)次。)次。对于对于n n个数,理论上说应进行(个数,理论上说应进行(n-1n-1)次冒泡才能完成)次冒泡才能完成排序,但实际上往往不到(排序,但实际上往往不到(n-1n-1)次就已排好序。判定排序是否)次就已排好序。判定排序是否完成的最简单方法是每次冒泡中是否有互换发生,如果有互换完成的最简单方法是每次冒泡中是否有互换发生,如果有互换发生,说明排序还没完成,否则就表示已排好序,为此控制排发生,说明排序还没完成,否则就表示已排好序,为此控制排序结束常不使用计数方法,而使用设置互换标志的方法,以其序结束常不使用计数方法,而使用设置互换标志的方法,以其状态表示在一次冒泡中有无数据互换进行。状态表示在一次冒泡中有无数据互换进行。第 4 章 单片机汇编语言程序设计 统计的数值分别存入统计的数值分别存入20H29H中。中。CLRA;结果单元;结果单元20H29H清零清零MOV R0,#10MOV R1,#20HLP:MOVR1,AINCR1DJNZ R0,LPMOV R0,#100;100个数的计数器个数的计数器READ:MOV A,P1;读入;读入P1例例10.对从对从P1口输入的口输入的100个个09的数进行概率统计。的数进行概率统计。第 4 章 单片机汇编语言程序设计 CHK0:CJNE A,#0,CHK1;比较,不为;比较,不为“0”,继续比较,继续比较INC20H;是是“0”,则则“0”计计数数单单元元加加1SJMP END0;是否全部统计完?;是否全部统计完?CHK1:CJNE A,#1,CHK2INC21H;是是“1”,则则“1”计计数数单单元元加加1SJMP END0CHK2:CJNE A,#2,CHK3INC22H;是是“2”,则则“2”计计数数单单元元加加1SJMP END0第 4 章 单片机汇编语言程序设计 CHK3:CJNE A,#3,CHK4INC23H;是是“3”,则则“3”计计数数单单元元加加1SJMP END0CHK4:CJNEA,#4,CHK5INC24H;是是“4”,则则“4”计计数数单单元元加加1SJMP END0CHK5:CJNEA,#5,CHK6INC25H;是是“5”,则则“5”计计数数单单元元加加1SJMP END0第 4 章 单片机汇编语言程序设计 CHK6:CJNEA,#6,CHK7INC26H;是是“6”,则则“6”计计数数单单元加元加1 SJMP END0CHK7:CJNEA,#7,CHK8INC27H;是是“7”,则则“7”计计数数单单元加元加1SJMP END0第 4 章 单片机汇编语言程序设计 CHK8:CJNE A,#8,CHK9INC28H;是是“8”,则则“8”计计数数单单元元加加1SJMP END0CHK9:CJNE A,#9,ERRINC29H;是是“9”,则则“9”计计数数单单元元加加1END0:DJNZR0,READ;判是否全部统计完?;判是否全部统计完?HERE:SJMPHEREERR:;非;非09,出错,出错第 4 章 单片机汇编语言程序设计 第 4 章 单片机汇编语言程序设计 4.2.5 子程序和参数传递子程序和参数传递 一、一、子程序的概念子程序的概念通常把一些基本操作功能编制为程序段作为独立的子程序,以供不同程序或同一程序反复调用。在程序中需要执行这种操作的地方放置一条调用指令,当程序执行到调用指令,就转到子程序中完成规定的操作,并返回到原来的程序继续执行下去。第 4 章 单片机汇编语言程序设计 二、二、子程序的调用子程序的调用调用子程序的指令有“ACALL”和“LCALL”,执行调用指令时,先将程序地址指针PC改变(“ACALL”加 2,“LCALL”加3),然后PC值压入堆栈,用新的地址值代替。执行返回指令时,再将PC值弹出。子程序调用中,主程序应先把有关的参数存入约定的位置,子程序在执行时,可以从约定的位置取得参数,当子程序执行完,将得到的结果再存入约定的位置,返回主程序后,主程序可以从这些约定的位置上取得需要的结果,这就是参数的传递参数的传递。第 4 章 单片机汇编语言程序设计 子程序调用与返回过程示意图子程序调用与返回过程示意图第 4 章 单片机汇编语言程序设计 在汇编语言源程序中使用子程序时,一般要注意两个问题:参数传递和现场保护。1、参数传递一般可采用以下方法:传递数据。将数据通过工作寄存器R0R7或累加器来传送。即主程序和子程序在交接处,上述寄存器和累加器存储的是同一参数。传送地址。数据存放在数据寄存器中,参数传递时只通过R0、R1、DPTR传递数据所存放的地址。通过堆栈传递参数。在调用之前,先把要传送的参数压入堆栈,进入子程序之后,再将压入堆栈的参数弹出到工作寄存器或者其他内存单元。第 4 章 单片机汇编语言程序设计 2、保护现场与恢复现场保护现场与恢复现场在在调调用用子子程程序序时时,单单片片微微机机只只是是自自动动保保护护断断点点地地址址,但但由由调调用用程程序序转转入入子子程程序序执执行行时时,往往往往会会破破坏坏主主程程序序或或调调用用程程序序的的有有关关寄寄存存器器(如如工工作作寄寄存存器器和和累累加加器器等等)的的内内容容,也也很很可可能能破破坏坏程程序序状状态态字字PSW中中的的标标志志位位,从从而而在在子子程程序序返返回回后后引引起起出出错错。因因此此,必必要要时时应应将将这这些些单单元元内内容容保保护护起起来来,即即保保护护现现场场。对对于于PSW、A、B等等可可通通过过压压栈栈指指令令进进栈栈保保护护。工工作作寄寄存存器器采采用用选选择择不不同同工工作作寄寄存存器器组组的的方方式式来来达达到到保保护护的的目目的的。一一般般主主程程序序选选用用工工作寄存器组作寄存器组0,而子程序选用工作寄存器的其它组。,而子程序选用工作寄存器的其它组。当当子子程程序序执执行行完完后后,即即返返回回主主程程序序时时,应应先先将将上上述述内内容容送送回回到到来来时时的的寄寄存存器器中中去去,这这后后一一过过程程称称为为恢恢复复现现场场。对对于于PSW、A、B等内容可通过弹栈指令来恢复。等内容可通过弹栈指令来恢复。在编写子程序时,还应注意保护(压栈)和恢复(弹出)在编写子程序时,还应注意保护(压栈)和恢复(弹出)的顺序,即先压入者后弹出。的顺序,即先压入者后弹出。第 4 章 单片机汇编语言程序设计【例11】单字节二进制数据转换为BCD码子程序SBTOD。功能:将单字节二进制数转换为三位BCD码。入口:R2中存放要转换的二进制数。出口:(R0)给出百位BCD码的存放地址。(R0)+1给出十位和个位BCD码的存放地址,高半字节放十位,低半字节放个位。占用寄存器:A,B,R0,R2。A累加器的内容不受影响。第 4 章 单片机汇编语言程序设计 SBTOD:MOVSP,#60HPUSHACCMOVA,R2;取数MOVB,#64HDIVAB;除以100,(A)为百位数MOVR0,A;存人(R0)单元MOVA,#0AHXCHA,B;余数(B)送ADIVA,B;除以10,得十位和个位SWAPA;十位数放于高半字节ADDA,B;个位数放于低半字节INCR0MOVR0,A;个位存入(R0)+1单元POPACCRET第 4 章 单片机汇编语言程序设计【例12】求两个无符号数据块中的最大值。数据块的首地址分别为60H和70H,每个数据块的第一个字节都存放数据块的长度,结果存入5FH单元。解本例可采用分别求出两个数据块的最大值,然后比较其大小的方法,求最大值的过程可采用子程序。子程序名称:QMAX。子程序入口条件:R1中存有数据块首地址。出口条件:最大值在A中。下面分别编写主程序和子程序。第 4 章 单片机汇编语言程序设计 主程序:ORG2000HMOVSP,#2FH;设堆栈指针MOVR1,#60H;取第一数据块首地址送R1中ACALLQMAX;第一次调用求最大值子程序MOV40H,A;第一个数据块的最大值暂存40HMOVR1,#70H;取第二数据块首地址送R1中ACALLQMAX;第二次调用求最大值子程序CJNEA,40H,NEXT;两个最大值进行比较NEXT:JNCLP;A大,则转LPMOVA,40H;A小,则把40H中内容送人ALP:MOV5FH,ASJMP第 4 章 单片机汇编语言程序设计 子程序:ORG2200HQMAX:MOVA,R1;取数据块长度MOVR2,A;R2做计数器CLRA;清零,准备做比较LP1:INCR1;指向下一个数据地址 CLRC;准备做减法 SUBBA,R1;用减法做比较JNCLP3;若A大,则转LP3MOVA,R1;A小,则将大数送A中 SJMPLP4;五条件转LP4LP3:ADDA,R1;恢复A中值LP4:DJNZR2,LP1;计数器减1,不为零,转继续比较RET;比较完,子程序返回第 4 章 单片机汇编语言程序设计 三、子程序设计三、子程序设计子程序的调用与返回子程序的调用与返回子程序的调用与返回子程序的调用与返回MCS-51MCS-51单单单单片片片片机机机机有有有有两两两两条条条条子子子子程程程程序序序序调调调调用用用用指指指指令令令令:ACALL ACALL addr11addr11、LCALL addr16LCALL addr16;一条子程序返回指令;一条子程序返回指令;一条子程序返回指令;一条子程序返回指令RETRET。保存与恢复寄存器内容保存与恢复寄存器内容保存与恢复寄存器内容保存与恢复寄存器内容例如:例如:例如:例如:SUB1:SUB1:PUSH PSW PUSH PSW PUSH A PUSH A PUSH R6 PUSH R6 (此处省略了子程序的内容此处省略了子程序的内容此处省略了子程序的内容此处省略了子程序的内容)POP R6POP R6 POP APOP A PUSH PSW PUSH PSW第 4 章 单片机汇编语言程序设计【例例例例13 13】编程计算编程计算编程计算编程计算 编程说明:这个问题中,计算某数的平方可以用子程编程说明:这个问题中,计算某数的平方可以用子程编程说明:这个问题中,计算某数的平方可以用子程编程说明:这个问题中,计算某数的平方可以用子程序来实现,两次调用该子程序,并求和便得到所需序来实现,两次调用该子程序,并求和便得到所需序来实现,两次调用该子程序,并求和便得到所需序来实现,两次调用该子程序,并求和便得到所需结果。设结果。设结果。设结果。设a a、b b 分别存于内部分别存于内部分别存于内部分别存于内部RAM RAM 的的的的30H30H、31H31H单单单单元,结果元,结果元,结果元,结果C C存于内部存于内部存于内部存于内部RAMRAM的的的的40H40H单元。单元。单元。单元。第 4 章 单片机汇编语言程序设计 参数传递:主程序中,将某数存放到累加参数传递:主程序中,将某数存放到累加参数传递:主程序中,将某数存放到累加参数传递:主程序中,将某数存放到累加器器器器A A中,作为子程序的入口参数;子程序中,中,作为子程序的入口参数;子程序中,中,作为子程序的入口参数;子程序中,中,作为子程序的入口参数;子程序中,将所求数的平方值存放在累加器将所求数的平方值存放在累加器将所求数的平方值存放在累加器将所求数的平方值存放在累加器A A中,作为出中,作为出中,作为出中,作为出口参数(即主程序的返回值)。口参数(即主程序的返回值)。口参数(即主程序的返回值)。口参数(即主程序的返回值)。子程序的入口参数:子程序的入口参数:子程序的入口参数:子程序的入口参数:A A中存放某数的值。中存放某数的值。中存放某数的值。中存放某数的值。子程序的出口参数:子程序的出口参数:子程序的出口参数:子程序的出口参数:A A中存放所求数的平方。中存放所求数的平方。中存放所求数的平方。中存放所求数的平方。子程序如下:子程序如下:子程序如下:子程序如下:SQR:SQR:INC AINC A MOVC A,A+PC MOVC A,A+PC ;查平方表;查平方表;查平方表;查平方表 RETRETTABLE:TABLE:DB 0,1,4,9,16DB 0,1,4,9,16 DB 25,36,49,64,81DB 25,36,49,64,81第 4 章 单片机汇编语言程序设计 第 4 章 单片机汇编语言程序设计 主程序如下:主程序如下:主程序如下:主程序如下:START:START:MOV A,30HMOV A,30H ACALL SQR ACALL SQR ;调查表子程序;调查表子程序;调查表子程序;调查表子程序 MOV R1,A MOV R1,A ;a2a2暂存暂存暂存暂存R1R1中中中中 MOV A,31H MOV A,31H ACALL SQR ACALL SQR ;调查表子程序;调查表子程序;调查表子程序;调查表子程序 ADD A,R1ADD A,R1 MOV 40H,AMOV 40H,A ENDEND第 4 章 单片机汇编语言程序设计 4.2.6 查表程序设计查表程序设计 查表程序是一种常用程序,它广泛使用于LED显示控制、打印机打印控制、数据补偿、数值计算、转换等功能程序中,这类程序具有简单、执行速度快等特点。所谓查表法,就是预先将满足一定精度要求的表示变量与函数值之间关系的一张表求出,然后把这张表存于单片机的程序存储器中,这时自变量值为单元地址,相应的函数值为该地址单元中的内容。查表,就是根据变量X在表格中查找对应的函数值Y,使Y=f(X)。第 4 章 单片机汇编语言程序设计 MCS-51指令系统中,有两条查表指令:MOVCA,A+PCMOVCA,A+DPTR第 4 章 单片机汇编语言程序设计 例例 13 一个十六进制数存放在内部RAM的HEX单元的低4位中,将其转换成ASCII码并送回HEX单元。第 4 章 单片机汇编语言程序设计 ORG1000HHEXASC:MOVA,HEXANLA,0FHADDA,3;修改指针MOVCA,A+PCMOVHEX,ARET十六进制09的ASCII码为30H39H,AF的ASCII码为41H46H,ASCII码表格的首地址为ASCTAB。编程如下:ASCTAB:DB30H,31H,32H,33H,34HDB35H,36H,37H,38H,39HDB41H,42H,43H,44H,45HDB46H在这个程序中,查表指令MOVCA,A+PC到表格首地址有两条指令,占用3个字节地址空间,故修改指针应加3。第 4 章 单片机汇编语言程序设计 例例 14设有一个巡回检测报警装置,需对96路输入进行控制,每路有一个额定的最大值,是双字节数。当检测量大于该路对应的最大值时,就越限报警。假设R2为保存检测路数的寄存器,查找最大额定值,将其对应的最大额定值存放于31H和32H单元中。的程序如下:FMAX:MOVA,R2ADDA,R2;表中一个额定值为2个字节MOV31H,AMOVDPTR,TAB;表首址第 4 章 单片机汇编语言程序设计 MOVCA,A+DPTR;查表读取第一个字节XCHA,31H;第一个字节内容存入31HINCDPTRMOVCA,A+DPTR;查表读取第二个字节MOV32H,A;第二字节的内容存入32HTAB:DW1230H,1450H,.DW2230H,2440H,.DW3120H,3300H,.第 4 章 单片机汇编语言程序设计 4.2.7 数制转换数制转换 例例 15将一个字节二进制数转换成3位非压缩型BCD码。设一个字节二进制数在内部RAM40H单元,转换结果放入内部RAM50H,51H,52H单元中(高位在前),程序如下:HEXBCD:MOVA,40HMOVB,100DIVABMOV50H,AMOVA,10XCHA,BDIVABMOV51H,AMOV52H,BRET第 4 章 单片机汇编语言程序设计 4.2.8 运算程序运算程序 一、一、加、加、减法程序减法程序 例例 16将40H开始存放的10个字节的数与50H开始存放的10个字节的数相减(假设被减数大于减数)。设被减数指针为R0,减数指针为R1,差数放回被减数单元,R5存放字节个数,则程序如下:第 4 章 单片机汇编语言程序设计 SUB:MOVR0,40HMOVR1,50HMOVR5,10CLRCSUB1:MOVA,R0SUBBA,R1MOVR0,AINCR0INCR1DJNZR5,SUB1RET第 4 章 单片机汇编语言程序设计 二、二、乘法运算程序乘法运算程序在计算机中,常将乘法采用移位和加法来实现。例例19将(R2R3)和(R6R7)中双字节无符号数相乘,结果存入R4R5R6R7。此乘法可以采用部分积右移的方法来实现,其程序框图如图4.6所示,程序如下:NMUL:MOVR4,0;初始化MOVR5,0CLRCMOVR0,16第 4 章 单片机汇编语言程序设计 NMUL1:MOVA,R4;CyR4R5R6R7右移一位RRCAMOVR4,AMOVA,R5RRCAMOVR5,AMOVA,R6RRCAMOVR6,AMOVA,R7RRCMOVR7,AJNCNMUL2;C为移出乘数的最低位MOVA,R5;(R4R5)+(R6F7)(R4R5)第 4 章 单片机汇编语言程序设计 ADDA,R3MOVR5,AMOVA,R4ADDCA,R2MOVR4,ANMUL2:DJNZR0,NMUL1;循环16位MOVA,R4;最后结果再移一位RRCAMOVR4,AMOVA,R5RRCAMOVR5,AMOVA,R6第 4 章 单片机汇编语言程序设计 RRCAMOVR6,AMOVA,R7RRCAMOVR7,ARET第 4 章 单片机汇编语言程序设计 图4.6NMUL程序框图第 4 章 单片机汇编语言程序设计 例例 20假定被乘数在(R4R3)中,乘数放在R2中,乘积放在R7R6和R5中。MCS-51中有8位数的乘法指令MUL,用它来实现多字节乘法时,可表示为(R4R3)(R2)=(R4)28+(R3)(R2)=(R4)(R2)28+(R3)(R2)其中(R4)(R2)和(R3)(R2)都是可直接用MUL指令来实现,而乘以28意味着左移8位。由此可编写如下程序:第 4 章 单片机汇编语言程序设计 NMUL1:MOVA,R2MOVB,R3MULAB;(R3)(R2)MOVR5,A;积的低位送R5MOVR6,B;积的高位送R6MOVA,R2MOVB,R4MULAB;(R4)(R2)ADDA,R6;(R3)(R2)的高位加(R4)(R2)的低位MOVA,BADDCA,00H;(R4)(R2)的高位加CyMOVR7,A;结果送R7RET第 4 章 单片机汇编语言程序设计 三、三、除法运算程序除法运算程序除法是乘法的逆运算,用移位、相减的方法来完成。首先比较被除数的高位字与除数,如被除数高位大于除数,则商为1,并从被除数中减去除数,形成一个部分余数;否则商位为0,不执行减法。然后把新的部分余数左移一位,并与除数再次进行比较。循环此步骤,直到被除数的所有位都处理完为止,一般商的字长为n,则需循环n次。一般计算机中,被除数均为双倍位,即如果除数和商为双字节,则被除数为四字节。如果在除法中发生商大于规定字节,称为溢出。在进行除法前,应该检查是否会产生溢出。一般可在进行除法前,先比较被除数的高位与除数,如被除数高位大于除数,则溢出,置溢出标志,不执行除法。第 4 章 单片机汇编语言程序设计 图4.7除法程序的流程第 4 章 单片机汇编语言程序设计 例例 21将(R4R5R6R7)除以(R2R3),商放在(R6R7)中,余数放在(R4R5)中。NDIV:MOVA,R5;判商是否产生溢出CLRCSUBBA,R3MOVA,R4SUBBA,R2JNCNDIV1;溢出,转溢出处理MOVB,16;无溢出,执行除法第 4 章 单片机汇编语言程序设计 NDIV2:CLRC;被除数左移一位,低位送0MOVA,R7RLCAMOVR7,AMOVA,R6RLCAMOVR6,AMOVA,R5RLCAMOVR5,AXCHA,R4RLCAXCHA,R4第 4 章 单片机汇编语言程序设计 MOVF0,C;保护移出的最高位CLRCSUBBA,R3;部分余数与除数比较MOVR1,AMOVA,R4SUBBA,R2JBF0,NDIV3;移出的高位为1,肯定够减JCNDIV4;否则,(Cy)=0才够减NDIV3:MOVR4,A;回送减法结果MOVA,R1MOVR5,AINCR7;商上1第 4 章 单片机汇编语言程序设计 NDIV4:DJNZB,NDIV2;循环次数减1,若不为零则循环CLRF0;正常执行无溢出F0=0RETNDIV1:SETBF0;溢出F0=1RET- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 汇编语言 程序设计 课件
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【精****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【精****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【精****】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【精****】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文