您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > 项目4汇编语言程序设计
项目4汇编语言程序设计什么是程序设计?程序设计=结构+算法。程序设计就像盖房子,数据结构就像砖、瓦,而算法就是设计图纸。你若想盖房子首先必须有原料(数据结构),但是这些原料不能自动地盖起了你想要的房子;你必须按照设计图纸(算法)上的说明一砖一瓦地去砌。这样你才能拥有你想要的房子。程序设计也一样,程序设计时你得按照程序规定的功能去编写,而程序的功能是实现就是算法的具体体现。所以通俗地说:你必须按照特定的规则,把特定的功能语句和基本结构按照特定的顺序排列起来,形成一个有特定功能的程序,这就是:程序设计=结构+算法。一般说来,计算机程序设计语言种类很多,不仅有机器语言和汇编语言,还有很多高级语言。对单片机而言,通常使用汇编语言或C语言进行程序设计,程序较大时一般采用C语言编写,但用汇编语言编写的程序执行的效率较高。程序设计完成后,然后利用计算机或人工方法将汇编语言或C语言程序转化为单片机可以执行的机器语言。转换前的汇编语言或C语言程序被称为源程序,转换后的机器语言程序被称为目标程序,转换过程也叫汇编过程,通过计算机或人工转换的方法又被称为计算机汇编或手工汇编。计算机汇编要使用专门的软件,叫汇编软件。项目4汇编语言程序设计4.1源程序的编制•4.1.1程序设计步骤•在对单片机系统进行程序设计时,必须考虑硬件资源的配置,当硬件系统设计完成后,可以按照以下步骤进行程序设计。•1.预完成任务的分析•2.进行算法的优化•3.绘制程序流程图•4.分配资源•5.编写源程序•6.程序优化•7.编译,调试,修改和最后确定源程序项目4汇编语言程序设计用图形符号将总体设计思路及程序流向绘制在平面图上。从而使程序的结构关系直观明了,便于检查和修改,它直观清晰的体现了程序的设计思路,是程序设计的依据。绘制流程图时,首先画出简单的功能流程图粗框图,再对功能流程图进行扩充和具体化,即对存储器标志位等单元做具体的分配和说明,把功能图上的每一个粗框图转化为具体的存储器或地址单元,从而绘制出详细的程序流程图。流线程序执行顺序流向线表示处理功能端点符号程序的开始和结束符号表示判断功能判断符号处理符号连接符号用来实现流程图之间的连接程序流程图的绘制项目4汇编语言程序设计4.1.2汇编语言源程序的格式汇编语言源程序是由若干语句组成的,每一语句可由4个部分组成:标号、操作码、操作数及注释。每一部分间以不同的分隔符分隔,语句格式如下:[标号]:操作码[目的操作数][源操作数];[注释]其中[]项为可选项,视具体的指令选用.标号是表示该语句所在地址的标志符号,使用标号可方便程序中的其他语句访问该语句。标号由字母打头的1-8个字母数字串组成,但指令保留符、寄存器名、位址记忆符、伪指令符等都不能作标号使用。操作码表示操作的性质,它是汇编指令中唯一不能缺省的部分。操作数表示操作的对象,在一条语句中,操作数可能是空白或以逗号分开的几个。注释是对语句或程序段功能的解释说明有助于的阅读和维护。项目4汇编语言程序设计4.1.3汇编语言源程序的汇编将汇编语言源程序“翻译”成机器语言目标程序的过程称为汇编,对单片机助记符的汇编有两种方法:人工汇编和机器汇编。人工汇编是用人工查表将源程序译成机器码。一般分为两步进行。第一步将源程序中的指令逐条译成目标码,指令中的标号地址待求。第二步由伪指令求出标号所代表的具体地址,进行有关程序存储区的数据操作并进行偏移量的计算。机器汇编是将源程序输入计算机后,由汇编程序实现翻译工作,产生相应的机器码。这是一种非常高效和方便的方法。项目4汇编语言程序设计4.1.4伪指令在机器汇编时,对汇编过程进行控制和指导的指令称为伪指令。在汇编过程中,伪指令供汇编程序识别和执行但不产生可执行的目标代码。如规定汇编生成的目标代码在ROM中的存放区域,给源程序符号、标号赋值,指示汇编结束等。每种汇编程序都有自己的伪指令,标准的MCS-51定义的伪指令常用的有以下7条。1.汇编其始地址伪指令——ORG(Origin)格式:ORG16位地址功能:规定该指令后的下一段源程序经汇编后生成的代码存放的起始地址。例如:ORG0500HSTART:MOVA,R0……ENDORG伪指令总是出现在每段源程序或数据块的开始,汇编语言源程序中多处使用ORG指令,可使程序员把子程序、数据块存放在ROM的任何位置。每当ORG出现时,下条指令的存放地址由此重新定位,所以ORG定义地址的顺序应有小到大,且不能重叠。项目4汇编语言程序设计2.汇编结束伪指令-END(EndofAssembly)指令格式:[标号]:END功能:结束汇编语言源程序的操作。在源程序中只能有一条END,END后所写的指令,汇编程序不予处理。项目4汇编语言程序设计3.符号赋值伪指令——EQU(EQUate)指令格式:字符名称EQU数或汇编符号功能:将一个数或特定的汇编符号赋给指定的字符名称。字符名称为一自定的符号,而不是标号,字符名称后无“:”。字符名称可用来作数据地址,立即数,位地址或者是一代码地址,其值可以是一个8位数,也可以是16位数。例如:TESTEQU20HMOVA,TEST这里字符名称TEST就代表了内部RAM20H地址单元。又例如:A1EQU10HMOVA,A1这里A1代表片内RAM的直接地址单元10H。使用EQU伪指令可以把抽象的数字地址表示成有一定意义的符号,增强程序的可读性。项目4汇编语言程序设计4.定义数据字节伪指令——DB(DefineByte)格式:[标号:]DB<项或项表>项或项表是指一个字节,逗号隔开的8位二进制的数或字符串,或撇号’括起来的ASCII字符串。功能:从标号指定的地址单元开始,在程序存储器中存入一组8位二进制数,或者将一个数据表格存入程序存储器。这条伪指令汇编后影响程序存储器的内容。例如:ORG1100HTAB:DB01H,04H,09H,10HDB00001111B,‘1’,‘A’,‘BC’项目4汇编语言程序设计5.定义数据字命令——DW(DefineWord)格式:[标号:]DW<项或项表>功能:DW的功能和DB类似,DW是从标号指定的地址开始存放16位而非8位二进制数,存放时,数据字的高8位在前(低地址),低8位在后(高地址)。例如:ORG5000HMOVA,#30H………ORG5020HADDTAB:DW1234H,100H,10………;END一条DB和DW语句定义的数表其数的个数不得超过80个。当数据的数目较多时,可使用多个定义命令。在MCS-51程序设计应用中,常以DW来定义地址。项目4汇编语言程序设计6.预留存储区伪指令——DS(DefineStorage)格式:[标号:]DS<表达式>功能:本命令用于从指定地址开始,保留DS之后表达式的值所需数目的字节单元作为存储区以备后用。汇编时,对这些单元不赋值。例如:ORG0100HMOVA,#50H………ADDRTABL:DS05HDB20HEND从标号ADDRTABL代表的地址开始,保留5个连续的ROM地址单元,第6个单元存放20H。对MCS-51单片机来说,DB,DW,DS伪指令只能对程序存储器使用,而不能对数据存储器进行初始化。项目4汇编语言程序设计7.位地址赋值伪指令——BIT格式:[字符名称]BIT<位地址>功能:本命令用于给字符名称赋以位地址。其中<位地址>可以是绝对地址,也可以是符号地址(即位符号名称)。例如:AQBITP1.0A2BIT07H这两条指令分别把P1.0的位地址赋给变量AQ,位地址07H赋给符号名A2,在其后的编程中AQ和A2就可以作为位地址使用。项目4汇编语言程序设计4.1.5程序设计技巧1.模块化程序设计方法单片机应用系统的程序一般由包含多个模块的主程序和各种子程序组成。每一程序模块都要完成一个明确的任务,实现某个具体的功能,如发送、接收、延时、打印、显示等。采用模块化的程序设计方法,就是将这些不同的具体功能程序进行独立的设计和分别调试,最后将这些模块程序装配成整体程序并进行联调。项目4汇编语言程序设计把一个多功能的、复杂的程序划分为若干个简单的、功能单一的程序模块的程序设计方法具有明显的优点:1)单个模块结构的程序功能单一,易于设计、编写、调试及修改;2)有利于程序的优化和分工,从而可使多个程序员同时进行程序的编写和调试,加快软件研制进度;3)提高了程序的阅读性和可靠性,使程序的结构层次一目了然,同时4)对程序的修改可局部进行,其他部分可以保持不变,便于功能扩充和版本升级;5)对于使用频繁的子程序可以建立子程序库,便于多个模块调用。项目4汇编语言程序设计模块的划分有很大的灵活性,但也不能随意划分。划分时应遵循下述原则:1)每个模块应具有独立的功能,能产生一个明确的结果,这就是单模块的功能高内聚性。2)模块之间的控制耦合应尽量简单,数据耦合应尽量少,这就是模块间的低耦合性。控制耦合是指模块进入和退出的条件及方式,数据耦合是指模块间的信息交换(传递)方式、交换量的多少及交换的频繁程度。3)模块长度适中。模块语句的长度通常在20条~100条的范围较合适。模块太长时,分析和调试比较困难,失去了模块化程序结构的优越性;过短则模块的连接太复杂,信息交换太频繁,因而也不合适。项目4汇编语言程序设计2.程序设计技巧1)尽量采用循环结构和子程序。2)尽量少用无条件转移指令。3)对于通用的子程序,考虑到其通用性,除了用于存放子程序入口参数的寄存器外,子程序中用到的其他寄存器的内容应压入堆栈(返回前再弹出)进行现场保护,并要特别注意堆栈操作的压入和弹出的平衡。一般不必把标志寄存器压入堆栈。4)对于中断处理子程序除了要保护程序中用到的寄存器外,还应保护标志寄存器。5)累加器是信息传递的枢纽。项目4汇编语言程序设计4.2程序结构4.2.1顺序程序顺序结构是按照逻辑操作顺序,从某一条指令开始逐条顺序执行,直至某一条指令为止,无分支,也无循环。顺序结构是所有程序设计中最基本、最单纯的程序结构形式,在程序设计中使用最多,因而是一种最简单且应用最普遍的程序结构。一般实际应用程序远比顺序结构复杂得多,但它是组成复杂程序的基础和主干。项目4汇编语言程序设计【例4.1】将两个半字节数合并成一个一字节数。设内部RAM40H、41H单元中分别存放着8位二进制数。要求取出两个单元的低半字节,合并成一个字节后,存入42H单元。开始(40H)内容送A,屏蔽高位A与R1或后送入(42H)交换高低位,送入R1(41H)内容送A,屏蔽高位返回图4-1例1程序流程图项目4汇编语言程序设计【例4.2】用顺序结构程序编写三字节无符号数的加法程序。设被加数存放在:40H(高字节),41H(中字节),42H(低字节)加数存放在:43H(高字节),44H(中字节),45H(低字节)运算结果仍存在被加数单元中。开始取低字节数据返回相加后送回被加数单元取中字节数据带进位位相加后送回被加数单元取高字节数据带进位位相加后送回被加数单元图4-2例2程序流程图项目4汇编语言程序设计4.2.2分支程序通常,单纯的顺序结构程序只能解决一些简单的算术、逻辑运算,或者简单的查表、传送操作等。实际问题一般都是比较复杂的,总是伴随有逻辑判断或条件选择,要求计算机能根据给定的条件进行判断,选择不同的处理路径,从而表现出某种智能。根据程序要求改变程序执行顺序,即程序的流向有两个或两个以上的出口,根据指定的条件选择程序流向的程序结构我们称为分支程序结构。通常根据分支程序中出口的个数分为单分支结构程序(两个出口)和多分支结构程序(三个或三个以上出口)。在MCS-51指令系统中,通过条件判断实现单分支程序转移的指令有JZ、JNZ、CJNE和DJNZ等。此外,还有以位状态为条件,进行程序分支的指令JC、JNC、JB、JNB和JBC等。使用这些指令,可以完成或为0、1,或为正、为负,以及相等、不相等各种条件判断,以实现程序有条件地转移。项目4汇编语言程序设计1.两分支程序设计【例4.3】两个无符号数比较(两分支)。内部RAM的30H单元和31H单元各存放了一个8位无符号数,请比较这两个数的大小,大
本文标题:项目4汇编语言程序设计
链接地址:https://www.777doc.com/doc-803530 .html