- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[工学]单元4 汇编语言程序设计1
单元四? 汇编语言程序设计
一、学习目标与要求
1、了解汇编语言程序结构
2、掌握分支程序、循环程序、子程序、查表程序的设计方法
3、了解常用伪指令及其使用方法
二、本章重点内容
1、单片机程序设计中常用伪指令
伪指令不是真正的指令,它只向编译程序提供编译信息,而不产生机器代码。
常用伪指令有:
(1)标号等值伪指令——EQU
格 式:〈标号:〉EQU〈表达式〉
指令的含义为本语句的标号等值于表达式,亦即将表达式值赋予标号。这里的标号和表达式是必不可少的。
(2)数据存储说明伪指令
数据存储说明伪指令的作用是将数据存储在程序存储器单元中。
① 定义字节数据伪指令——DB
格 式:〈标号:〉DB〈表达式或表达式串〉
②? 定义字数据伪指令——DW
格 式:〈标号:〉DW〈表达式或表达式串〉
(3)程序起始地址伪指令——ORG
格 式:ORG〈表达式〉
(4)汇编结束伪指令——END
格 式1:〈标号:〉END〈表达式〉
格 式2:〈标号:〉END
或者??? END
2、程序设计
(1)分支程序
条件转移指令是指分支程序产生的原因,条件转移指令执行时,如果转移条件(yes)程序转向一个分支,如果不转移条件(no)程序转向是一个分支。
(2)循环程序
任何计算机程序都不可能是无限长的顺序程序,程序总是根据不同的条件不断循环的转移执行的。将循环程序从结构上分成循环初始化,循环体,循环修改和循环结构四个部分,是为了便于理解。实际应用时应视具体问题灵活应用。
(3)子程序
采用子程序结构的程序设计最大的好处是优化了程序设计,将可局部独立处理的问题编写成子程序,可供主程序反复多次调用,它将复杂的运标或检制问题,细分成许多小的事件进行处理,这种主程序调用子程序的结构形式被称为模块式的结构形式。
(4)查表程序
数学变量与函数之间的关系是一种确定的关系,可以用数学表达式表示,计算机编程时,可根据变量及与函数的关系式计算出函数值。但有的变量与函数之间的关系不能用数学表达式表示,如七段数码显示代码(函数)与显示字符(变量)就是这样。它们之间只能用表格形式建立函数关系,单片机程序设计中的查表程序就是解决这类问题。当然有确定数学关系的数学变量也可以用查表程序求函数值。
三、本章内容的前后联系
1、与前面内容的联系
(1)单片机指令系统是学习本章的基础,也就是说,要想编好程序首先必须学好指令。
(2)单片机的内部结构也是本章的基础,单片机的工作是建立在程序存储的基础上,但是程序的执行还必须依赖单片机的硬件资源,这就涉及到了单片机的内部结构。
2、与后面内容的联系
单片机的汇编语言程序设计,是单片机应用系统程序设计的基础,所以,在学习本章时,应该以应用系统程序开发为目的。认真掌握典型结构化程序设计方法。
四、学习方法指导
1、单片机汇编语言程序设计,对初学者来说,不是很容易掌握,特别是它的编程和单片机内部资源密切相关,所以,在学习编程之前,一定要掌握单片机的内部资源及其单片机结构。
2、为了真正理解程序执行过程,必须先理解指令的执行过程,所以,学习本章时首先应该建立一个概念:程序是指令的集合。
3、要注意一开始学习编程就养成一个比较好的习惯:先画流程图、后写指令;程序按结构化设计。
五、典型例题分析
【例题4.1 】? 拆字程序。将一个字节的两个BCD码十进制数拆开并变成相应的ASCII码,并存入两个RAM单元中。
设两个BCD码(一个字节)已存入在内部RAM的30H单元中,变换后的ASCII 码分别存放在31H和32H单元,且高位BCD码的ASCII码的ASCII码存于31H单元。数字0~9的ASCII为30H~39H,完成拆字转换只需将一个字节的两个BCD码拆开存放在另两个单元的低4位,并在其高4位赋以0011即可。程序段清单如下:
MOV? R0,#32H??????? ;将32H单元地址送R0
MOV? @R0,#00H????? ;32H单元清0
MOV?? A,30H???????? ;将30H单元中的BCD送A
XCHD? A,@R0???????? ;将低位BCD码送32H单元
ORL?? 32H,#30H?????? ;完成低位BCD码转换
SWAP? A??????????????? ;将高位BCD码交换到低位
ORL? A,#30H?????????? ;完成高位BCD码转换
MOV? 31H,A??????????? ;将高位BCD的ASCII码存入31H
上述程序段完成了将一个字节的BCD码转换成两个ASCII码的功能。共需占用15个程序存储器字节单元,用9个机器周期执行完毕。
【例4.2 】?? 双字节加法程序段。设被加数存放在内部矛盾RAM的31H、32H单元,低位字节在前,加数存入于34H、35H单元(低字节在前),结果和
文档评论(0)