单片机原理及其接口技术主目录上一页下一页结束第4章汇编语言程序设计教学目标4.1单片机汇编语言与指令格式4.2源程序的设计步骤和汇编4.3汇编语言程序设计本章小结思考题与习题单片机原理及其接口技术主目录上一页下一页结束教学目标通过本章教学,要求达到以下目标:1.熟悉汇编语言的语句结构;2.了解手工汇编,计算偏移量及转移地址的方法;3.了解程序设计的步骤,会画程序流程图;4.掌握顺序程序、分支程序、循环程序、子程序等基本程序的编制方法。单片机原理及其接口技术主目录上一页下一页结束4.1MCS51单片机汇编语言与指令格式4.1.1程序设计语言程序设计语言机器语言汇编语言高级语言单片机原理及其接口技术主目录上一页下一页结束机器语言由于构成计算机的电子器件特性所决定,计算机只能识别二进制代码。这种以二进制代码来描述指令功能的语言,称之为机器语言,用机器语言组成的程序,称为目标程序。计算机就是按照机器语言的指令来完成各种功能操作的,它具有程序简捷、占用存储空间小、执行速度快、控制功能强等特点。单片机原理及其接口技术主目录上一页下一页结束汇编语言用来替代机器语言的进行程序设计的一种语言,由助记符、保留字和伪指令等组成。很容易让人们所识别、记忆和读写。汇编语言编写出的程序是汇编语言源程序,可由“汇编程序”翻译成机器语言程序(即目标代码)。单片机原理及其接口技术主目录上一页下一页结束地址机器语言汇编语言形式二进制形式十六进制形式2000H0111010000000101B7405HMOVA,#05H2002H0010010000001010B240AHADDA,#0AH2004H1000000011111110B80FEHMOV20H,A单片机原理及其接口技术主目录上一页下一页结束汇编程序容易让人们所识别、记忆和读写,但不能为机器直接识别执行001010010101010101010101机器语言程序(即目标代码,机器可以识别执行010101010101)010101010101单片机原理及其接口技术主目录上一页下一页结束高级语言是面向过程和问题并能独立于机器的通用程序设计语言,是一种接近人们自然语言和常用数学表达式的计算机语言。高级语言编写的程序是不能被机器直接执行的,但可以被常驻在内存或磁盘上的解释程序或编译程序等编译成目标代码后才能被机器所执行。单片机原理及其接口技术主目录上一页下一页结束独立于机器,可移植性强结构化设计,程序清晰,但是占用存储空间大编译程序001010010101010101010101机器语言程序(即目标代码,机器可以识别执行010101010101)010101010101单片机原理及其接口技术主目录上一页下一页结束4.1.2格汇编语言格式•MCS—51单片机汇编语言指令的标准格式如下:[标号:]操作码[目的操作数][,源操作数][;注释]例如:LOOP:ADDA,#10H;(A)←(A)+10H(1)方括号[]表示该项是可选项,可有可无。(2)标号是用户设定的符号,它实际代表该指令所在的地址。标号必须以字母开头,其后跟1~8个字母或数字,并以“:”结尾。单片机原理及其接口技术主目录上一页下一页结束(3)操作码是用英文缩写的指令功能助记符。它确定了本条指令完成什么样的操作功能。如:ADD表示加法操作。任何一条指令都必须有该助记符项,不得省略。(4)目的操作数提供操作的对象,并表示操作结果存放单元的地址,它与操作码之间必须以一个或几个空格分隔。如上例中A表示操作对象是累加器A的内容,并指出操作结果又回送A存放。[标号:]操作码[目的操作数][,源操作数][;注释]例如:LOOP:ADDA,#10H;(A)←(A)+10H单片机原理及其接口技术主目录上一页下一页结束(5)源操作数指出的是一个源地址(或立即数),表示操作的对象或操作数来自何处。它与目的操作数之间要用“,”号隔开。(6)注释部分是在编写程序时,为了增加程序的可读性,由用户拟写对该条指令或该段程序功能的说明。它以分号“;”开头,可以用中文、英文或某些符号来表示,显然它不存入计算机,只出现在源程序中。[标号:]操作码[目的操作数][,源操作数][;注释]例如:LOOP:ADDA,#10H;(A)←(A)+10H单片机原理及其接口技术主目录上一页下一页结束操作数的5种合法形式1、数字形式:二进制、十进制、十六进制#01001100B,#20D,#0A0H2、工作寄存器和特殊功能寄存器R0~R7,ACC,SFR3、标号地址MOVA,M;设M已定义过4、带加减算符的表达式MOVA,M+15、采用$符JNBTF0,$[标号:]操作码[目的操作数][,源操作数][;注释]例如:LOOP:ADDA,#10H;(A)←(A)+10H单片机原理及其接口技术主目录上一页下一页结束指令性语句使CPU执行一个具体的操作。伪指令不要求计算机做任何操作,也没有对应的机器码,不产生目标程序,不影响程序的执行,仅仅是能够帮助进行汇编的一些指令。4.1.3汇编语言构成指令性语句:111条指令的助记符语句。指示性语句:伪指令语句。单片机原理及其接口技术主目录上一页下一页结束15常用伪指令单片机汇编语言程序设计中,除了使用指令系统规定的指令外,还要用到一些伪指令。伪指令又称指示性指令,具有和指令类似的形式,但汇编时伪指令并不产生可执行的目标代码,只是对汇编过程进行某种控制或提供某些汇编信息。下面对常用的伪指令作一简单介绍。单片机原理及其接口技术主目录上一页下一页结束用来指定程序或数据的起始位置;给出一些连续存放数据的地址;为中间运算结果保留一部分存储空间;为源程序中的符号和标号赋值;表示源程序结束等等。不同版本的汇编语言,伪指令的符号和含义可能有所不同,但基本用法是相似的。伪指令可以单片机原理及其接口技术主目录上一页下一页结束伪指令列表1、ORG--设置目标程序起始地址伪指令2、END--结束汇编伪指令3、DB--定义字节伪指令4、DW--定义字伪指令5、DS--预留存储空间伪指令6、EQU--等值伪指令7、DATA--数据地址赋值8、BIT--位地址定义伪指令单片机原理及其接口技术主目录上一页下一页结束18一、汇编起始指令ORG指令格式为:ORGnn该伪指令的功能是规定其后面的目标程序或数据块的起始地址。它放在一段源程序(主程序、子程序)或数据块的前面,说明紧跟在其后的程序段或数据块的起始地址就是ORG后面给出的地址。例如:ORG2000HSTART:MOVA,#7FH。。。。。。。单片机原理及其接口技术主目录上一页下一页结束例如:ORG2000HSTART:MOVA,#7FH…格式:[标号:]ORG地址(十六进制表示)74H7FH2000H1FFFH2001H机器码:747FH单片机原理及其接口技术主目录上一页下一页结束20例:ORG2000HMOVSP,#60HMOVR0,#2FHMOVR2,#0FFHORG伪指令说明其后面程序的目标代码在存储器中存放的起始地址是2000H,即存储器地址程序代码2000H7581602003H782F2005H7AFF单片机原理及其接口技术主目录上一页下一页结束21二、汇编结束指令END指令格式:[标号:]END地址或标号格式中标号以及END后面的地址或标号可有可无。功能:提供汇编结束标志。汇编程序遇到END后就停止汇编,对END以后的语句不予处理,故END应放在程序的结束处。单片机原理及其接口技术主目录上一页下一页结束22三、等值指令EQU(Equal)指令格式:字符名称EQU数字或汇编符号功能:使指令中的字符名称等价于给定的数字或汇编符号。特别注意:必须先赋值后使用,同一个标号只能赋值一次。例:PAEQU8001H即给字符PA赋值为8001H。单片机原理及其接口技术主目录上一页下一页结束书:131页。编程好习惯之一:上下对齐!ORG0500HAAEQUR1BBEQU10HDELAYEQU07E6HMOVR0,BB;R0←(10H)MOVA,AA;A←R1·······················LCALLDELAY;调07E6H子程序单片机原理及其接口技术主目录上一页下一页结束该伪指令的功能与EQU类似,可以将DATA右边表达式的值赋给左边的字符名称。表达式可以是常数、地址标号或表达式,但不可以是一个汇编符号(如R1等)。DATA和EQU的主要区别是:EQU中的字符名称是先定义后使用,而DATA中的字符名称没有这种限制。定义8位数据用DATA,定义16位数据用XDATA。格式:字符名称DATA表达式格式:字符名称EQU数字或汇编符号四、数据赋值指令DATA单片机原理及其接口技术主目录上一页下一页结束25五、定义字节指令DB指令格式:[标号:]DB8位二进制数表功能:把8位二进制数表依次存入从标号开始的连续的存储单元中。标号区段可有可无,DB指令之后的8位二进制数表是一个字节常数或用逗号隔开的字节串,也可以是用引号括起来的ASCII码字符串(一个ASCII字符相当于一个字节)。单片机原理及其接口技术主目录上一页下一页结束ORG2000HTAB1:DB30H,8AH,73DB01011010B,‘5’,‘A’30H8AH49H5AH35H41H2000H2001H2002H2003H2004H2005H由于ORG2000H,所以TAB1的地址为2000H,因此,以上伪指令经汇编后,将对2000H开始的连续存储单元赋值:;十进制数73以十六进制数存放;01011010B=5AH;35H是数字5的ASCII码;41H是字母A的ASCII码单片机原理及其接口技术主目录上一页下一页结束27六、定义字指令DW指令格式:[标号:]DW16位数据表功能:与DB相似,区别仅在于从指定地址开始存放的是指令中的16位数据。每个16位数据要占两个存储单元,高8位先存,低8位后存,这和MCS-51指令中的16位数据存放顺序是一致的。单片机原理及其接口技术主目录上一页下一页结束ORG1500HTAB2:DW1234H,80H,1012H34H00H80H00H0AH1500H汇编以后:1501H1502H1503H1504H1505H单片机原理及其接口技术主目录上一页下一页结束29七.定义空间伪指令DS格式:[标号:]DS表达式功能:从指定的地址开始,保留若干个存储单元作为备用的空间。单片机原理及其接口技术主目录上一页下一页结束ORG1000HSPC:DS20HDB30H,8FH汇编后从1000H开始,预留32(20H)个字节的内存单元,然后从1020H开始,按照下一条DB指令赋值,即(1020H)=30H,(1021H)=8FH。空32个单元30H8FH1000H1020H0FFFH1021H101FH单片机原理及其接口技术主目录上一页下一页结束31八、BIT位地址赋值伪指令格式:字符名称BIT位地址功能:把右边的位地址赋给左边的“字符名”。例如:ORG0300HA1BIT00HA2BITP1.0MOVC,A1MOVA2,C单片机原理及其接口技术主目录上一页下一页结束4.2源程序的设计步骤和汇编设计步骤1、拟定设计任务书2、建立数学模型3、确立算法4、绘制程序流程图5、编制汇编语言源程序6、上机调试单片机原理及其接口技术主目录上一页下一页结束33单片机汇编语言程序设计的基本步骤如下:(1)题意分析(2)画出程序流程图熟悉并了解汇编语言指令的基本格式和主要特点,明确被控对象对软件的要求,设计出算法。程序流程图也称为程序框图,是根据控制流程设计的,它可以使程序清晰,结构合理,便于调试。单片机原理及其接口技术主目录上一页下一页结束34(3)分配内存工作区及有关端口地址(4)编制汇编源程序。(5)编译、仿真、调试程序。(6)固化程序。分配内存工作区,要根据程序区、数据区、暂存区、堆栈区等预计所占空间大小,对片内外存储区进行合理分配并确定每个区域的首地址,便于编程使用。单片机原理及其接口技术主目录上一页下一页结束4.2源程序的设计步骤和汇编汇编(汇编程序)源程序目