第4章 汇编 语言程序设计教学提纲

上传人:youn****329 文档编号:143491583 上传时间:2020-08-30 格式:PPT 页数:74 大小:707KB
返回 下载 相关 举报
第4章 汇编 语言程序设计教学提纲_第1页
第1页 / 共74页
第4章 汇编 语言程序设计教学提纲_第2页
第2页 / 共74页
第4章 汇编 语言程序设计教学提纲_第3页
第3页 / 共74页
第4章 汇编 语言程序设计教学提纲_第4页
第4页 / 共74页
第4章 汇编 语言程序设计教学提纲_第5页
第5页 / 共74页
点击查看更多>>
资源描述

《第4章 汇编 语言程序设计教学提纲》由会员分享,可在线阅读,更多相关《第4章 汇编 语言程序设计教学提纲(74页珍藏版)》请在金锄头文库上搜索。

1、第4章 AT89S51汇编语 言程序设计,1,2,第4章 目录 4.1 汇编语言程序设计概述 4.1.1 单片机编程语言 4.1.2 汇编语言语句和格式 4.1.3 伪指令 4.2 汇编语言源程序的汇编 4.2.1 手工汇编 4.2.2 机器汇编,3,4.3 AT89S51汇编语言程序设计举例 4.3.1 子程序的设计 4.3.2 查表程序设计 4.3.3 关键字查找程序设计 4.3.4 数据极值查找程序设计 4.3.5 数据排序程序设计 4.3.6 分支转移程序设计 4.3.7 循环程序设计,4.1.1 单片机编程语言 常用的编程语言是汇编语言和高级语言。 1汇编语言 用英文字符来代替机器语

2、言,这些英文字符被称为助记符汇编语言:用助记符表示的指令。 汇编语言源程序:用汇编语言编写的程序。 “汇编”:汇编语言源程序需转换(翻译)成为二进制代码表示的机器语言程序,才能识别和执行。 完成“翻译”的程序称为汇编程序。经汇编程序“汇编”得到的以“0”、“1”代码形式表示的机器语言程序称为目标程序。,5,优点:用汇编语言编写程序效率高,占用存储空间小,运行速度快,能编写出最优化的程序, 缺点:可读性差,离不开具体的硬件,是面向“硬件”的语言通用性差。 2高级语言 不受具体“硬件”的限制,优点:通用性强,直观、易懂、易学,可读性好。 目前多数的51单片机用户使用C语言(C51)来进行程序设计,

3、已公认为高级语言中高效简洁而又贴近51单片机硬件的编程语言。 将C语言向单片机上移植,始于20世纪80年代的中后期。,6,经过十几年努力,C51已成为单片机的实用高级编程语言。 尽管目前已有不少设计人员使用C51来进行程序开发,但在对程序的空间和时间要求较高的场合,汇编语言仍必不可少。 在这种场合下,可使用C语言和汇编语言混合编程。在很多需要直接控制硬件且对实时性要求较高的场合,则更是非用汇编语言不可。 掌握汇编语言并能进行程序设计,是学习和掌握单片机程序设计的基本功之一。 4.1.2 汇编语言语句和格式 两种基本语句:指令语句和伪指令语句。,7,8,(1)指令语句 已在第3章介绍。每一指令语

4、句在汇编时都产生一个指令代码(机器代码),执行该指令代码对应着机器的一种操作。 (2)伪指令语句 是控制汇编(翻译)过程的一些控制命令。在汇编时没有机器代码与之对应。 下面介绍指令语句格式。伪指令语句将在4.1.3节介绍。,汇编语言语句是符合典型的汇编语言的四分段格式: 标号字段和操作码字段之间要有冒号“:”分隔; 操作码字段和操作数字段间的分界符是空格; 双操作数之间用逗号相隔; 操作数字段和注释字段之间的分界符用分号“;”。 任何语句都必须有操作码字段,其余各段为任选项。,9,【例4-1】下面是一段程序的四分段书写格式。 标号字段 操作码字段 操作数字段 注释字段 START:MOVA,#

5、00H ;0A MOVR1,#10 ;10R1 MOVR2,#00000011B ;03HR2 LOOP: ADDA,R2 ;(A)+(R2)A DJNZR1,LOOP ;R1减1不为零,则跳LOOP处 NOP HERE:SJMPHERE 上述4个字段应该遵守的基本语法规则如下。,10,1标号字段 语句所在地址的标志符号,才能被访问。如标号“START”和“LOOP”等。有关标号规定如下: (1)标号后必须跟冒号“:”。 (2)标号由18个ASCII码字符组成,第一个字符必须是字母。 (3)同一标号在一个程序中只能定义一次,不能重复定义。 (4)不能使用汇编语言已经定义的符号作为标号,如指令助

6、记符、伪指令以及寄存器的符号名称等。 (5)标号的有无,取决于本程序中的其他语句是否访,11,12,问该条语句。如无其他语句访问,则该语句前不需标号。 2操作码字段 操作码字段规定了语句执行的操作,操作码是汇编语言指令中唯一不能空缺的部分。 3操作数字段 指令的操作数或操作数地址。 在本字段中,操作数的个数因指令的不同而不同。通常有单操作数、双操作数和无操作数三种情况。 如果是多操作数,则操作数之间要以逗号隔开。,操作数表示时,几种情况需注意: (1)十六进制、二进制和十进制形式的操作数表示 多数情况,操作数或操作数地址是采用十六进制形式来表示的。则需加后缀“H”。 在某些特殊场合用二进制表示

7、,需加后缀“B” 若操作数采用十进制形式,则需加后缀“D”,也可省略。 若十六进制操作数以字符AF开头,需在它前面加一个 “0”,以便汇编时把它和字符AF区别开。,13,(2)工作寄存器和特殊功能寄存器的表示 当操作数为工作寄存器或特殊功能寄存器时,允许用工作寄存器和特殊功能寄存器的代号表示。 例如,工作寄存器用R7R0,累加器用A(或Acc)表示。另外,工作寄存器和特殊功能寄存器也可用其地址来表示,如累加器A可用其地址E0H来表示。 4注释字段 用于解释指令或程序的含义,对可读性非常有用。 使用时须以分号开头,长度不限,一行写不下可换行书写,但注意也要以分号开头。,14,汇编时,遇到“;”

8、就停止“翻译”。因此,注释字段不会产生机器代码。 4.1.3 伪指令 在汇编语言源程序中应有向汇编程序发出的指示信息,告诉它如何完成汇编工作,这是通过伪指令来实现。 伪指令不属于指令系统中的汇编语言指令,它是程序员发给汇编程序的命令,也称为汇编程序控制命令。 只有在汇编前的源程序中才有伪指令。 “伪”体现在汇编后,伪指令没有相应的机器代码产生。 伪指令具有控制汇编程序的输入/输出、定义数据和符号、条件汇编、分配存储空间等功能。,15,不同汇编语言的伪指令有所不同,但基本内容相同。 介绍常用的伪指令。 1ORG(ORiGin)汇编起始地址命令 源程序的开始,用一条ORG伪指令规定程序的起始地址。

9、如果不用ORG,则汇编得到的目标程序将从0000H地址开始。例如: ORG2000H START:MOVA,#00H 即规定标号START代表地址为2000H开始。 在一源程序中,可多次用ORG指令,规定不同的程序段的起始地址。但是,地址必须由小到大排列,且不能交叉、,重叠。例如: ORG2000H ORG2500H ORG3000H 这种顺序是正确的。若按下面顺序的排列则是错误的,因为地址出现了交叉。 ORG2500H ORG2000H ORG3000H ,17,2. END(END of Assembly)汇编终止命令 源程序结束标志,终止源程序的汇编工作。整个源程序中只能有一条END命令

10、,且位于程序的最后。如果END出现在程序中间,其后的源程序,将不进行汇编处理。 3EQU(EQUate)标号赋值命令 用于给标号赋值。赋值后,标号值在整个程序有效。 例如:TEST:EQU 2000H 表示TEST=2000H,汇编时,凡是遇到TEST时,均以2000H来代替。,18,4DB(Define Byte)定义数据字节命令 用于从指定的地址开始,在程序存储器连续单元中定义字节数据。例如: ORG2000H DB30H,40H,24,C,B 汇编后 (2000H)=30H (2001H)=40H (2002H)=18H(十进制数24) (2003H)=43H(字符“C”的ASCII码)

11、 (2004H)=42H(字符“B”的ASCII码),19,20,显然,DB功能是从指定单元开始定义(存储)若干字节,十进制数自然转换成十六进制数,字母按ASCII码存储。 5DW(Define Word)定义数据字命令 该命令用于从指定的地址开始,在程序存储器的连续单元中定义16位的数据字。例如: ORG2000H DW1246H,7BH,10 汇编后 (2000H)=12H;第1个字 (2001H)=46H (2002H)=00H;第2个字,(2003H)=7BH (2004H)=00H;第3个字 (2005H)=0AH 6DS(Define Storage)定义存储区命令 从指定地址开始

12、,保留指定数目的字节单元作为存储区,供程序运行使用。例如: TABEL:DS10 表示从TABEL代表的地址开始,保留10个连续的地址单元。又例如: ORG2000H DS10 H 表示从2000H地址开始,保留16个连续地址单元。,21,注意:DB、DW和DS命令只能对程序存储器有效,不能对数据存储器使用。 7BIT 位定义命令 用于给字符名称赋以位地址,位地址可以是绝对位地址,也可是符号地址。例如: QABIT P1.6 功能是把P1.6的位地址赋给变量QA。 4.2 汇编语言源程序的汇编 “汇编”?汇编可分为手工汇编和机器汇编两类。,22,4.2.1 手工汇编 通过查指令的机器代码表(表

13、3-2),逐个把助记符指令“翻译”成机器代码,再进行调试和运行。 手工汇编遇到相对转移偏移量的计算时,较麻烦,易出错,只有小程序或受条件限制时才使用。实际中,多采用“汇 编程序”来自动完成汇编。,23,4.2.2 机器汇编 用微型计算机上的软件(汇编程序)来代替手工汇编。在微机上用编辑软件进行源程序编辑,然后生成一个ASCII码文件,扩展名为 “.ASM”。在微机上运行汇编程序,译成机器码。 机器码通过微机的串口(或并口)传送到用户样机(或在线仿真器),进行程序的调试和运行。 有时,在分析某些产品的程序的机器代码时,需将机器代码翻译成汇编语言源程序,称为“反汇编”。,24,【例4-2】 表4-

14、1是一段源程序的汇编结果,可查表3-2,手工汇编,来验证下面的汇编结果是否正确。机器码从1000H单元开始存放。,25,4.3 AT89S51汇编语言程序设计举例 介绍常用的汇编语言程序的设计。 4.3.1 子程序的设计 将那些需多次应用的、完成相同的某种基本运算或操作的程序段从整个程序中独立出来,单独编成一个程序段,需要时进行调用。这样的程序段称为子程序。 优点:采用子程序可使程序结构简单,缩短程序的设计时间,减少占用的程序存储空间。 子程序在程序设计中非常重要,读者应熟练掌握子程序的设计方法。,26,1子程序的设计原则和应注意的问题 编写子程序应注意以下问题: (1)子程序的入口地址,前必

15、须有标号。 (2)主程序调用子程序,是通过调用指令来实现。有两条子程序调用指令: 绝对调用指令ACALL addr11。双字节,addr11指出了调用的目的地址,PC中16位地址中的高5位不变,被调用的子程序的首地址与绝对调用指令的下一条指令的高5位地址相同,即只能在同一个2KB区内。 长调用指令LCALL addr16。三字节,addr16为直接调用的目的地址,子程序可放在64KB程序存储器区任意位置。,27,(3)子程序结构中必须用到堆栈,用来进行断点和现场的保护。 (4)子程序返回主程序时,最后一条指令必须是RET指令,功能是把堆栈中的断点地址弹出送入PC指针中,从而实现子程序返回后从主

16、程序断点处继续执行主程序。 (5)子程序可以嵌套,即主程序可以调用子程序,子程序又可以调用另外的子程序。,28,2子程序的基本结构 典型的子程序的基本结构如下: MAIN: ;MAIN为主程序入口标号 LCALL SUB;调用子程序SUB 子程序 SUB:PUSH PSW;现场保护 PUSH Acc POP Acc ;现场恢复,注意要先进后出 POP PSW RET;最后一条指令必须为RET,29,注意:上述子程序结构中,现场保护与现场恢复不是必需的,要根据实际情况而定。 4.3.2 查表程序设计 查表程序是一种常用程序,避免复杂的运算或转换过程,可完成数据补偿、修正、计算、转换等各种功能,具有程序简单、执行速度快等优点。 查表是根据自变量x,在表格寻找y,使y =f(x)。单片机中,数据表格存放于程序存储器内,在执行查表指令时,发出读程序存储器选通脉冲 。两条极为有用的查表指令如下: (1)MOVC A,A+DPTR (2)MOVC A,A+PC,30,两条指令的功能完全相同,具体使用有差别。 指令“MOVC A,A

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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

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