单片机原理及应用技术 教学课件 ppt 作者 牛月兰 第4章 AT89S51汇编语言程序设计

上传人:E**** 文档编号:89493535 上传时间:2019-05-25 格式:PPT 页数:109 大小:1,013.50KB
返回 下载 相关 举报
单片机原理及应用技术 教学课件 ppt 作者 牛月兰 第4章  AT89S51汇编语言程序设计_第1页
第1页 / 共109页
单片机原理及应用技术 教学课件 ppt 作者 牛月兰 第4章  AT89S51汇编语言程序设计_第2页
第2页 / 共109页
单片机原理及应用技术 教学课件 ppt 作者 牛月兰 第4章  AT89S51汇编语言程序设计_第3页
第3页 / 共109页
单片机原理及应用技术 教学课件 ppt 作者 牛月兰 第4章  AT89S51汇编语言程序设计_第4页
第4页 / 共109页
单片机原理及应用技术 教学课件 ppt 作者 牛月兰 第4章  AT89S51汇编语言程序设计_第5页
第5页 / 共109页
点击查看更多>>
资源描述

《单片机原理及应用技术 教学课件 ppt 作者 牛月兰 第4章 AT89S51汇编语言程序设计》由会员分享,可在线阅读,更多相关《单片机原理及应用技术 教学课件 ppt 作者 牛月兰 第4章 AT89S51汇编语言程序设计(109页珍藏版)》请在金锄头文库上搜索。

1、1,第4章 AT89S51汇编语言程序设计,2,第4章 目录 4.1 汇编语言程序设计概述 4.1.1 单片机编程语言 4.1.2 汇编语言语句和格式 4.1.3 伪指令 4.2 汇编语言源程序的汇编 4.2.1 手工汇编 4.2.2 机器汇编 4.3 编程的步骤、方法和技巧 4.3.1 编程步骤 4.3.2 编程的方法和技巧,3,4.4 AT89S51汇编语言程序设计举例 4.4.1 顺序结构程序设计 4.4.2 子程序的设计 4.4.3 查表程序设计 4.4.4 关键字查找程序设计 4.4.5 数据极值查找程序设计 4.4.6 数据排序程序设计 4.4.7 分支转移程序设计 4.4.8 循

2、环程序设计,4,4.1 汇编语言程序设计概述 程序是完成某一特定任务的若干指令的有序集合。单片机运行就是执行指令序列的过程。编写这一指令序列的过程称为程序设计。 4.1.1 单片机编程语言 常用的编程语言是汇编语言和高级语言。 1汇编语言 汇编语言是一种面向机器的程序设计语言,它用英文字符来代替对应的机器语言。例如用MUL代替机器语言中的乘法运算。这些英文字符被称为助记符。用这种助记符表示指令系统的语言称为汇编语言,用汇编语言编写的程序称为汇编语言程序。,5,计算机不能直接识别在汇编语言中出现的字母、数字和符号,需要将汇编语言源程序转换(翻译)成为二进制代码表示的机器语言程序,才能识别和执行。

3、通常将这一转换(翻译) 工作称为汇编,完成“翻译”的程序称为汇编程序。经汇编程序“汇编”得到的以“0”、“1”代码形式表示的机器语言程序,计算机能够识别和执行,因此这一机器语言程序称为目标程序,原来的汇编语言程序称为源程序。源程序、汇编程序与目标程序之间的关系如图4-1所示。,图4-1 汇编过程示意图,6,汇编语言的优点:用汇编语言编写程序效率高,占用存储空间小,运行速度快,能编写出最优化的程序。 汇编语言的缺点:可读性差,离不开具体的硬件,是面向“硬件”的语言,通用性差。 2高级语言 高级语言不受具体“硬件”的限制,优点:通用性强,直观、易懂、易学,可读性好。 计算机也不能直接识别和执行高级

4、语言,需要将其转换为机器语言才能识别和执行。对于高级语言,这一转换工作通常称为编译。进行编译的专用程序称为编译程序。 目前多数的51单片机用户使用C语言(C51)来进行程序设计,已公认为高级语言中高效简洁而又贴近51单片机硬件的编程语言。C51已成为单片机的实用高级编程语言。,7,尽管目前已有不少设计人员使用C51来进行程序开发。但是,汇编语言是计算机能提供给用户的最快而又最有效的语言,也是能利用计算机所有硬件特性并能直接控制硬件的唯一语言。因而,在对程序的空间和时间要求很高的场合,汇编语言仍必不可少。在这种场合下,可使用C语言和汇编语言混合编程。在很多需要直接控制硬件且对实时性要求较高的场合

5、,则必须用汇编语言。 由于汇编语言是面向机器的语言,因此使用汇编语言进行程序设计,必须熟悉计算机的系统结构、指令系统、寻址方式等功能,才能编写符合要求的程序。因此要求设计者具有软硬结合的功底。掌握汇编语言并能进行程序设计,是学习和掌握单片机程序设计的基本功之一。,8,4.1.2 汇编语言语句和格式 汇编语言有两种基本语句:指令语句和伪指令语句。 1. 指令语句 每一个指令语句在汇编时都产生一个目标代码(机器代码) ,执行该目标代码对应着机器的一种操作。 2. 伪指令语句 为了便于编程和对汇编语言程序进行汇编,各种汇编程序都提供一些特殊的指令供编程使用,这些指令通常称为伪指令。伪指令又称为汇编语

6、言控制译码指令。“伪”体现在汇编时不产生机器指令代码,不影响程序的执行,仅指明在汇编时执行一些特殊的操作。伪指令是控制汇编(翻译) 过程的一些控制命令。例如,为程序指定一个存储区,将一些数据、表格常数存放在指定的存储单元,说明源程序结束等。,9,用AT89S51汇编语言编写的源程序行(一条语句)包括4个部分,也叫4个字段,汇编程序能识别它们。这4个字段是: 标号: 操作码 操作数 ;注释 每个字段之间要用分隔符分隔,而每个字段内部不能使用分隔符。标号字段和操作码字段之间要有冒号“:”分隔;操作码字段和操作数字段间的分隔符是空格“ ”;双操作数之间用逗号“,”相隔;操作数字段和注释字段之间的分隔

7、符用分号“;”。任何语句都必须有操作码字段,其余各段为任选项。,10,【例4-1】下面是一段实现将7连加15次运算的程序,相应的四分段书写格式。 标号字段 操作码字段 操作数字段 注释字段 START: MOV A, #00H ;0A MOV R1, #15 ;15R1 MOV R2, #07H ;07HR2 LOOP: ADD A, R2 ;(A)(R2)A DJNZ R1, LOOP ;R1减1不为零,则 ;跳LOOP处 NOP HERE: SJMP HERE 4个字段应该遵守的基本语法规则如下。,11,1标号 标号用来说明指令的地址。在指令语句中,标号位于一个语句的开头位置。标号是用户定

8、义的符号地址。一条指令的标号是该条指令的符号名字,标号的值是汇编这条指令时指令的地址。汇编程序把存放该指令目标码第一字节存储单元的地址赋给该标号,所以,标号又叫指令标号。如标号“START”和“LOOP”等。有关标号规定如下: (1) 标号由以英文字母开始的18个ASCII码字符组成,第一个字符必须是字母, 其余字符可以是字母、数字或其它特定字符,以冒号“:”结尾。 (2) 同一标号在一个程序中只能定义一次,不能重复定义。 (3) 不能使用汇编语言已经定义的符号作为标号,如指令助记符、伪指令以及寄存器的符号名称等。 (4) 标号的有无,取决于本程序中的其他语句是否访问该条语句。如无其他语句访问

9、,则该语句前不需标号。,12,2操作码 操作码字段是指令的助记符或定义符,用来表示指令的性质,规定这个指令语句的操作类型,操作码是汇编语言指令中唯一不能空缺的部分。 3操作数 操作数字段给出的是参与运算或进行其它操作的数据或这些数据的地址。即指令的操作数或操作数地址。 在本字段中,操作数的个数因指令的不同而不同。通常有单操作数、双操作数和无操作数三种情况。 如果是多操作数,则操作数之间要以逗号隔开。 操作数表示时,有几种情况需注意:,13,(1) 十六进制、二进制和十进制形式的操作数表示 为了方便用户,汇编语言指令允许以各种数制表示常数,亦即常数可以写成二进制、十进制或十六进制等形式。常数总是

10、要以一个数字开头。多数情况,操作数或操作数地址是采用十六进制形式来表示的,则需加后缀“H”(H表示十六进制) 。 若十六进制操作数以字符AF开头,则前面加一个“0”,以便汇编时把它和字符AF区别开。在某些特殊场合用二进制表示,需加后缀“B”(B表示二进制) 。若操作数采用十进制形式,则需加后缀“D”( D表示十进制) ,也可省略“D”。 (2) 工作寄存器和特殊功能寄存器的表示 当操作数为工作寄存器或特殊功能寄存器时,允许用工作寄存器和特殊功能寄存器的代号表示。,14,例如,工作寄存器用R7R0,累加器用A(或Acc) 表示。另外,工作寄存器和特殊功能寄存器也可用其地址来表示,如累加器A可用其

11、地址E0H来表示。 (3) $ 操作数字段中还可以使用一个专门符号“$”,用来表示程序计数器的当前值,这个符号最常出现在转移指令中,如“JNB TF0, $”表示若TF0为0,则仍执行该指令;否则往下执行(它等效于“$: JNB TF0, $”) 。 4注释 注释字段用于解释指令或程序的含义,只用于改善程序的可读性。良好的注释是汇编语言程序编写中的重要组成部分。使用时须以分号“;”开头,长度不限,一行写不下可换行书写,但注意也要以分号“;”开头。 汇编时,遇到“;”就停止“翻译”。因此,注释字段不会产生机器代码。,15,4.1.3 伪指令 在汇编语言源程序中应有向汇编程序发出的指示信息,告诉它

12、如何完成汇编工作,这是通过伪指令来实现。伪指令不属于指令系统中的汇编语言指令,它是程序员发给汇编程序的命令,也称为汇编程序控制命令。只有在汇编前的源程序中才有伪指令。“伪”体现在汇编后,伪指令没有相应的机器代码产生。 伪指令具有控制汇编程序的输入/输出、定义数据和符号、条件汇编、分配存储空间等功能。不同汇编语言的伪指令有所不同,但基本内容相同。下面介绍常用的伪指令。,16,1ORG(ORiGin)汇编起始地址命令 格式:ORG 16位地址 功能是规定该伪指令后面程序的汇编地址,即汇编后生成目标程序存放的起始地址。也就是源程序的开始,用一条ORG伪指令规定程序的起始地址。如果不用ORG,则汇编得

13、到的目标程序将从0000H地址开始。例如: ORG 2000H START: MOV A, #64H ORG伪指令通知汇编程序,从START开始的程序段,其起始地址由2000H开始,即规定了标号START的地址是2000H,又规定了汇编后的第一条指令码从2000H开始存放。,17,在一个源程序中,ORG指令可多次出现在程序的任何地方。当它出现时,下一条指令的地址就由此重新定位。一般规定在由ORG伪指令定位时,其地址必须由小到大排列,且不能交叉、重叠。它的有效范围一直到下一条ORG伪指令出现为止。例如: ORG 2000H ORG 2600H ORG 3000H 这种顺序是正确的。若按下面顺序的

14、排列则是错误的,因为地址出现了交叉。 ORG 2600H ORG 2000H ORG 3000H ,18,2. END(END of Assembly)汇编结束伪命令 源程序结束标志,其含义是用于通知汇编程序,该程序段汇编至此结束。因此,在设计的每一个程序中必须要有END伪指令,且整个源程序中只能有一条END命令,并且位于程序的最后。如果END出现在程序中间,其后的汇编语言源程序均不进行汇编处理。 3EQU(EQUate) 赋值命令 格式:变量名称 EQU 数或汇编符号 EQU命令是把“变量名称”赋给 “数或汇编符号”。注意这里的变量名称不等于标号(其后没有冒号) 。用EQU赋值的变量名称可以

15、用作数据地址、代码地址、位地址或是一个立即数。因此,它可以是8位的,也可以是16位的。变量需赋值后才可以使用,赋值后,变量名称在整个程序有效。例如:,19,AA EQU R1 MOV A, AA 这里AA就代表了工作寄存器R1。又例如: A10 EQU 10 DELY EQU 07EBH MOV A, A10 LCALL DELY 这里A10当作片内RAM的一个直接地址,而DELY定义了一个16位地址,实际上它是一个子程序的入口。,20,4DB(Define Byte)定义数据字节命令 格式:标号: DB 8位二进制数表 其作用是把数据存入指定的存储单元。8位二进制数表可以是一字节、用逗号隔开

16、的字节串或括在单引号()中的ASCII字符串。它通知汇编程序从当前ROM地址开始,保留一个字节或字节串的存储单元,并存入DB后面的数据。用于从标号指定的地址开始,在程序存储器连续单元中定义若干个8位存储单元的内容。,21,例如: ORG 2000H TABL: DB 30H, 40H, 24, CB 汇编后 (2000H)=30H (2001H)=40H (2002H)=18H ;十进制数24 (2003H)=43H ;43H为字符“C”的ASCII编码值 (2004H)=42H ;42H为字符“B”的ASCII编码值 显然,DB功能是从指定单元开始定义(存储) 若干字节,十进制数自然转换成十六进制数,字母按ASCII码存储。,22,5. DW(Define Word)定义数据字命令 格式:DW 16位数据项或汇编符号表 该命令用于把DW后的16位数据项或汇编符号表从当前地址连续存放。每项数据或汇编符

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号