7_汇编语言程序设计.ppt_第1页
7_汇编语言程序设计.ppt_第2页
7_汇编语言程序设计.ppt_第3页
7_汇编语言程序设计.ppt_第4页
7_汇编语言程序设计.ppt_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第7章汇编语言程序设计 7 1伪指令7 2算术运算程序的设计7 3循环程序的设计7 4查表程序的设计7 5检索程序的设计7 6分支程序的设计7 7码制转换程序的设计7 8逻辑操作程序 主要内容 05 03 2020 单片机原理及其应用 2 第7章汇编语言程序设计 程序设计是为了解决某一个问题 把指令 或语句 按照一定的意图有序地组合在一起 目前 基于MCS 51单片机的程序开发设计有采用汇编语言和高级语言2种形式 高级语言有采用C语言 BASIC语言 PLM语言等 大多数集成开发环境 IntegratedDevelopmentEnvironment IDE 软件都支持这2种形式 05 03 2020 单片机原理及其应用 3 汇编程序设计的步骤 1 分析题目或课题的要求 正确理解解决什么问题 如何解决问题 有哪些可利用的资源 对计算精度的要求等 另外 了解应用系统硬件的结构和功能与课题任务的关联 2 确定解决问题的方案 画出程序流程框图 2 根据解决方案 确定变量及其数据存储格式 给各个变量分配存储空间 3 根据程序流程图 选用合适的指令编写程序 完成源程序的设计 4 在集成开发环境上调试 完成设计要求的功能 第7章汇编语言程序设计 05 03 2020 单片机原理及其应用 4 7 1伪指令 伪指令 PseudoInstruction 是汇编语言中起解释说明的命令 它不是单片机的指令 在单片机的集成开发环境中 向汇编系统说明程序存储在程序存储器的哪个区域 本汇编语言程序到何处结束 变量代号对应的单元地址或所代表的数值等 在汇编时 伪指令不会产生目标代码 不影响程序的执行 05 03 2020 单片机原理及其应用 5 7 1伪指令 常用的有以下几种伪指令 1 设置起始地址伪指令ORGORGxxxxH如 ORG0100HSUB MOVR0 30H 2 赋值伪指令EQU变量代号EQU数值如 LENEQU20 在程序中变量LEN的值为20HXdataEQU4F8BH 在程序中变量Xdata的值为4F8BH 05 03 2020 单片机原理及其应用 6 7 1伪指令 3 定义字节数据伪指令DB xxxxH DBdata如 2000HDB30H 伪指令DB也可用来定义多个连续单元为常数 即用来定义一组单字节数据组成的常数表 如 ORG1000HDB30H 31H 32H 33H 34H 35H 36H 37H 38H 39H 2EH 0DH 05 03 2020 单片机原理及其应用 7 7 1伪指令 4 定义双字节数据伪指令DW xxxxH DWdata16如 1000HDW0FDE1H1100HDW1345 2241 34556 5 位地址赋值伪指令BIT变量代号BIT位地址如 CSBITP2 0FLAGBIT20H 6 6 汇编结束伪指令ENDEND 05 03 2020 单片机原理及其应用 8 7 2算术运算程序的设计 在MCS 51单片机指令系统中 算术运算指令仅支持2个无符号的8位二进制数的运算 二进制数算术运算是按字节的方式进行的 05 03 2020 单片机原理及其应用 9 7 2算术运算程序的设计 例1多字节二进制加法 以三字节无符号二进制数为例 算法如图7 1所示 图中一个方框代表一个单元 Cy表示进位 当最低字节 低8位 运算时 如果令Cy为0 那么 完成3个字节的加法运算进行了3次相同的单字节加法操作 可以采用循环结构实现2个3字节数据的加法运算 图7 1二进制数加法算法 05 03 2020 单片机原理及其应用 10 7 2算术运算程序的设计 例2多字节二进制减法 多字节二进制减法与多字节二进制加法相似 图7 2为3字节二进制减法的算法 图7 2减法算法 05 03 2020 单片机原理及其应用 11 7 2算术运算程序的设计 例3多位十进制数加法 十进制数在计算机中可以采用BCD码的形式存放 采用紧凑形式 或压缩式 BCD码存放十进制数时 一个存储单元可以存储2位 MCS 51单片机仅支持二进制加法运算 采用ADD和ADDC指令的结果是二进制数 因此 2个以BCD码形式存储的数据 在用ADD和ADDC运算之后 必须对其运算结果进行调整 多位十进制数加法的算法与多字节二进制数算法相似 如图7 3所示 05 03 2020 单片机原理及其应用 12 7 2算术运算程序的设计 图7 3多位十进制加法算法 05 03 2020 单片机原理及其应用 13 7 2算术运算程序的设计 例4多位十进制减法在第3章的例30中 我们介绍了2位十进制数减法算法 X Y X 100 Y X 9AH Y 把十进制减法变换成二进制减法 求十进制减数的补码 和十进制加法2步进行 多位十进制数减法也采用了同样的算法 设被减数存放在20H开始的内部RAM存储单元 减数存放在30H开始的存储单元 6位十进制数减法的程序如下 05 03 2020 单片机原理及其应用 14 7 2算术运算程序的设计 1 2位十进制数减法子程序 入口条件 R0指出被减数所在单元的地址 R1指出减数所在单元的地址 出口条件 R0指出差所在单元的地址 进位在Cy中 SH SUB MOVA 9AHSUBBA R1ADDA R0DAAMOV R0 AINCR0INCR1CPLCRET 05 03 2020 单片机原理及其应用 15 7 2算术运算程序的设计 2 6位十进制数加法程序 MOVR0 20HMOVR1 30HMOVR5 03HCLRCDOSUB ACALLSH SUBDJNZR5 DOSUBRET 05 03 2020 单片机原理及其应用 16 7 2算术运算程序的设计 例5多字节数二进制乘法2个多字节二进制数乘法的算法与按位进行十进制数乘法相似 把它转换为几个多字节与单字节的乘法运算 先分别计算出它们的部分积 然后按照规则把部分积累加计算出乘积 图7 4为2个16位二进制数相乘的算法原理图 图中被乘数为X 其高八位和低八位分别存储在XH和XL单元 乘数为Y YH和YL分别高八位和低八位存储单元 05 03 2020 单片机原理及其应用 17 7 2算术运算程序的设计 算法分2步进行 首先 分别用乘数的高八位和低八位与被乘数相乘 计算部分积 分别存储在 XYH3 XYH2 XYH1 和 XYL3 XYL2 XYL1 单元 在编写程序时 乘法运算可以用子程序调用的方法实现 第3章例33 第二步 采用加法运算求出乘积存储在 XY4 XY3 XY2 XY1 单元 05 03 2020 单片机原理及其应用 18 7 2算术运算程序的设计 图7 42个16位二进制数乘法算法 05 03 2020 单片机原理及其应用 19 7 2算术运算程序的设计 例6多字节二进制除法2个多字节无符号二进制数的除法是采用移位和减法运算实现的 实现过程与我们进行十进制数乘法形似 每次进行除法运算时 如果余数大于减数 构件 则商1 否则 商0 图7 5为16位二进制数除以8位二进制数的程序流程图 该算法要求被除数的高八位数据必须小于除数 否则 作为溢出处理 子程序把标志位OV的状态置为1 从子程序返回 05 03 2020 单片机原理及其应用 20 7 2算术运算程序的设计 图7 5除法程序流程图 05 03 2020 单片机原理及其应用 21 7 3循环程序的设计 一 循环结构的组成循环结构由4部分组成 初始化部分 循环处理部分 循环控制部分和循环结束部分 循环结构组成图见图7 6 图7 6循环结构组成 05 03 2020 单片机原理及其应用 22 7 3循环程序的设计 汇编语言程序设计中常见的典型循环结构如图7 7所示 1 先处理后判断的结构 2 先判断后处理的结构图7 7典型循环结构 05 03 2020 单片机原理及其应用 23 7 3循环程序的设计 二 循环程序设计举例例7设单片机系统采集的8个单字节数据存储在单片机内部RAM的30H开始的连续单元中 求它们的均值 计算一组数据平均值的公式为 其中 为第i个数据 N为数据的个数 因此 要计算出平均值需要进行2种运算 求数据的总和 数据总和除以数据个数 1 求数据的总和设S为数据的总和 在计算机中求多个数据总和的算法如下 该算法的程序流程框图见图7 8 05 03 2020 单片机原理及其应用 24 7 3循环程序的设计 图7 8多个数据求总和的流程图 05 03 2020 单片机原理及其应用 25 7 3循环程序的设计 例8设有一个字符串以回车符 ASCII码为0DH 为结束标志 并存放在内部RAM的40H单元开始的连续存储单元中 编写测试字符串长度的程序 这是一个循环次数未知的循环程序设计例题 为了测试字符串的长度 字符串中的每个字符依次与回车符 0DH 比较 如果比较不相等 则字符串长度计数器加1 继续测试 如果比较相等 表示该字符为回车符 则字符串结束 长度计数器的值就是字符串的长度 程序流程框图如图7 9所示 05 03 2020 单片机原理及其应用 26 7 3循环程序的设计 图7 9测试字符串长度的程序流程框图 05 03 2020 单片机原理及其应用 27 7 3循环程序的设计 1 硬件电路原理图 2 发光二极管布置示意图图7 10循环闪烁系统原理与布置示意图 05 03 2020 单片机原理及其应用 28 7 3循环程序的设计 例9循环闪烁系统原理与布置示意图如图7 10所示 MCS 51单片机的P1口控制8个发光二极管 编制一个循环闪烁的程序 要求每次相邻的2个发光二极管为1组闪烁点亮3次后 转移到下一组 8个发光二极管显示1遍后 全部点亮 然后熄灭 又以每组2个灯的方式闪烁显示 如此不断循环 05 03 2020 单片机原理及其应用 29 7 3循环程序的设计 图7 11循环闪烁系统的程序流程图 05 03 2020 单片机原理及其应用 30 7 4查表程序的设计 查表程序是一种在单片机应用系统中常用的程序 例如 显示输出时 利用查表程序提取字型编码 数值运算时 利用它可以避免进行复杂的程序运算或转换运算 可以完成数据插补 修正 计算 转换等功能 05 03 2020 单片机原理及其应用 31 7 4查表程序的设计 例10设字符0 9 A F的ASCII码已作为常数存储在程序存储器中 编写子程序由给定x 查找其对应的ASCII码 ASCII码为七位二进制编码 一个单元也可存储一个字符的ASCII码 如果ASCII码表存放在以ASC TAB单元开始的区域 那么 存储ASCII码的单元地址与x的关系为 ASC TAB x 设存储在寄存器R2中 从子程序返回时ASCII码存储在R2中 子程序程序如下 05 03 2020 单片机原理及其应用 32 7 4查表程序的设计 CHECHUP MOVDPTR ASC TAB 设置表的首地址MOVA R2 取xMOVCA A DPTR 查表取ASCII码MOVR2 A 存查到的ASCII码RETASC TAB DB30H 31H 32H 33H 34H 35H 36H 37H 38H 39HDB41H 42H 43H 44H 45H 46H 05 03 2020 单片机原理及其应用 33 7 5检索程序的设计 数据检索为关键字查找 通常有两种方法 顺序检索和对分检索 本节介绍前者 对分检索请参阅相关资料 数据检索 顺序检索 对分检索 05 03 2020 单片机原理及其应用 34 7 5检索程序的设计 例15设内部RAM有一单字节无符号数数据块 存储在以30H单元为首地址的区域中 长度为50个字节 试编程找出其中最小的数 并放在20H单元 如图7 13例15的程序流程图 05 03 2020 单片机原理及其应用 35 7 5检索程序的设计 图7 13例15的程序流程图 05 03 2020 单片机原理及其应用 36 7 5检索程序的设计 例16从一个字符串找出一个 A 的关键字 字符串的结束标志为 EOF 设字符串存放在20H单元开始的区域 字符以ASCII码形式存储 找到关键字标志位F0置1 否则清0 如图7 14例16程序流程图 05 03 2020 单片机原理及其应用 37 7 5检索程序的设计 图7 14例16程序流程图 05 03 2020 单片机原理及其应用 38 7 6分支程序的设计 分支程序主要是根据判断条件的成立与否来确定程序的走向 可组成简单分支结构和多分支结构 一 单分支选择结构当程序的判断仅有两个出口 两者选一 称为单分支结构 通常用条件判断指令来选择并确定程序的分支出口 这类单分支选择结构有三种典型的形式 见图7 15 1 如果条件满足 执行程序段2 否则 执行程序段1 结构如图7 15 1 2 如果条件满足 则不执行程序段1 仅执行程序段2 否则 先执行程序段1 再执行程序段2 结构如图7 15 2 3 在图7 15 3 中 当条件不满足时 重复执行程序段1 只有当条件满足时 才停止执行程序段2 05 03 2020 单片机原理及其应用 39 7 6分支程序的设计 1 2 3 图7 15单分支选择结构 05 03 2020 单片机原理及其应用 40 7 6分支程序的设计 二 多分支选择结构当程序的判别部分有两个以上的出口流向时 称为多分支选择结构 如图7 16所示 图7 16多分支选择结构 05 03 2020 单片机原理及其应用 41 7 6分支程序的设计 例17和为2个带符号单字节数据 以原码方式存放 编制程序求它们的乘积 MCS 51单片机的乘法指令支持2个8位无符号二进制数相乘 2个带符号二进制数相乘 的方法如下 2个数符号相同 乘积符号为正 数值为2个数绝对值之积 2个数符号相异 乘积符号为负 数值为2个数绝对值之积 带符号二进制乘法的程序流程图如图7 17所示 05 03 2020 单片机原理及其应用 42 7 6分支程序的设计 图7 17带符号二进制乘法的程序流程图 05 03 2020 单片机原理及其应用 43 7 6分支程序的设计 例18设变量的值存放在内部RAM的30H单元中 编程求解下列函数式 将求得的函数值存入40H单元 图7 17例18程序设计框图 05 03 2020 单片机原理及其应用 44 7 7码制转换程序的设计 在单片机应用系统中 计算机CPU计算 存储是以二进制形式进行的 人机交换信息时 经常采用十进制 设备与设备之间交换信息时 有时采用ASCII码 等等 码制转换程序是单片机应用系统常用的程序之一 05 03 2020 单片机原理及其应用 45 7 7码制转换程序的设计 一 二进制数与十进制数 BCD码 之间的转换程序设计例20设工作寄存器R6和R7中存储16位二进制数 R6中存放高八位 把该数转换为BCD码形式 并存结果于 R3 R4 R5 二进制数转换为十进制数的方法为按权展开 设16位二进制数 则对应的十进制数为 7 3 转换时 乘以2可以采用左移方法实现 从最高位开始 逐位加到BCD码存储单元的最低位 并进行十进制加法调整 然后左移 当最低位加入后 转换完成 程序流程图如图7 18所示 05 03 2020 单片机原理及其应用 46 7 7码制转换程序的设计 图7 18二进制数转换BCD码程序流程图 05 03 2020 单片机原理及其应用 47 7 7码制转换程序的设计 二 ASCII代码与十六进制数之间的转换程序设计例21把2个ASCII码表示的十六进制数转换成1个字节的十六进制数 在ASCII码表中 十六进制数符 0 9 的ASCII码是30H 39H 它们与其代表的十六进制数值相差30H 数符 A F 的ASCII码为41H 46H 它们与其代表的十六进制数值相差37H 因此 1位十六进制数的ASCII码转换为十六进制数 当ASCII码减去30H的差小于0AH时 其差值就是转换结果 否则 差值还应再减去07H才能得到转换结果 05 03 2

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论