51汇编语言程序设计.ppt
《51汇编语言程序设计.ppt》由会员分享,可在线阅读,更多相关《51汇编语言程序设计.ppt(86页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、 第第4 4章章 89C5189C51汇编语言程序的设计与调试汇编语言程序的设计与调试 本章主要介绍本章主要介绍程序设计的基本知识程序设计的基本知识及如何及如何使用使用汇编语言来进行基本的程序设计。汇编语言来进行基本的程序设计。4.1 4.1 汇编语言程序设计概述汇编语言程序设计概述 程序是若干指令的有序集合,单片机的运行就程序是若干指令的有序集合,单片机的运行就是执行这一指令序列的过程,编写这一指令序列是执行这一指令序列的过程,编写这一指令序列的过程称为的过程称为程序设计程序设计。4.1.1 4.1.1 机器语言、汇编语言和高级语言机器语言、汇编语言和高级语言 用于程序设计的用于程序设计的语
2、言基本上分为语言基本上分为3 3种:机器语种:机器语言、汇编语言和高级语言言、汇编语言和高级语言。1.1.机器语言机器语言 二进制代码表示的指令、数字和符号简称为机器语言二进制代码表示的指令、数字和符号简称为机器语言不易懂,难记忆,易出错。不易懂,难记忆,易出错。2 2汇编语言汇编语言 n英文助记符表示的指令称为英文助记符表示的指令称为符号语言符号语言或或汇编语言。汇编语言。n将汇编语言程序转换成为二进制代码表示的机器语言程序将汇编语言程序转换成为二进制代码表示的机器语言程序称为称为汇编程序。汇编程序。n经汇编程序经汇编程序“汇编(翻译)汇编(翻译)”得到的机器语言程序称为得到的机器语言程序称
3、为目目标程序标程序,原来的汇编语言程序称为,原来的汇编语言程序称为源程序源程序。汇编语言特点汇编语言特点:(1)(1)面向机器的语言,程序设计员须对面向机器的语言,程序设计员须对89C5189C51的硬件有相当深的硬件有相当深入的了解。入的了解。(2)(2)助记符指令和机器指令一一对应,用汇编语言编写的助记符指令和机器指令一一对应,用汇编语言编写的程序程序效率高效率高,占用,占用存储空间小存储空间小,运行,运行速度快速度快,用汇编语言能编,用汇编语言能编写出最优化的程序。写出最优化的程序。(3)(3)能能直接管理和控制硬件设备直接管理和控制硬件设备(功能部件),它能处理中断,(功能部件),它能
4、处理中断,也能直接访问存储器及也能直接访问存储器及I/OI/O接口电路。接口电路。汇编语言和机器语言汇编语言和机器语言都脱离不开具体机器的硬件,均是面都脱离不开具体机器的硬件,均是面向向“机器机器”的语言,缺乏通用性。的语言,缺乏通用性。3 3高级语言高级语言n不受具体机器的限制不受具体机器的限制,使用了许多数学公式和数学计算上的习使用了许多数学公式和数学计算上的习惯用语,惯用语,非常擅长于科学计算。非常擅长于科学计算。常用的如常用的如BASICBASIC、FORTRANFORTRAN以以及及C C语言等。语言等。n高级语言高级语言优点优点:通用性强,直观、易懂、易学,可读性好。:通用性强,直
5、观、易懂、易学,可读性好。n计算机不能直接识别和执行高级语言,需将其计算机不能直接识别和执行高级语言,需将其“翻译翻译”成机成机器语言才能识别和执行,进行器语言才能识别和执行,进行“翻译翻译”的专用程序称为的专用程序称为编译编译程序程序。n使用使用C C语言(语言(C51C51)、)、PL/MPL/M语言来进行语言来进行MCS-51MCS-51的应用程序设计。的应用程序设计。n对于程序的空间和时间要求很高的场合,汇编语言仍是必对于程序的空间和时间要求很高的场合,汇编语言仍是必不可缺的。不可缺的。nC C语言和汇编语言混合编程。语言和汇编语言混合编程。n在很多需要直接控制硬件的应用场合,则更是非
6、用汇编语在很多需要直接控制硬件的应用场合,则更是非用汇编语言不可。言不可。n使用汇编语言编程,是单片机程序设计的基本功之一使用汇编语言编程,是单片机程序设计的基本功之一4.1.2 4.1.2 汇编语言语句的种类和格式汇编语言语句的种类和格式两种基本类型:两种基本类型:指令语句指令语句和和伪指令语句伪指令语句(1 1)指令语句)指令语句已在第已在第3 3章介绍章介绍每一条指令语句在汇编时都产生一个指令代码每一条指令语句在汇编时都产生一个指令代码机器代码机器代码(2 2)伪指令语句)伪指令语句 是为汇编服务的,在汇编时是为汇编服务的,在汇编时没有机器代码与之对应。没有机器代码与之对应。MCS-51
7、MCS-51的汇编语言的的汇编语言的四分段格式四分段格式如下:如下:标号字段标号字段 操作码字段操作码字段 操作数字段操作数字段 注释字段注释字段规则:规则:(1 1)标号字段和操作字码段之间要有冒号)标号字段和操作字码段之间要有冒号“:”相隔;相隔;(2 2)操作码字段和操作数字段间的分界符是空格;)操作码字段和操作数字段间的分界符是空格;(3 3)双操作数之间用逗号相隔;)双操作数之间用逗号相隔;(4 4)操作数字段和注释字段之间的分界符用分号)操作数字段和注释字段之间的分界符用分号“;”相隔,相隔,操作码字段为必选项,其余各段为任选项。操作码字段为必选项,其余各段为任选项。例例4-14-
8、1 下面是一段汇编语言程序的四分段书写格式下面是一段汇编语言程序的四分段书写格式标号字段标号字段 操作码字段操作码字段 操作数字段操作数字段 注释字段注释字段 STARTSTART:MOV AMOV A,#00H#00H ;0A0A MOV R1 MOV R1,#10#10 ;10R110R1 MOV R2MOV R2,#00000011B#00000011B;3R23R2LOOPLOOP:ADD AADD A,R2 R2 ;(;(A A)+(R2R2)A ADJNZ R1DJNZ R1,LOOPLOOP;R1R1内容减内容减1 1不为零,则循环不为零,则循环 NOPNOP HERE HERE
9、:SJMP HERESJMP HERE基本语法规则:基本语法规则:1 1标号字段:标号字段:是语句所在地址的标志符号。是语句所在地址的标志符号。(1 1)标号后边必须跟以冒号)标号后边必须跟以冒号“:”(2 2)由)由1-81-8个个ASCIIASCII字符组成字符组成(3 3)同一标号在一个程序中只能定义一次)同一标号在一个程序中只能定义一次 (4 4)不能使用汇编语言已经定义的符号作为标号)不能使用汇编语言已经定义的符号作为标号 2 2操作码字段:操作码字段:是汇编语言指令中是汇编语言指令中唯一不能空缺唯一不能空缺的部分。的部分。汇编程序就是汇编程序就是根据这一字段来生成机器代码根据这一字
10、段来生成机器代码的。的。3 3操作数字段操作数字段 通常有单操作数、双操作数和无操作数三种情况。如果通常有单操作数、双操作数和无操作数三种情况。如果是双操作数,则操作数之间,要以逗号隔开。是双操作数,则操作数之间,要以逗号隔开。(1 1)十六进制、二进制和十进制形式的操作数表示)十六进制、二进制和十进制形式的操作数表示采用十六采用十六进制形式来表示进制形式来表示 ,某些特殊场合才采用二进制或十进制的,某些特殊场合才采用二进制或十进制的表示形式表示形式 。十六进制,后缀十六进制,后缀“H”H”。二进制,后缀二进制,后缀“B”B”。十进制,后缀十进制,后缀“D”D”,也可省略也可省略。若十六进制的
11、若十六进制的操作数以字符操作数以字符A A-F F中的某个开头时,则需在它中的某个开头时,则需在它前面加一个前面加一个“0”0”,以便在汇编时把它和字符,以便在汇编时把它和字符A AF F区别开来。区别开来。(2 2)工作寄存器和特殊功能寄存器的表示)工作寄存器和特殊功能寄存器的表示n采用工作寄存器和特殊功能寄存器的代号来表示,也可用其采用工作寄存器和特殊功能寄存器的代号来表示,也可用其地址来表示。地址来表示。n例如,例如,累加器可用累加器可用A A(或(或AccAcc)表示,也可用表示,也可用0E0H0E0H来表示,来表示,0E0H0E0H为累加器为累加器A A的地址。的地址。(3 3)美元
12、符号)美元符号$的使用的使用n用于表示该转移指令操作码所在的地址。用于表示该转移指令操作码所在的地址。n例如,例如,JNB F0JNB F0,$等价于等价于 HEREHERE:JNB F0JNB F0,HEREHERE n再如:再如:HEREHERE:SJMP HERESJMP HERE 可写为:可写为:SJMP$SJMP$4 4注释字段注释字段 n必须以分号必须以分号“;”开头,换行书写,但必须注意也要以分开头,换行书写,但必须注意也要以分号号“;”开头。开头。n汇编时,注释字段不会产生机器代码。汇编时,注释字段不会产生机器代码。4.1.3 4.1.3 伪指令伪指令n在在MCS-51 MCS
13、-51 汇编语言源程序中应有向汇编程序发出的指示汇编语言源程序中应有向汇编程序发出的指示信息,告诉它信息,告诉它如何完成汇编工作如何完成汇编工作,这是通过使用伪指令,这是通过使用伪指令来实现的。来实现的。n也称为汇编程序控制命令。只有在汇编前的源程序中才有也称为汇编程序控制命令。只有在汇编前的源程序中才有伪指令。经过汇编得到目标程序(机器代码)后,伪指伪指令。经过汇编得到目标程序(机器代码)后,伪指令已无存在的必要,所以令已无存在的必要,所以“伪伪”体现在汇编时,体现在汇编时,伪指令伪指令没有相应的机器代码产生没有相应的机器代码产生。常用的伪指令常用的伪指令:1.ORG1.ORG(ORiGin
14、ORiGin)汇编起始地址命令)汇编起始地址命令n在汇编语言源程序的开始,通常都用一条在汇编语言源程序的开始,通常都用一条ORGORG伪指令来实现规伪指令来实现规定程序的起始地址。如不用定程序的起始地址。如不用ORGORG规定,则汇编得到的目标程序规定,则汇编得到的目标程序将从将从0000H0000H开始。开始。n例如:例如:ORG 2000HORG 2000HSTARTSTART:MOV A,#00HMOV A,#00H规定标号规定标号STARTSTART代表地址为代表地址为2000H2000H开始。开始。n在在一一个个源源程程序序中中,可可多多次次使使用用ORGORG指指令令,来来规规定定
15、不不同同的的程程序序段段的的起起始始地地址址。但但是是,地地址址必必须须由由小小到到大大排排列列,地地址址不不能交叉、重叠能交叉、重叠。例如:。例如:ORG 2000HORG 2000H ORG 2500H ORG 2500H ORG 3000HORG 3000H 2.END(END of assembly)2.END(END of assembly)汇编终止命令汇编终止命令 汇编语言源程序的结束标志,用于终止汇编语言源程序的结束标志,用于终止源程序的汇编工作。在整个源程序中只能有源程序的汇编工作。在整个源程序中只能有一条一条ENDEND命令,且位于程序的最后。命令,且位于程序的最后。3 3D
16、BDB(Define ByteDefine Byte)定义字节命令定义字节命令 在程序存储器的连续单元中定义字节数据。在程序存储器的连续单元中定义字节数据。ORG 2000HORG 2000HDB 30HDB 30H,40H40H,2424,“C”C”,“B”B”n汇编后:汇编后:(2000H2000H)=30H=30H(2001H2001H)=40H=40H(2002H2002H)=18H=18H(1010进制数进制数2424)(2003H2003H)=43H=43H(字符字符“C”C”的的ASCIIASCII码)码)(2004H2004H)=42H=42H(字符字符“B”B”的的ASCII
17、ASCII码)码)nDBDB功能是功能是从指定单元开始定义(存储)若干个字节,从指定单元开始定义(存储)若干个字节,1010进制数自然转换成进制数自然转换成1616进制数,字母按进制数,字母按ASCIIASCII码存储。码存储。4 4DWDW(Define WordDefine Word)定义数据字命令)定义数据字命令n从从指指定定的的地地址址开开始始,在在程程序序存存储储器器的的连连续续单单元元中中定定义义1616位位的数据字。的数据字。n例如:例如:ORG 2000HORG 2000H DW 1246H DW 1246H,7BH7BH,1010n汇编后:汇编后:(2000H2000H)=1
18、2H12H;第;第1 1个字个字(2001H2001H)=46H46H (2002H2002H)=00H=00H;第;第2 2个字个字(2003H2003H)=7BH=7BH(2004H2004H)=00H=00H;第;第3 3个字(个字(2005H2005H)=0AH=0AH(2005H2005H)=0AH=0AH 5 5EQUEQU(EQUateEQUate)赋值命令)赋值命令n用于用于给标号赋值给标号赋值。赋值以后,其标号值在整。赋值以后,其标号值在整个程序有效。个程序有效。n例如例如:TEST EQU 2000HTEST EQU 2000H 表示标号表示标号TEST=2000HTEST
19、=2000H,在汇编时,凡是遇到,在汇编时,凡是遇到标号标号TESTTEST时,均以时,均以2000H2000H来代替。来代替。4.1.4 4.1.4 汇编语言程序设计步骤汇编语言程序设计步骤(1 1)分析问题,确定算法)分析问题,确定算法(2 2)根据算法,画出程序框图)根据算法,画出程序框图(3 3)分配内存工作区及有关端口地址)分配内存工作区及有关端口地址(4 4)编写程序)编写程序,养成在程序的养成在程序的适当位置上加上注释适当位置上加上注释的的 好习惯。好习惯。(5 5)上机调试)上机调试n编写完毕的程序,必须编写完毕的程序,必须“汇编汇编”成机器代码,才能调试和运成机器代码,才能调
20、试和运行,调试与硬件有关程序还要借助于仿真开发工具并与硬件行,调试与硬件有关程序还要借助于仿真开发工具并与硬件连接。连接。4.2 4.2 汇编语言源程序的汇编汇编语言源程序的汇编n汇编语言源程序汇编语言源程序“翻译翻译”成机器代码(指令代码)成机器代码(指令代码)的过程称为的过程称为“汇编汇编”。n汇编可分为汇编可分为手工汇编手工汇编和和机器汇编机器汇编两类。两类。4.2.1 4.2.1 手工汇编手工汇编 人工查表翻译指令人工查表翻译指令。但遇到的相对转移指令的偏移。但遇到的相对转移指令的偏移量的计算,要根据转移的目标地址计算偏移量,不量的计算,要根据转移的目标地址计算偏移量,不但麻烦,且容易
21、出错。但麻烦,且容易出错。4.2.2 4.2.2 机器汇编机器汇编n用编辑软件进行源程序的用编辑软件进行源程序的编辑编辑。编辑完成后,生成一个。编辑完成后,生成一个ASCIIASCII码文件,码文件,扩展名为扩展名为“.ASM”.ASM”。然后在微计算机上运行。然后在微计算机上运行汇编程序,把汇编语言源程序翻译成机器代码。汇编程序,把汇编语言源程序翻译成机器代码。n交叉汇编交叉汇编汇编后的机器代码是在另一台计算机(这里是汇编后的机器代码是在另一台计算机(这里是单片机)上运行。单片机)上运行。MCS-51MCS-51单片机的应用程序的完成,应经过三个步骤:单片机的应用程序的完成,应经过三个步骤:
22、(1 1)在微计算机上,运行编辑程序进行源程序的)在微计算机上,运行编辑程序进行源程序的输入和编辑输入和编辑;(2 2)对源程序进行)对源程序进行交叉汇编交叉汇编得到机器代码;得到机器代码;(3 3)通通过过微微计计算算机机的的串串行行口口(或或并并行行口口)把把机机器器代代码码传传送送到到用用户样机(或在线仿真器户样机(或在线仿真器)上进行程序的调试和运行。)上进行程序的调试和运行。第一步,第一步,只需在微计算机上使用通用的编辑软件即可完成。只需在微计算机上使用通用的编辑软件即可完成。第二步第二步,交叉汇编所用的汇编程序可在购买单片机的仿真开,交叉汇编所用的汇编程序可在购买单片机的仿真开 发
23、工具时,由厂商提供。发工具时,由厂商提供。第三步第三步,要借助于单片机仿真开发工具进行。,要借助于单片机仿真开发工具进行。n有时,在分析某些产品的程序的机器代码时,有时,在分析某些产品的程序的机器代码时,需将需将机器代码机器代码翻译成翻译成汇编语言源程序汇编语言源程序,称为,称为“反汇编反汇编”。例例4-24-2 下下面面是是一一段段源源程程序序的的汇汇编编结结果果,读读者者可可通通过过查查第第3 3章章的的指指令令表表,进进行行手手工工汇汇编编,来来验验证证下下面面的的汇汇编编结结果果是是否否正正确确。机器码从机器码从1000H单元开始存放。单元开始存放。见表见表4-14-1:4.3 4.3
24、 汇编语言实用程序设计汇编语言实用程序设计 4.3.1 4.3.1 汇编语言程序的基本结构汇编语言程序的基本结构 顺序结构顺序结构、分支结构分支结构和和循环结构循环结构,子程序子程序和和中断服务子程序中断服务子程序。1 1顺序结构顺序结构 2 2分支结构分支结构 程序中含有转移指令,程序中含有转移指令,无条件分支,有条件分支无条件分支,有条件分支。有条件分支又分为:有条件分支又分为:单分支单分支结构和结构和多分支多分支结构。结构。3 3循环结构循环结构 4 4子程序子程序 5 5中断服务子程序中断服务子程序4.3.2 4.3.2 子程序的设计子程序的设计1.1.子程序设计原则和应注意的问题子程
25、序设计原则和应注意的问题n一种能完成某一特定任务的程序段一种能完成某一特定任务的程序段。其资源要为所有调用程。其资源要为所有调用程序共享。因此,子程序在结构上应具有独立性和通用性。序共享。因此,子程序在结构上应具有独立性和通用性。n编写子程序时应注意以下问题:编写子程序时应注意以下问题:1 1子程序的第一条指令的地址称为子程序的入口地址。该指子程序的第一条指令的地址称为子程序的入口地址。该指令前令前必须有标号必须有标号。2 2主程序调用子程序主程序调用子程序 两条子程序调用指令:两条子程序调用指令:(1 1)绝对调用指令:)绝对调用指令:ACALL addr11ACALL addr11 (2
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 51 汇编语言 程序设计
限制150内