第4章 汇编程序设计.ppt

上传人:京东小超市 文档编号:5784111 上传时间:2020-08-08 格式:PPT 页数:80 大小:888.50KB
返回 下载 相关 举报
第4章 汇编程序设计.ppt_第1页
第1页 / 共80页
第4章 汇编程序设计.ppt_第2页
第2页 / 共80页
亲,该文档总共80页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《第4章 汇编程序设计.ppt》由会员分享,可在线阅读,更多相关《第4章 汇编程序设计.ppt(80页珍藏版)》请在三一文库上搜索。

1、第4章 MCS-51汇编语言程序设计 第4章 MCS-51汇编语言程序设计 4.1 简单程序设计 4.2 分支程序设计 4.3 循环程序设计 4.4 散转程序设计 4.5 子程序和参数传递方法 4.6 查表程序设计 4.7 数制转换 习题与思考题 咸 呼 孽 费 乒 蝉 夫 捧 塞 纳 率 怔 多 金 书 叭 椿 永 捂 钎 胸 狙 摘 介 琼 辰 潦 瘟 啪 皖 屏 谊 第 4 章 汇 编 程 序 设 计 第 4 章 汇 编 程 序 设 计 第4章 MCS-51汇编语言程序设计 程序设计是为了解决某一个问题而将指令有序地组合在 一起的过程。 程序有简有繁, 但复杂程序往 往是由简单的基本程序

2、所构成的。 本章将通过一些基本程 序, 介绍部分常用的程序设计方法。 程序设计的过程大致可以分为以下几个步骤: (1) 编制要解决问题的程序框图。 (2) 确定数据结构、 算法、 工作单元、 变量设定。 (3) 根据所用计算机的指令系统, 按照已编制的程 序框图用汇编语言编制出源程序。 (4) 将编制的程序在计算机上调试, 直至实现预定的 功能。 管 硝 壮 雕 舅 闰 橙 唉 秸 猴 算 总 庞 惺 拌 锰 妥 航 际 厦 实 拯 恤 韩 坚 摸 常 骋 色 臼 楞 役 第 4 章 汇 编 程 序 设 计 第 4 章 汇 编 程 序 设 计 第4章 MCS-51汇编语言程序设计 一、汇编程序

3、功能 源程序 (汇编指令程序) 汇编 目标程序 (机器码指令程序) 汇编指令与机器码指令有一一对应的关系。 汇编程序是一种翻译程序,将源程序翻译成目标程序。 了 粉 仅 赛 唱 博 对 滑 澎 犬 措 婪 知 害 高 让 慑 九 煮 忿 摆 犁 饼 地 焕 闻 裸 限 冰 矢 手 稳 第 4 章 汇 编 程 序 设 计 第 4 章 汇 编 程 序 设 计 第4章 MCS-51汇编语言程序设计 二、汇编程序的汇编过程 汇编有两种方法:手工汇编、机器汇编。 1、手工汇编: 第一次汇编:确定地址,翻译成各条机器码,字符标号 原样写出; 第二次汇编:标号代真,将字符标号用所计算出的具体 地址值或偏移

4、量代换。 免 率 孵 哆 塞 迪 具 伏 诌 向 远 峪 帚 荆 跟 笆 瑶 豪 陪 琅 丢 闲 苹 幻 豌 积 霄 母 幸 猛 女 罗 第 4 章 汇 编 程 序 设 计 第 4 章 汇 编 程 序 设 计 第4章 MCS-51汇编语言程序设计 源程序 目标程序 地址 ORG 1000H START:MOV R0,2FH MOV R2,#00H MOV A,R0 MOV R3,A INC R3 SJMP NEXT LOOP:INC R0 CJNE R0,#44H,NEXT INC R2 NEXT:DJNZ R3,LOOP MOV 2AH,R2 SJMP $ END 第一次汇编第二次汇编 10

5、00 A82F 1002 7A00 1004 E6 1005 FB 1006 0B 1007 80NEXT 1009 08 100A B644NEXT 100D 0A 100E DBLOOP 1010 8A2A 1012 80FE A82F 7A00 E6 FB 0B 8005 08 B64401 0A DBF9 8A2A 80FE 肘 拭 礼 练 浩 遂 聊 距 俐 恍 盛 束 芒 泞 锅 眩 森 乞 洒 煮 亥 团 镐 猩 鹅 苍 饮 佐 卞 优 饺 翱 第 4 章 汇 编 程 序 设 计 第 4 章 汇 编 程 序 设 计 第4章 MCS-51汇编语言程序设计 2、机器汇编 两次扫描过程

6、。 第一次扫描:检查语法错误,确定符号名字; 建立使用的全部符号名字表; 每一符号名字后跟一对应值(地址或数)。 第二次扫描:是在第一次扫描基础上,将符号地址转换成 地址(代真); 利用操作码表将助记符转换成相应的目标码。 七 毒 严 残 逼 冠 还 惕 斧 胰 蛹 多 第 恤 爸 起 鼻 颜 葡 沁 驮 乃 团 申 碍 返 曝 粮 梦 洞 拾 锰 第 4 章 汇 编 程 序 设 计 第 4 章 汇 编 程 序 设 计 第4章 MCS-51汇编语言程序设计 三、伪指令 伪指令是告诉汇编程序,如何汇编源程序的指令。 伪指令既不控制机器的操作,也不能被汇编成机器代码, 故称为伪指令。 1、起始地址

7、伪指令 ORG ORG addr16 用于规定目标程序段或数据块的起始地址, 设置在程序开始处。 2、汇编结束伪指令 END 告诉汇编程序,对源程序的汇编到此结束。 一个程序中只出现一 次,在末尾。 遗 启 蜡 蜂 某 死 箱 骤 证 郁 靠 皇 重 波 寂 自 拨 攘 虚 攫 胀 堂 元 麻 徘 馆 毁 骋 喘 燥 超 楷 第 4 章 汇 编 程 序 设 计 第 4 章 汇 编 程 序 设 计 第4章 MCS-51汇编语言程序设计 3、赋值伪指令 EQU 告诉汇编程序,将汇编语句操作数的值赋予本语句的标号。 格式: 标号名称 EQU 数值或汇编符号 “标号名称”在源程序中可以作数值使用,也可

8、以作数据地址、 位地址使用。 先定义后使用,放在程序开头。 4、定义字节伪指令 DB 告诉汇编程序从指定的地址单元开始,定义若干字节存储单 元并赋初值。 格式: 标号: DB 字节数据或字节数据表 釜 轰 蹿 殖 胜 睁 撒 篷 醇 坯 盗 惶 拽 灌 岩 雾 池 鹅 宴 树 楼 指 砂 圆 铅 碗 峭 嘴 徐 亭 竞 井 第 4 章 汇 编 程 序 设 计 第 4 章 汇 编 程 序 设 计 第4章 MCS-51汇编语言程序设计 例、 ORG 1000H PIOI:DW 7654H,40H、12、AB 6、数据地址赋值伪指令 DATA 将表达式指定的数据地址赋予规定的字符名称 格式: 字符名

9、称 DATA 表达式 注:该指令与EQU指令相似,只是,可先使用后定义, 放于程序开头、结尾均可。 5、定义字伪指令 DW 从指定地址开始,定义若干个16个位数据,高八位存入低 地址;低八位存入高地址。 涵 眩 湾 奥 邵 漏 郡 许 顶 酬 宣 冠 染 祝 佰 撇 祟 孜 紧 硫 泵 耳 棒 麻 昨 揖 分 浇 拥 郎 汀 舰 第 4 章 汇 编 程 序 设 计 第 4 章 汇 编 程 序 设 计 第4章 MCS-51汇编语言程序设计 7、定义空间伪指令 DS 从指定地址开始,保留由表达式指定的若干字节空间作 为备用空间。 格式: 标号: DS 表达式 例2、 ORG 1000H DS 0A

10、H DB 71H,11H,11H ;从100BH开始存放 ;71H11H、11H。 注:DB、DW、DS 只能用于程序存储器; 而不能用于数据存储器。 埠 空 步 没 却 蜕 谢 卿 训 豹 畏 赚 绵 痊 垄 丹 杯 渔 闽 提 霖 听 婿 泌 肉 茄 址 侯 缓 才 嗣 凶 第 4 章 汇 编 程 序 设 计 第 4 章 汇 编 程 序 设 计 第4章 MCS-51汇编语言程序设计 8、位地址赋值伪指令 BIT 将位地址赋予规定的字符名称。 格式: 字符名称 BIT 位地址 例3、 X1 BIT P12 相当于 X1 EQU 92H 炽 类 礼 给 牧 拾 泞 甲 贰 瞄 邻 搽 谣 露

11、丫 拽 苇 荧 庙 歌 棉 佰 篇 己 窒 羔 窑 锻 邵 新 俐 吵 第 4 章 汇 编 程 序 设 计 第 4 章 汇 编 程 序 设 计 第4章 MCS-51汇编语言程序设计 程序设计有时是一件很复杂的工作,但往往 有些程序结构是很典型的。采用结构化编程时,有 规律性极强、简单清晰、容易读写、可靠性高等特 点。 根据结构化程序设计的观点,功能复杂的程序 结构由基本算法结构组成,基本结构有三种:顺序 结构、循环结构和分支结构。 截 科 闯 衬 湘 婚 人 搁 伪 毫 淳 稿 灼 麦 梆 疚 旗 糊 条 惰 李 蝇 湍 也 坤 榷 嚏 长 窟 棱 统 菌 第 4 章 汇 编 程 序 设 计

12、第 4 章 汇 编 程 序 设 计 第4章 MCS-51汇编语言程序设计 语句 3 语句 2 顺序结构 入口 语句 1 出口 分支结构 入口 条件满足否? 分支 1 出口 YN 分支 2 循环结构 入口 处理 修改条件 条件满足否? Y 出口 N 快 鸽 范 拆 靶 曰 俩 字 苹 名 宫 晤 谭 扦 锰 倍 蛮 往 锭 鞍 骤 傅 鸯 燃 祟 凳 糖 坦 蹦 缠 嗓 驹 第 4 章 汇 编 程 序 设 计 第 4 章 汇 编 程 序 设 计 第4章 MCS-51汇编语言程序设计 4.1 简单程序设计 简单程序又称顺序程序。 计算机是按指令在存储器中存 放的先后次序来顺序执行程序的。 【例4-

13、1】 两个8位的无符号数相加的和仍是8位。 设内部 RAM的40H、 41H单元中分别存放8位数N1、 N2, 两 数相加的结果送42H单元。 程序如下: AD1: MOV R0, #40H ; 设R0为数据指针 MOV A, R0 ; 取N1 INC R0 ; 修改指针 ADD A, R0 ; N1 + N2 INC R0 MOV R0, A ; 存结果 END 织 迪 点 亡 昔 段 息 逸 会 悼 何 裤 逆 蚀 猜 贮 揪 斑 伍 仲 兆 钩 屹 诬 哄 跺 朴 轿 紊 着 庇 亚 第 4 章 汇 编 程 序 设 计 第 4 章 汇 编 程 序 设 计 第4章 MCS-51汇编语言程序

14、设计 【例4-2】 将两个半字节数合并成一个一字节数。 设内部RAM的40H、 41H单元中分别存放着8位二进制数 , 要求取出两个单元中的低半字节, 并将其合并 成一个字节后存放在42H单元。 程序如下: 粘 刺 安 友 驮 酷 翰 氧 祝 掷 范 李 忠 涌 握 魄 晚 哼 禄 骚 演 注 掇 缸 签 愧 窍 搞 霞 梦 恢 捅 第 4 章 汇 编 程 序 设 计 第 4 章 汇 编 程 序 设 计 第4章 MCS-51汇编语言程序设计 START: MOV R1, #40H MOV A, R1 ANL A, #0FH ; 取第一个半字节 SWAP A ; 移至高4位 INC R1 XCH

15、 A, R1 ; 取第二个字节 ANL A, #0FH ; 取第二个半字节 ORL A, R1 ; 拼字 INC R1 MOV R1, A ; 存放结果 END 作 帐 毡 零 眶 脑 鼓 司 季 袜 涤 逊 日 冶 席 魏 灶 辈 剃 汕 输 肉 总 虑 炔 俘 学 彼 点 涯 几 愿 第 4 章 汇 编 程 序 设 计 第 4 章 汇 编 程 序 设 计 第4章 MCS-51汇编语言程序设计 以上程序均采用了寄存器寻址方式, 可以方便地取 数、 存数。 例4-2 中用XCH A, R1指令, 既取出了 数, 又保存了中间结果。 炊 汕 较 纫 世 叭 原 郭 程 瀑 蛛 溜 县 薄 蘸 城

16、 厦 氰 哀 铂 寝 夹 壁 蘑 迈 火 丝 豢 享 辱 沦 桥 第 4 章 汇 编 程 序 设 计 第 4 章 汇 编 程 序 设 计 第4章 MCS-51汇编语言程序设计 4.2 分支程序设计 在处理实际事务中, 只用简单程序设计的方法是不够的 , 因为大部分程序总包含有判断、 比较等情况, 程序将根 据判断、 比较的结果转向不同的分支。 下面举两个分支程序的例子。 官 日 盼 寓 朗 翱 馒 媳 玻 扭 追 掏 澈 执 陆 数 缠 核 作 谬 坠 粮 贱 羊 吧 松 舱 傈 赢 潞 匿 篇 第 4 章 汇 编 程 序 设 计 第 4 章 汇 编 程 序 设 计 第4章 MCS-51汇编语

17、言程序设计 【例4-3】 两个无符号数比较大小。 设存储单元ST1和ST2中存放着两个不带符号的二进制 数, 找出其中的大数存入ST3单元中。 流程图如图4-1所示 。 危 涸 柿 珐 耪 层 型 懂 扩 发 嵌 孕 慕 起 拇 鹿 汤 没 私 膏 冠 酉 你 肚 捉 胰 耪 挠 磋 甭 瘟 橇 第 4 章 汇 编 程 序 设 计 第 4 章 汇 编 程 序 设 计 第4章 MCS-51汇编语言程序设计 图4-1 两个无符号数的比较流程 畴 滋 尊 莲 友 牺 缴 阻 蛋 也 渐 童 轩 而 吼 怎 痹 楞 剔 括 益 泞 涎 粪 味 岗 门 抓 拆 圣 萄 绚 第 4 章 汇 编 程 序 设

18、 计 第 4 章 汇 编 程 序 设 计 第4章 MCS-51汇编语言程序设计 程序如下: ST1: EQU 8040H ORG 8000H START1: CLR C ; 进位位清0 MOV DPTR, #ST1 ; 设数据指针 MOVX A, DPTR ; 取第一个数 MOV R2, A ; 暂存于R2 INC DPTR MOVX A, DPTR ; 取第二个数 SUBB A, R2 ; 两数比较 JNC BIG1 XCH A, R2 ; 第一个数大 闰 蛛 盎 澄 完 假 匿 窘 拖 顶 杉 儡 怕 黍 茁 韭 韵 丽 魄 释 靛 毅 才 爬 寐 级 诫 揽 驴 灌 傻 媚 第 4 章

19、汇 编 程 序 设 计 第 4 章 汇 编 程 序 设 计 第4章 MCS-51汇编语言程序设计 BIG0: INC DPTR MOVX DPTR, A ; 存大数 RET BIG1: MOVX A, DPTR ; 第二个数大 SJMP BIG0 END 历 刷 妓 卫 砚 增 零 漂 芯 寇 箔 矮 敞 露 洱 痒 刮 滑 艘 埃 塞 寇 酉 隅 惟 揖 羊 技 兆 苑 紫 否 第 4 章 汇 编 程 序 设 计 第 4 章 汇 编 程 序 设 计 第4章 MCS-51汇编语言程序设计 上面程序中, 用减法指令SUBB来比较两数的大小。 由 于这是一条带借位的减法指令, 因此在执行该指令前,

20、 应先 把进位位清0。 用减法指令通过借位(CY)的状态判别两数 的大小, 是两个无符号数比较大小时常用的方法。 设有两数 x, y, 执行x-y, 当xy 时, 结果无借位产生, 则CY=0; 反之, 则CY=1, 表示x0, 1A SJMP FINISH SUL: MOV A, #0 SJMP FINISH NEG1: MOV A, #FFH ; x0, -1A FINISH: MOV DPTR, #BUF MOVX DPTR, A END 八 呈 盒 惦 抑 獭 棚 许 噎 却 釜 筒 谐 本 毗 民 嘻 汛 谢 片 辱 忘 淤 耻 疚 仔 给 枉 迢 骚 骂 后 第 4 章 汇 编 程

21、 序 设 计 第 4 章 汇 编 程 序 设 计 第4章 MCS-51汇编语言程序设计 4.3 循环程序设计 在程序设计中, 只有简单程序和分支程序是不够的。 因为简单程序每条指令只执行一次, 而分支程序则根据条 件的不同, 会跳过一些指令, 执行另一些指令。 它们的 特点是, 每一条指令至多执行一次。 在处理实际事务时, 有时会遇到多次重复处理的问题, 用循环程序的方法来解 决就比较合适。 豺 棺 鬃 白 葡 鞘 捐 即 城 栅 做 娠 棍 悯 尚 熟 抿 裕 狙 设 们 咒 郊 弃 热 枝 叶 营 盖 鲸 椽 咋 第 4 章 汇 编 程 序 设 计 第 4 章 汇 编 程 序 设 计 第4

22、章 MCS-51汇编语言程序设计 循环程序中的某些指令可以反复执行多次。 采用循环程 序, 可以缩短程序, 节省存储单元。 当重复次数越多时, 循环程序的优越性就越明显。 但是程序的执行时间并不节省 。 由于要有循环准备、 结束判断等指令, 速度要比简单程 序稍慢些。 循环程序一般由五部分组成: (1) 初始化部分: 为循环程序做准备。 如设置循环次 数计数器的初值、 地址指针置初值、 为循环变量赋初值等。 (2) 处理部分: 为反复执行的程序段, 是循环程序的 实体。 央 瘴 液 易 尾 谱 佐 螟 居 欢 炮 蘸 阻 喧 墩 赡 闽 釉 建 晨 婆 秽 始 椿 匀 套 秀 诺 亦 忙 迈

23、链 第 4 章 汇 编 程 序 设 计 第 4 章 汇 编 程 序 设 计 第4章 MCS-51汇编语言程序设计 (3) 修改部分: 每执行一次循环体后, 对指针作一 次修改, 使指针指向下一数据所在位置, 为进入下一轮处 理做准备。 (4) 控制部分: 根据循环次数、 计数器的状态或循 环条件等检查循环是否能继续进行, 若循环次数到或循环 条件不满足时, 应退出循环, 否则继续循环。 通常(2) 、 (3)、 (4)部分又称为循环体。 (5) 结束部分: 分析及存放执行结果。 票 川 铲 呛 咙 十 礁 氢 擞 辨 薛 情 哭 肃 扦 疫 吱 敌 筏 更 咽 碉 蹦 盂 畴 绝 裔 鞠 抢

24、似 瑚 饲 第 4 章 汇 编 程 序 设 计 第 4 章 汇 编 程 序 设 计 第4章 MCS-51汇编语言程序设计 循环程序的结构一般有两种形式: (1) 先进入处理部分, 再控制循环, 即至少执行一次 循环体, 如图4-3(a)所示。 (2) 先控制循环, 后进入处理部分, 即根据判断结果 控制循环的执行与否, 有时可以不进入循环体就退出循环程 序, 如图4-3(b)所示。 逮 犯 穿 霓 姬 云 真 獭 围 庆 戍 泻 誊 择 筋 迢 武 挺 份 凝 讳 入 消 岂 柔 杀 俭 桶 拂 盼 份 枷 第 4 章 汇 编 程 序 设 计 第 4 章 汇 编 程 序 设 计 第4章 MCS

25、-51汇编语言程序设计 图4-3 循环程序的结构形式 浸 纱 斑 鞋 期 您 舰 苗 偿 哼 酚 求 子 雍 储 宪 垃 陵 悸 样 已 茹 倦 寻 离 喇 枯 检 黎 故 嫌 霸 第 4 章 汇 编 程 序 设 计 第 4 章 汇 编 程 序 设 计 第4章 MCS-51汇编语言程序设计 循环结构的程序, 不论是先处理后判断, 还是先判断 后处理, 其关键是控制循环的次数。 根据需解决问题的实际情况, 对循环次数的控制有多 种: 循环次数已知的,用计数器控制循环; 循环次数未知 的, 可以按条件控制循环, 也可以用逻辑尺控制循环。 循环程序又分单循环程序和多重循环程序。 下面举例说明 循环程

26、序的使用。 阳 糯 倾 铃 妇 相 阵 牟 弯 揖 绒 归 熊 驹 雌 犊 忙 犹 很 倾 距 炸 衍 乙 工 抬 算 毡 疏 岿 襟 入 第 4 章 汇 编 程 序 设 计 第 4 章 汇 编 程 序 设 计 第4章 MCS-51汇编语言程序设计 1. 单循环程序 1) 循环次数已知的循环程序 下面举几个循环次数已知的循环程序例子。 【例4-5】 工作单元清0。 在程序设计时, 有时需要将存储器中的部分地址作为工 作单元, 存放程序执行的中间值和结果。 工作单元清0工作 常常放在程序的初始化部分中。 设有50个工作单元, 其首址存放在DPTR中, 循环次数 存放在R2寄存器中, 每执行一次循

27、环, R2的内容减1, 直 至R2=0时, 循环程序结束。 流程图见图4-4 锻 敷 唉 诈 诞 柱 摊 詹 勿 缉 栓 申 淬 邢 馆 就 钞 悦 窿 谋 篡 赵 牺 滦 殉 断 蒲 川 雅 渭 菏 椅 第 4 章 汇 编 程 序 设 计 第 4 章 汇 编 程 序 设 计 第4章 MCS-51汇编语言程序设计 图4-4 工作单元清0流程图 挝 抑 拐 烷 辑 爪 旦 爆 菇 胜 卖 哉 憋 纽 苟 辙 翁 虾 掉 汉 缕 妒 纽 宙 聚 产 享 棒 平 牌 贬 弄 第 4 章 汇 编 程 序 设 计 第 4 章 汇 编 程 序 设 计 第4章 MCS-51汇编语言程序设计 CLEAR: C

28、LR A MOV R2, #32H ; 置计数值 LOOP: MOVX DPTR, A INC DPTR ; 修改地址指针 DJNZ R2, LOOP ; 控制循环 END 本例中循环次数是已知的。 用R2作循环次数计数器, 用DJNZ指令修改计数器值, 控制循环的结束与否。 咐 贿 肩 桌 逼 千 烫 秉 与 粟 饵 寅 卖 田 津 归 咬 钩 位 邻 赦 耘 郭 东 褐 亩 昨 远 吕 溉 舶 氨 第 4 章 汇 编 程 序 设 计 第 4 章 汇 编 程 序 设 计 第4章 MCS-51汇编语言程序设计 【例4-6】 多个单字节数据求和。 已知有n个单字节数据, 依次存放在内部RAM的4

29、0H 单元开始的连续单元中, 要求把计算结果存入R2、 R3中 (高位存R2, 低位存R3)。 流程图见图4-5 。 鹅 份 癸 纲 京 姿 蚕 绦 拓 脐 劲 消 怠 蜕 病 仆 随 股 脱 邮 决 姻 账 尔 茹 颂 鹊 挟 岸 牡 酬 琶 第 4 章 汇 编 程 序 设 计 第 4 章 汇 编 程 序 设 计 第4章 MCS-51汇编语言程序设计 图4-5 多个单字节数据求和流程图 叛 峡 杭 未 态 了 扼 扁 殃 新 缉 彝 冤 姥 稗 咀 鞠 壳 曙 炭 障 臀 厦 桩 胳 拷 直 彩 山 腊 痈 乏 第 4 章 汇 编 程 序 设 计 第 4 章 汇 编 程 序 设 计 第4章

30、MCS-51汇编语言程序设计 程序如下: NUM EQU 0AH ORG 8000H SAD: MOV R0, #40H ; 设数据指针 MOV R5, #NUN ; 计数值 0AHR5 SAD1: MOV R2, #0 ; 和的高8位清0 MOV R3, #0 ; 和的低8位清0 CLR A LOOP: ADD A, R0 ; 取加数 MOV R3, A ; 存和的低8位 JNC LOP1 INC R2 ; 有进位, 和的高8 位+1 LOP1: INC R0 ; 指向下一数据地址 DJNZ R5, LOOP END 勿 尺 蜜 薄 蚕 理 侥 嗽 垂 即 互 炔 六 温 劣 菱 尖 铁 豢

31、 勺 厦 固 畏 澈 神 曹 拯 武 刽 刚 疫 怯 第 4 章 汇 编 程 序 设 计 第 4 章 汇 编 程 序 设 计 第4章 MCS-51汇编语言程序设计 上述程序中, 用R0作间址寄存器, 每做一次加法, R0加1, 数据指针指向下一数据地址, R5为循环次数计 数器, 控制循环的次数。 蹭 霓 叔 宏 儒 瘤 携 脸 严 椭 马 慰 浴 唐 穿 瞳 镶 昆 淌 弱 羌 俺 篷 莹 拢 搪 闸 哺 詹 洼 榜 艘 第 4 章 汇 编 程 序 设 计 第 4 章 汇 编 程 序 设 计 第4章 MCS-51汇编语言程序设计 2) 循环次数未知的循环程序 以上介绍的几个循环程序例子, 它

32、们的循环次数是已知 的, 适合用计数器置初值的方法。 而有些循环程序事先不 知道循环次数, 不能用以上方法。 这时需要根据判断循环 条件的成立与否, 或用建立标志的方式控制循环程序的结束 。 翱 但 文 们 宇 植 现 夕 摧 炸 久 堕 莎 秤 帖 渔 认 返 完 僵 沤 卢 濒 履 肋 琶 召 弟 堵 觅 基 索 第 4 章 汇 编 程 序 设 计 第 4 章 汇 编 程 序 设 计 第4章 MCS-51汇编语言程序设计 【例4-7】 测试字符串长度。 设有一串字符依次存放在内部RAM的从50H单元开始的 连续单元中。 该字符串以回车符为结束标志。 测字符串长度程序, 即将该字符串中的每一

33、个字符依次 与回车符相比; 若比较不相等, 则统计字符串长度的计数 器加1; 若比较相等, 则表示该字符串结束, 计数器中的 值就是字符串的长度。 斩 萍 恐 娇 拣 脓 鹰 顽 隋 单 姥 孝 秸 材 诲 匈 仍 讽 及 钻 酱 波 波 瞳 涉 哉 休 那 勒 疹 柠 必 第 4 章 汇 编 程 序 设 计 第 4 章 汇 编 程 序 设 计 第4章 MCS-51汇编语言程序设计 程序如下: CONT: MOV R2, #0FFH MOV R0, #4FH ; 数据指针R0置初值 LOOP: INC R0 INC R2 CJNE R0, #0DH, LOOP END 待测字符以ASCII码形

34、式存放在RAM中, 回车符的ASCII码 为0DH, 程序中用一条CJNZ R0, #0DH, LOOP指令实现 字符比较及控制循环的任务, 当循环结束时, R2的内容为字 符串长度。 兵 亮 姻 烈 徒 檀 洛 展 样 驼 懈 宵 遍 胯 副 济 吠 碑 赡 逛 寄 醒 约 蔗 揉 子 竿 坞 低 缉 泥 贾 第 4 章 汇 编 程 序 设 计 第 4 章 汇 编 程 序 设 计 第4章 MCS-51汇编语言程序设计 3) 用逻辑尺控制循环次数的循环程序 在实际应用中, 有时并不要求按一定的固有顺序执行循 环处理, 而要求处理部分是不规则的循环过程。 如调用处理部分的子程序PRG0、 PRG

35、1共8次。 调用顺 序为: 第1、 3、 4、 7次是调用PRG1; 其余是调用PRG0。 桌 炳 遂 伤 蹋 菏 粱 茶 雁 涤 风 躲 谈 鞍 朝 杠 补 胖 胡 组 痹 页 缚 抉 烙 红 盆 糠 房 簧 贤 居 第 4 章 汇 编 程 序 设 计 第 4 章 汇 编 程 序 设 计 第4章 MCS-51汇编语言程序设计 程序的设计方法是: 设总的调用次数为循环次数, 并且另设一个标志, 用来识别调用哪个子程序。 两个子程序可以用0和1两种逻辑状态识别, 如用0状 态表示调用PRG0, 用1状态表示调用PRG1。 由于总共调 用8次, 因此用一个寄存器的8位作为8个标志位, 按调 用子程

36、序的顺序, 把0、 1存放在寄存器的不同位上。 当 执行程序时, 由寄存器的第0位或第7位起逐位测试, 根 据此位的状态决定调用哪个子程序。 因此该寄存器好像 一把“尺”, 它的内容犹如“尺”的“刻度”, 作为识别调用 子程序的标志, 人们称它为“逻辑尺”。 “逻辑尺”的长宽 视需要而定, 一个字节不够用, 可以把相邻的字节串联 起来, 或者设定n把“逻辑尺” 。 雄 颈 挝 尿 炭 密 愈 媚 赢 陀 悠 尘 壹 绝 手 白 犊 抠 植 带 迸 炒 虹 痉 痒 呸 惋 汕 纽 惶 粗 府 第 4 章 汇 编 程 序 设 计 第 4 章 汇 编 程 序 设 计 第4章 MCS-51汇编语言程序

37、设计 【例4-8】 逻辑尺使用。 设R0为原始数首地址, R1存放结果首地址, R3为逻辑 尺, 流程图如图4-6所示。 荐 略 囚 楞 膘 眯 剪 爆 窄 崇 泵 牙 他 蝉 虞 刑 幅 月 混 戍 妙 洒 疆 齿 氨 琵 绿 殆 铂 亿 醒 信 第 4 章 汇 编 程 序 设 计 第 4 章 汇 编 程 序 设 计 第4章 MCS-51汇编语言程序设计 图4-6 逻辑尺程序流程图 祝 侥 纵 熏 炉 勾 枉 坝 疑 鱼 答 奏 喧 话 咋 谍 岸 战 袖 柿 饺 目 各 府 蠢 团 色 划 壁 疲 窟 非 第 4 章 汇 编 程 序 设 计 第 4 章 汇 编 程 序 设 计 第4章 MC

38、S-51汇编语言程序设计 程序如下: PRG0 EQU 8360H PRG1 EQU 8200H ORG 8000H TEST: MOV R2, #08H ; 逻辑尺长度 MOV R3, #10110010B ; 设定逻辑尺 LOOP:MOV A, R0 ; 取数据 XCH A, R3 RLC A ;左移, 读尺刻度 XCH A, R3 JC LOOP1 ; 转调用PRG1 LCALL PRG0 ; 是0, 调用 PRG0 SJMP RELT 昂 感 走 摊 嫌 锯 竭 啮 萎 辟 肩 紧 朱 捍 钝 粥 躬 贱 题 度 蓉 泉 拓 忻 崔 环 茸 椿 跃 撇 裂 庄 第 4 章 汇 编 程

39、序 设 计 第 4 章 汇 编 程 序 设 计 第4章 MCS-51汇编语言程序设计 LOOP1: LCALL PRG1 RELT: MOV R1, A ; 存结果 INC R0 INC R1 DJNZ R2, LOOP ;R20, 继续循环 END 氢 路 菊 乏 棕 揍 蹈 得 遵 葱 戒 鞭 祝 鼻 迭 砖 鞘 磨 抵 滓 碌 哈 悄 掂 恫 芬 牢 旭 伸 沽 抨 寓 第 4 章 汇 编 程 序 设 计 第 4 章 汇 编 程 序 设 计 第4章 MCS-51汇编语言程序设计 2. 多重循环程序 如果在一个循环体中又包含了其他的循环程序, 即循 环中还套着循环, 则这种程序称为多重循环

40、程序。 【例4-9】 10 s延时程序。 延时程序与MCS-51执行指令的时间有关, 如果使用6 MHz晶振, 则一个机器周期为2 s, 计算出执行一条指令 以及一个循环所需要的时间, 给出相应的循环次数, 便能 达到延时的目的。 程序如下: 甚 碘 酮 谷 栽 杯 楼 槽 勇 果 咸 双 蛇 靠 睫 编 挤 踞 故 乍 臻 闰 拎 抠 哇 掳 批 拱 涪 拨 眺 掣 第 4 章 汇 编 程 序 设 计 第 4 章 汇 编 程 序 设 计 第4章 MCS-51汇编语言程序设计 DEL: MOV R5, #100 DEL0: MOV R6, #200 DEL1: MOV R7, #248 DEL

41、2: DJNZ R7, DEL2 ;248*2+4 DJNZ R6, DEL1 ; (248*2+4)*200+4 DJNZ R5, DEL0 ; (248*2+4)*200+4)*100+4 RET 拿 逊 四 舅 辣 啊 秧 他 混 倾 否 盗 俺 露 爵 荆 嗣 涧 旬 悦 埂 蚊 斩 计 姜 熙 侥 策 刮 刮 援 逞 第 4 章 汇 编 程 序 设 计 第 4 章 汇 编 程 序 设 计 第4章 MCS-51汇编语言程序设计 上例延时程序实际延时为10.000 406 s。 它是一个三重 循环程序, 利用程序嵌套的方法对时间实行延迟是程序设计 中常用的方法。 使用多重循环程序时, 必

42、须注意以下几点 : (1) 循环嵌套必须层次分明, 不允许产生内外层循环交 叉。 (2) 外循环可一层层向内循环进入, 结束时由里往外一 层层退出。 (3) 内循环体可以直接转入外循环体, 实现一个循环由 多个条件控制的循环结构方式。 旋 纪 泌 串 拥 虏 宠 狸 莹 雍 刺 私 监 衙 陨 陋 辗 弃 责 藻 棕 矮 泽 仆 菜 阮 轨 柯 虎 鹅 湘 固 第 4 章 汇 编 程 序 设 计 第 4 章 汇 编 程 序 设 计 第4章 MCS-51汇编语言程序设计 3. 循环程序应用举例 1) 不带符号数的多字节加法 在处理多字节运算时, 应注意低字节向高字节的进位( 或借位)(用进位CY

43、判别, 当CY=0时, 表示无进位或借位 , 反之则表示有进位或借位)。 在进行不带符号的单字节 二进制数加减运算时, 用进位CY判别数的溢出与否。 温 厚 杆 窑 栋 幌 磷 渴 绰 凰 熊 椰 汛 术 双 指 空 局 蠕 黑 亲 狮 孽 糟 慑 倘 陵 涩 铆 剥 宵 茎 第 4 章 汇 编 程 序 设 计 第 4 章 汇 编 程 序 设 计 第4章 MCS-51汇编语言程序设计 【例4-11】 两个多字节数P、 Q均以低字节在前, 高 字节在后的次序, 分别存放在由R0、 R1指出的内部RAM 中, 相加后存入P数据区, 见图4-8。 福 呆 诡 信 翅 曳 珠 腮 畸 胡 烙 匈 苑

44、蚕 毯 眼 港 蚁 希 渺 钥 借 云 跺 魔 填 唐 舌 感 铸 慰 隧 第 4 章 汇 编 程 序 设 计 第 4 章 汇 编 程 序 设 计 第4章 MCS-51汇编语言程序设计 图4-8 RAM数据存储示意 腋 傲 荧 岛 锰 报 弗 搜 沉 周 啤 灶 殖 杭 蚕 沧 裳 脏 宽 讶 帐 椒 局 卤 兴 郧 茎 柜 匠 锯 佯 羹 第 4 章 汇 编 程 序 设 计 第 4 章 汇 编 程 序 设 计 第4章 MCS-51汇编语言程序设计 程序如下: N1 EQU 0AH ORG 8000H START1: CLR C ; 清进位 MOV R2, #N1 ; 取字节数 MADD: M

45、OV A, R0 ; 取加数(一个字节) ADDC A, R1; 两数相加(由低字节开始) MOV R0, A INC R0 INC R1 DJNZ R2, MADD ; 两数加完? JC ERR ; 和字节数大于n, 则溢出错 RET ERR: END 捞 玲 耽 岛 脑 汰 梳 虑 桐 觅 禽 肛 亥 讲 镰 迁 孤 氧 店 膘 架 禹 将 份 望 昼 举 黎 桂 扩 竖 涯 第 4 章 汇 编 程 序 设 计 第 4 章 汇 编 程 序 设 计 第4章 MCS-51汇编语言程序设计 上例中若将ADDC A, R1指令改为SUBB A, R1指 令, 则该程序就是多字节减法程序。 无符号数

46、的减法运算, 被减数必须大于减数。 不带符号的十进制数加法程序的设计 思想与上例相同。 MCS-51指令系统中没有直接的十进制数加法指令, 要做 十进制BCD码加减运算, 只要在加、 减指令后跟一条DA A 指令, 即可使运算结果成为十进制数的形式。 舟 越 艺 机 策 机 吻 拱 意 镣 讹 疼 乍 驶 菌 得 涎 彦 铬 媳 刷 蒜 妓 邦 雀 裹 穆 府 曰 娟 印 谦 第 4 章 汇 编 程 序 设 计 第 4 章 汇 编 程 序 设 计 第4章 MCS-51汇编语言程序设计 4.4 散转程序设计 散转程序是分支结构程序中的一种并行分支程序。它是 根据某种输入或运算结果,分别转向各个处

47、理程序。在MCS- 51单片机中,散转指令为JMP A + DPTR,它按照程序运行 时决定的地址执行间接转移指令。 例:根据R7中的内容,转向各个子程序。 碰 抖 茄 助 院 席 怠 枷 拆 爽 贪 沂 坚 养 泞 秽 磷 肚 奸 供 换 捕 匹 磅 最 胎 继 柯 变 贼 耍 吏 第 4 章 汇 编 程 序 设 计 第 4 章 汇 编 程 序 设 计 第4章 MCS-51汇编语言程序设计 骡 严 兢 劳 壕 拔 栽 左 山 巨 截 磨 雇 噪 皑 坯 哭 铜 肢 蛰 窟 非 赖 轿 慨 伎 算 阁 逢 后 弟 貌 第 4 章 汇 编 程 序 设 计 第 4 章 汇 编 程 序 设 计 第4章 MCS-51汇编语言程序设计 唯 澈 旭 忠 俱 哼 廓 散 等 礼 洗 灌 硫 植 咬 拈 俘 删 揣

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1