第三章 汇编程序设计
- 格式:doc
- 大小:96.50 KB
- 文档页数:16
汇编语言程序设计第四版【课后习题答案】--囮裑為檤第3章汇编语言程序格式〔习题3.1〕伪指令语句与硬指令语句的本质区别是什么?伪指令有什么主要作用?〔解答〕伪指令语句与硬指令语句的本质区别是能不能产生CPU动作;伪指令的作用是完成对如存储模式、主存变量、子程序、宏及段定义等很多不产生CPU动作的说明,并在程序执行前由汇编程序完成处理。
〔习题3.2〕什么是标识符,汇编程序中标识符怎样组成?〔解答〕为了某种需要,每种程序语言都规定了在程序里如何描述名字,程序语言的名字通常被称为标识符;汇编语言中的标识符一般最多由31个字母、数字及规定的特殊符号(如-,$,?,@)组成,不能以数字开头。
〔习题3.3〕什么是保留字,汇编语言的保留字有哪些类型,并举例说明。
〔解答保留字是在每种语言中规定了有特殊意义和功能的不允许再做其它用处的字符串;汇编语言的保留字主要有硬指令助记、伪指令助记符、运算符、寄存器名以及预定义符号等。
汇编语言对大小写不敏感。
如定义字节数和字符串的DB就是伪指令助记符。
〔习题3.4〕汇编语句有哪两种,每个语句由哪4个部分组成?〔解答〕汇编语句有执行性语句和说明性语句;执行性语句由标号、硬指令助记符、操作数和注释四部分组成;说明性语句由名字、伪指令助记符、参数和注释四部分组成〔习题3.5〕汇编语言程序的开发有哪4个步骤,分别利用什么程序完成、产生什么输出文件。
〔解答〕⒈编辑文本编辑程序汇编语言源程序.asm⒉汇编汇编程序目标模块文件.obj⒊连接连接程序可执行文件.exe或.com⒋调试调试程序应用程序〔习题3.6〕区分下列概念:(1)变量和标号(2)数值表达式和地址表达式(3)符号常量和字符串常量〔解答〕(1)变量是在程序运行过程中,其值可以被改变的量;标号是由用户自定义的标识符,指向存储单元,表示其存储内容的逻辑地址。
(2)数值表达式一般是由运算符连接的各种常数所构成的表达式,地址表达式是由名字、标号以及利用各种的操作符形成的表达式。
第3-1讲 第3章 单片机汇编语言程序设计【课 题】MCS-51汇编语言编程【授课方法】在专业教室讲授,举例说明汇编语言编程应用。
【目的要求】了解本课程汇编语言编程的基础知识;理解MCS-51汇编语言编程方法;掌握MCS-51汇编语言编程相关规定和硬件知识。
【重点难点】灵活运用与编程有关的规定。
【教学过程】1、复习 2、程序设计的重要性 3、程序设计方法汇编语言程序设计微型机应用离不开应用程序的设计。
单片机程序设计多采用汇编语言编写。
本章介绍MCS51系统汇编语言程序编写的一般知识:有关规定、习惯用法、常见程序结构和编程方法。
要学会编写程序应掌握编程的一般知识,还要分析一些经典程序,从修改现有程序入手,先简后难,循序渐进,最后达到自已设计应用系统和编写程序的目的。
3.1 单片机汇编程序设计方法与流程3.1.1 汇编语言程序设计步骤用汇编语言编制程序的过程,称为汇编语言程序设计。
通常,汇编语言程序设计的步骤如下:整个汇编程序设计的流程图见图3.1,当然、短小程序可能不要这么复杂。
1、设计规划,建立数学模型设计前对项目作评估和规划,程序功能、运算精度、执行速度、各硬件特点、掌握设计的重点和难点。
2、选择适当的算法对于同一个任务,往往可用不同的程序实现。
此时应结合所用机器的指令系统,对不同的算法进行分析比较,经各方面综合考虑选择一种最佳算法,使程序精简,且执行速度快。
3、程序结构的设计程序结构设计是把所采用的算法转化为汇编语言程序的准备阶段,特别是对于情况复杂的大型课题,必须进行程序结构设计。
它可以分为模块化程序设计、结构程序设计及自顶向下设计等。
设计课题 划 设计规算法模型绘流程程图编 制序汇编 调试试运行完成修改程序修改修改规划算法流程仿真图3.1汇编语言程序设计流程图.4、编制汇编语言程序根据确定的算法及所选用的程序结构就可以绘制流程图,根据流程图并结合所选用的指令系统就可写出相应的汇编语言源程序。
5、汇编语言程序的调试汇编语言程序编好后必须进行调试,因为所编制的程序难免有错误,且程序需要优化。
3.1.2编制程序的流程图1、程序流程图的作用采用流程图表示法,可以直观形象地表示各部分的逻辑关系及程序结构。
方便地发现和分析程序算法存在的错误,便于掌握和进行交流。
所以,流程图是程序设计的重要工具。
2、程序流程图的组成程序流程图是用几何图形配以文字说明来描述程序的。
它不但形象地描述程序执行的过程而且清楚地表达程序结构的内在联系。
流程图中所采用的各种常用符号如下:(1)端点图它是一个圆形框(如图3.2 中开始和结束)表示程序的起止等相应的文字(2)流程线流程线如图3.2线条所示,它表示程序执行的流向。
(3)处理框处理框如图3.2所示,该框表示一种处理功能或者程序执行的过程。
框内用文字简要说明一段程序的功能或处理过程。
(4)判断框判断框如图3.2所示,该框用于指示一个判定点,从这点产生分支。
在框内应注明测试条件,而测试结果则注明在各分支流程线上。
(5))子程序框子程序框如图3.2所示,该框表示调用子程序,在该框内填入相应的子程序名称或入口地址。
图 3.2 流程图中常用符号如果要解决的问题较为复杂,通常设计“粗细”不同的程序流程图。
首先设计粗图框,力求反映编程者的总体设计思想及总体结构并侧重于模块之间的相互联系;然后设计详细框图,此时应侧重各个模块的具体实现。
当然、一个简单的程序也可直接写出,但要成为一个优秀的设计人员,开始就要养成良好的习惯,掌握大量的设计素材,学习他人经验。
3.1.3 单片机程序结构1 伪指令用汇编语言编写的程序通常需经过微机汇编变成机器码才能被执行。
为了对源程序汇编,在源程序中必须使用一些“伪指令”。
伪指令是便于程序阅读和编写的指令,它即不控制机器的操作也不能被汇编成机器代码,只为汇编程序所识别的常用符号,并指导汇编如何进行,故称为伪指令。
已是大家公认的习惯用法,MCS-51系列单片机的常用伪指令如下:1)、起始地址伪指令ORG起始地址伪指令ORG是用来规定目标程序段或数据块的起始地址。
通常,在汇编语言程序开始处均用ORG伪指令指定程序存放的起始地址。
2)、汇编结束伪指令END汇编结束伪指令END是用来告诉汇编程序,此源程序到此结束。
在一个程序中,只允许出一条END语句,而且必须安排在源程序的末尾。
否则,汇编程序对END语句后的所有语句都不进行汇编,3)、赋值伪指令EQU赋值伪指令EQU用于告诉汇编程序,将该伪指令右面的值赋给左面用户定义的符号,其格式如例题。
由EQU赋值的字符名称在源程序中可以作为数值使用,也可以作为数据地址、代码地址或位地址。
由EQU伪指令所定义的符号必须先定义后使用。
故该语句通常放在程序开头处。
例3.1BUFFER EQU 58H ;BUFFER的值是58HBLOCK EQU ADDER ;将标号ADDER赋值给字符名称BLOCKORG 4000H ;该语句下面的程序从4000H开始4000H E5F0 START:MOV A,B4002H 30E7 JNB ACC.7,DONE4004H F4 CPL A4005H F5FO DONE:MOV B,A4007H F558 MOV BUFFER,AEND4)、定义字节伪指令DB定义字节伪指令DB是用于告诉汇编程序从指定的地址单元开始定义若干个字节存储单元的内容。
其格式见练习二。
5)、定义字伪指令DW定义字伪指令DW是用来告诉汇编程序从指定的地址单元开始,定义若干个16位数据。
其格式如DB用法相同,只是一次定义16位数。
由于一个字长为16位,故要占两个存储单元。
在MCS-51单片机系统中,16位的高8位存入低地址单元,低8位存入高地址单元。
6)、数据地址赋值指令DATA数据地址赋值伪指令DATA是用于告诉汇编程序,把由表达式指定的数据地址或代码地址赋予规定的字符名称.DATA伪指令的功能是和EQU指令相似,但DATA伪指令所定义的符号可先使用后定义。
在程序中它常用来定义数据地址,该语句一般放在程序的开头或末尾。
7)、位地址赋值伪指令BIT位地址赋值伪指令BIT是用于告诉汇编程序,把位地址赋予规定的字符名称,常用于位处理的程序中,机器汇编通常是在PC机上用软件MedWin/QTH-8052F/EDIT等编辑,用编程器将程序固化在芯片内,供单片机运行。
3.1.4 汇编语言源程序人工汇编1、汇编程序的汇编过程用汇编语言编写的源程序必须通过汇编程序的汇编,才能使源程序转换成相应的由机器码指令组成的目标程序。
较长的程序一般采用微机汇编,短小程序或练习程序也用手工汇编。
2、人工汇编在单片机配套的计算机系统上,一般都配备汇编程序,其它微机需另外安装相应的软件,对于简单的实验程序可进行人工汇编,还会有一定好处,学生根据指令表一条条地将汇编语言程序的语句翻译成机器码指令,放到相应的地址,最后得到可运算的目标程序。
练习一二次后可掌握基本方法,本书中的练习有的给了机器码,有的没给,大家可参考、练习汇编。
3-2 单片机汇编语言程序设计【课题】MCS-51汇编语言程序设计初步【授课方法】在专业教室讲授【目的要求】了解本课程汇编语言编程的基础知识;理解MCS-51汇编语言编程方法;掌握MCS-51汇编语言顺序、分支、循环、子程序结构【重点难点】编程相关的技巧很多、全面掌握难度较大。
【教学过程】复习、单片机汇编语言编程初步、顺序、分支程序【教学内容】3.2 单片机汇编语言程序设计初步前面我们已学习了几个小程序,对程序有了初步了解,知道汇编语言是面向机器语言。
单片机汇编语言程序设计与所使用的机器的内部结构都有密切的关系。
必须充分了解所使用机器的“硬件环境”,才能着手进行汇编语言程序设计。
特别是在编制I/O接口程序时还需了解I/O接口电路、机器及外设的外特性。
为了设计一个高质量的程序,必须掌握程序设计的一般方法。
在汇编语言程序设计中,普遍采用结构化程序设计方法。
采用这种设计方法的主要依据是任何复杂的程序都可由顺序结构、分支结构及循环结构程序等构成。
每种结构只有一个入口和出口,整个程序也只有一个入口和出口。
结构程序设计的特点是程序的结构清晰、易于读写、易于验证、可靠性高。
下面主要介绍结构化程序设计的基本的程序设计方法。
3.2.1、顺序程序设计1、顺序结构顺序结构是程序结构中最简单一种。
用程序流程图表示时,是一个处理框紧接着一个处理框。
在执行程序时从第一条指令开始顺序执行直到最后一条指令为止。
例3.2 设有16位二进制数存放在8031单片机内部RAM的50H及51H单元中,要求将其算术左移一位(即原数各位均向左移1位,最低位移入0)后仍存放在原单元。
试编制相应的程序。
(5672H=01010110 01110010→10101100 11100100=ACE4H)分析:由于MCS-51系列单片机的指令系统只有8位二进制数的算术移位指令,而无16位二进制数的算术移位指令。
因此,要实现16位数的算术左移1位,只能分两次进行。
开始时将进位标志C清0,先进行低8位带进位循环左移,将低8位中的原最高位移至C,而C原来的0移至最低位。
然后进行高8位带进位循环左移,原低8位中最高位经C移至高8位中的最低位。
这样就实现了16位二进制数算术左移一位。
程序如下:4000 ORG 4000H4000 C3 BIHROL: CLR C ;C清04000 E551 MOV A,51H;低8位左环移一位4003 33 RLC A4004 F551 MOV 51H,A4006 E550 MOV A,50H,;高8位左环移一位4008 33 RLC A4009 F550 MOV 50H,A400B END本程序共有7条指令占用11个字节的程序存储空间。
例3.3 设在8031单片机内部RAM的40H单元中存放一个8位二进制数,请将其转换成相应的BCD码并由高位到低位顺序存入内部RAM以60H为首址的3个连续单元中。
试编写相应的程序。
注:单片机指令默认的数是十六进制,大家日常用十进制。
分析:要求是:80H=128D→01/02/08或0F3H=243D→02、04、03由于51系列单片机的指令系统中有除法指令,故它的转换可用运算实现。
先将此数除以100,其商即为百位数;再将余数除以10,其商即为十位数,而此时的余数即为个位数。
程序如下:ORG 4000HBINBCD: MOV RO, #60H ;设置存数地址指针R0初值MOV A,40H ;取被转换的二进制数MOV B,#100 ;置除数为100或64HDIV AB ;除以100,求百位数MOV @RO,A ;将百位数指定单元INC RO ;修改指针MOV A,#10 ;置除数为10XCH A,BDIV AB ;除以10,求十位数MOV @RO,A ;将十位数指定单元INC RO ;再次修改指针XCH A,B ;A中为个位数MOV @RO,A ;送个位数END ;结束例3.4 设在8031单片机的外部RAM的60H单元存有1字节代码,要求将其分解成两个4位字段。