程序设计的基本方法

上传人:san****019 文档编号:22506476 上传时间:2021-05-27 格式:PPT 页数:51 大小:399.51KB
收藏 版权申诉 举报 下载
程序设计的基本方法_第1页
第1页 / 共51页
程序设计的基本方法_第2页
第2页 / 共51页
程序设计的基本方法_第3页
第3页 / 共51页
资源描述:

《程序设计的基本方法》由会员分享,可在线阅读,更多相关《程序设计的基本方法(51页珍藏版)》请在装配图网上搜索。

1、第 四 章 程 序 设 计 的 基 本 方 法 顺 序 、 分 支 、 循 环 程 序 和 子 程 序 的 设 计 是 汇 编 语言 程 序 设 计 的 基 本 内 容 。 在 此 基 础 上 还 要 掌 握 汇 编 语 言 程 序 设 计 的 基 本 方法 和 技 巧 , 包 括 递 归 子 程 序 设 计 、 多 模 块 程 序 设 计方 法 等 。 4.1 概 述程 序 设 计 通 常 从 两 个 方 面 入 手 , 一 是 要 认 真分 析 问 题 的 要 求 , 选 择 好 的 解 决 方 法 ; 二 是 要 针对 选 定 的 算 法 , 编 写 高 质 量 的 程 序 。高 质 量

2、 的 程 序 在 满 足 设 计 要 求 、 实 现 预 定 功能 的 基 础 上 , 还 应 尽 可 能 实 现 以 下 几 点 :1) 结 构 清 晰 、 简 明 、 易 读 、 易 调 试 ;2) 执 行 速 度 快 ;3) 占 用 存 储 空 间 少 。 一 、 汇 编 语 言 程 序 设 计 的 一 般 步 骤 : 分 析 问 题 , 合 适 的 解 题 方 法 ; 根 据 具 体 问 题 , 确 定 输 入 输 出 数 据 的 格 式 ; 分 配 存 储 区 并 给 变 量 命 名 ( 包 括 分 配 寄 存 器 ) ; 绘 制 程 序 流 程 图 ; 根 据 流 程 图 编 写

3、程 序 ; 静 态 检 查 、 上 机 调 试 。 二 、 程 序 流 程 图 常 用 符 号 4.2 顺 序 程 序 设 计 例 1 从 键 盘 输 入 0至 9中 任 一 自 然 数 x, 求 其 立 方 值 。 分 析 : 可 以 用 乘 法 运 算 , 也 可 以 用 查 表 实 现 。 输 入 数 据 : 1位 自 然 数 , 用 一 字 节 单 元 存 放 ; 输 出 数 据 最大 为 729, 用 一 个 字 单 元 存 放 。 存 储 单 元 分 配 : 字 节 变 量 X存 放 输 入 的 自 然 数 ; 字 变 量XXX存 放 X的 立 方 值 ; 立 方 表 首 址 为

4、TAB, 表 中 共 10项 ,每 项 占 一 个 字 。 X与 其 立 方 值 的 对 应 关 系 :( TAB+2*X) = X的 立 方 值 绘 制 流 程 图 。 编 写 程 序 。 在 分 支 程 序 中 , 不 同 的 条 件 往 往 是 通 过 标 志 寄 存 器 中 条件 标 志 的 不 同 状 态 反 映 的 。 而 程 序 的 分 支 通 过 转 移 指 令 来 实现 , 因 此 分 支 程 序 设 计 中 一 个 重 要 问 题 是 根 据 各 标 志 的 不 同状 态 选 用 合 适 的 转 移 指 令 。 4.3.1 转 移 指 令 转 移 指 令 共 计 19条 ,

5、 分 为 两 类 无 条 件 转 移 指 、 条 件转 移 指 令 (不 影 响 任 何 标 志 位 ) 基 本 格 式 为 : J 标 号 ( 代 表 一 种 转 移 条 件 ) 条 件 转 移 指 令 根 据 检 测 标 志 位 的 状 态 来 判 断 条 件 , 若 条 件为 真 , 则 转 至 标 号 处 执 行 程 序 , 否 则 顺 序 往 下 执 行 程 序 。操 作 : ( IP) ( IP) +D ( 8位 偏 移 量 , -128127)条 件 转 移 指 令 分 三 类 :( 1) 简 单 条 件 转 移 指 令 ( 10条 , 见 P92 表 4.1) 根 据 单 个

6、标 志 的 状 态 决 定 是 否 转 移( 2) 无 符 号 数 条 件 转 移 指 令 ( 4条 )用 于 检 测 无 符 号 数 的 比 较( 3) 有 符 号 数 条 件 转 移 指 令 ( 4条 ) 用 于 检 测 带 符 号 数 的 比 较 1. 简 单 条 件 转 移 指 令JE/JZ JNE/JNZJS JNSJO JNOJC JNCJP/JPE JNP/JPO 先 执 行 影 响 标 志 位 的 指 令 ( 如 算 术 运 算 、 比 较 及 位 测 试 等指 令 ) , 再 执 行 适 当 的 条 件 转 移 指 令 检 测 相 应 的 标 志 位 , 根 据条 件 实 现

7、 转 移 。例 : 下 列 程 序 中 X、 Y均 为 字 变 量 , X中 存 放 着 有 符 号 数 x.MOV Y, -1MOV AX,XCMP AX,0JE EXIT1ADD AX,1000HJO OVERFLOWJNS EXIT1 NEG AX EXIT1 MOV Y,AXMOV AH,4CHINT 21HOVERFLOW: MOV AH,4CHINT 21H 2. 无 符 号 数 条 件 转 移 指 令 3. 有 符 号 数 条 件 转 移 指 令 例 1: MOV AL,-40HCMP AL,50HJG L1; 比 较 JA L1MOV SI, 0L: MOV WORD PRT

8、SI, 0ADD SI, 2CMP SI, OF000HJBE L 无 条 件 转 移 指 令 不 构 成 分 支 程 序 , 但 在 分 支 程 序 中 经 常 使用 它 将 各 分 支 的 出 口 汇 集 到 一 起 , 特 别 是 当 条 件 转 移 指 令 的 转移 范 围 超 过 -128127个 字 节 时 , 往 往 要 借 助 无 条 件 转 移 指 令实 现 。例 : JL L1.L1 JGE L0JMP L1L0: .L1: 无 条 件 转 移 指 令 分 为 段 内 直 接 转 移 、 段 内 间 接 转 移 、 段 间直 接 转 移 、 段 间 间 接 转 移 。例 :

9、直 接 转 移 : JMP NEXT间 接 转 移 : JMP WORD PTR BXJMP DWORD PTR BX 分 析 问 题 , 合 适 的 解 题 方 法 ; 根 据 具 体 问 题 , 确 定 输 入 输 出 数 据 的 格 式 ; 分 配 存 储 区 并 给 变 量 命 名 ( 包 括 分 配 寄 存 器 ) ; 绘 制 程 序 流 程 图 ; 根 据 流 程 图 编 写 程 序 ; 静 态 检 查 、 上 机 调 试 。 例 1 编 写 计 算 下 面 函 数 值 的 程 序 ( x, y的 值 均 在 -128127之 间 ) 输 入 数 据 为 x, y, 输 出 数 据

10、 为 a 异 号y x, 0 0y0,x 1- 0y0, x 1a 例 2 从 键 盘 输 入 09中 任 一 自 然 数 x, 求 其 立 方 值 。 若 输 入 的 字符 不 是 09中 的 某 数 字 , 显 示 “ INPUT ERROR!”, 表 明 输入 错 误 。 选 择 合 适 的 分 支 指 令 ; 要 为 每 个 分 支 安 排 出 口 ; 应 把 各 分 支 中 的 公 共 部 分 尽 量 提 到 分 支 前 或 分 支 后 的 公共 程 序 段 中 , 使 程 序 简 短 、 清 晰 ; 在 分 支 比 较 多 时 , 流 程 图 中 对 每 个 分 支 判 断 的 先

11、 后 次 序应 尽 量 与 问 题 提 出 的 先 后 次 序 一 致 。 程 序 也 要 与 流 程 图中 各 分 支 的 先 后 次 序 一 致 ; 在 调 试 分 支 程 序 时 , 要 假 定 各 种 可 能 的 输 入 数 据 , 沿 着每 一 支 路 逐 一 检 查 , 测 试 程 序 是 否 正 确 。分 支 程 序 设 计 中 的 注 意 事 项 : 保 证 循 环 正 常 执 行 和 结 束 的 条 件 : 正 确 地 初 始 化 循 环 控 制 计 数 和 初 始 条 件 正 确 地 检 测 循 环 条 件 必 须 保 证 能 达 到 循 环 结 束 条 件 (例 如 在

12、循 环 体 内 有 修 改 循 环控 制 值 的 指 令 ) MOV CL,0L: AND AX,AXJZ EXITSAL AX,1JNC LINC CLJMP LEXIT: MOV CL,0MOV BX,16L: SAL AX,1JNC NEXTINC CLNEXT: DEC BXJNZ L 循 环 控 制 指 令 循 环 控 制 指 令 的 转 移 范 围 为 : -128 +127字 节( 2) 等 于 继 续 循 环 指 令 格 式 : LOOPZ/LOOPE 标 号 格 式 : LOOP 标 号 操 作 : 如 图 所 示 ( 1) LOOP指 令 (CX) 0? 执 行 循 环 体

13、(CX) (CX) -1是 否退 出 循 环(CX) 0 且 ZF =1 ? 0 且 ZF 0 ?( 3) 不 等 于 继 续 循 环 指 令格 式 : LOOPNZ/LOOPNE 标 号 MOV CX, 80 MOV SI, -1 MOV AL, $ AGAIN: INC SI CMP AL, STRSSI LOOPNE AGAIN MOV LEN, SI设 : STRS DB string$ 一 、 循 环 次 数 已 知 的 循 环 程 序 设 计例 1 已 知 以 BUF为 首 址 的 字 存 储 区 中 存 放 着 n个有 符 号 二 进 制 数 , 试 编 写 程 序 , 将 其

14、中 大 于 等 于0的 数 依 次 送 入 BUF1为 首 址 的 字 存 储 区 中 , 小 于0的 数 依 次 送 入 以 BUF2为 首 址 的 字 存 储 区 中 。 一 、 循 环 次 数 已 知 的 循 环 程 序 设 计例 2 顺 序 查 表 程 序 设 有 n个 登 记 项 存 放 在 以 TAB为 首 址 的 字 节 存储 区 中 。 每 个 登 记 项 占 4个 字 节 ( 主 目 占 1个 字 节 ,信 息 占 3个 字 节 ) 。 在 字 节 变 量 A中 存 有 一 主 目 。现 需 要 在 表 中 查 找 与 A中 主 目 相 同 的 登 记 项 。 若 查到 ,

15、则 把 该 登 记 项 主 目 的 地 址 送 入 DI, 信 息 部 分依 次 送 入 DH、 DL、 CH 3个 8位 寄 存 器 中 , 且 将 字节 变 量 F置 1。 若 未 查 到 , 将 F清 0。 二 、 最 大 循 环 次 数 未 知 的 循 环 程 序 设 计例 3 已 知 在 以 BUF为 首 地 址 的 字 节 存 储 区 , 存 放着 以 $作 结 束 标 志 的 字 符 串 。 试 编 写 程 序 , 在CRT上 显 示 该 字 符 串 , 并 要 求 将 小 写 字 母 以 大 写字 母 形 式 显 示 。 二 、 最 大 循 环 次 数 未 知 的 循 环 程

16、序 设 计例 4 已 知 在 以 PROG为 首 地 址 的 字 节 存 储 区 中 存放 着 一 段 汇 编 源 程 序 , 最 后 以 Ctrl-Z(其 ASCII码 为1AH) 作 为 结 束 标 志 。 试 编 写 程 序 , 统 计 MOV的 出 现 次 数 , 并 将 结 果 送 入 字 变 量 NUM中 。 二 、 最 大 循 环 次 数 未 知 的 循 环 程 序 设 计例 5 已 知 若 干 个 非 0整 数 存 放 在 以 A为 首 址 的 字存 储 区 中 , 末 尾 以 0作 为 结 束 标 志 。 现 要 求 将 其中 的 负 数 删 除 , 而 把 留 下 的 正

17、数 仍 连 续 地 重 新 存储 在 以 A为 首 址 的 字 存 储 区 中 , 并 把 结 束 标 志 改为 -1, 试 编 写 其 程 序 。 二 、 最 大 循 环 次 数 未 知 的 循 环 程 序 设 计练 习 试 编 制 一 个 程 序 , 产 生 n个 斐 波 纳 契 数 数列 。 该 数 列 的 第 1、 2个 数 分 别 为 0、 1, 从 第 3个数 开 始 , 每 一 个 数 等 于 前 两 个 数 之 和 。提 示 存 储 空 间 分 配 :NUM DW 20H FIBONA DW 50H DUP(0)寄 存 器 : AX、 BX中 存 放 数 列 中 连 续 两 个

18、 元素 , CX为 计 数 器 , DI为 存 储 数 列 元 素 的 指 针 。 多 重 循 环 即 循 环 体 内 再 套 有 循 环 。 设 计 多重 循 环 程 序 时 , 可 以 从 外 层 循 环 到 内 层 循 环 一层 层 进 行 。 在 设 计 外 层 循 环 时 将 内 层 循 环 看 成一 个 处 理 粗 框 , 然 后 再 将 粗 框 细 化 , 分 成 置 初值 、 工 作 、 修 改 和 控 制 四 个 部 分 。 例 1 已 知 m n矩 阵 A的 元 素 aij按 行 序 存 放 在 以BUFA为 首 址 的 字 节 存 储 区 中 , 试 编 写 程 序 ,

19、示每 行 元 素 的 和 Si。 其 中 aij 为 8位 二 进 制 数 。),.,2,1( 1 miaS nj iji 例 2 在 以 BUF为 首 址 的 字 节 存 储 区 中 存 放 有 n个无 符 号 数 x1, x2, ,xn, 现 需 将 它 们 按 从 小 到 大 的顺 序 排 列 在 BUF存 储 区 中 , 试 编 写 程 序 。 子 程 序 设 计 时 要 考 虑 的 主 要 问 题 :子 程 序 的 调 用 和 返 回 ;子 程 序 的 定 义 ;主 程 序 和 子 程 序 间 的 参 数 传 递 ;如 何 编 制 子 程 序 。 一 、 子 程 序 调 用 指 令

20、CALL:1) 段 内 直 接 调 用格 式 : CALL 过 程 名功 能 : ( IP) 入 栈 目 的 地 址 EA IP2) 段 间 直 接 调 用格 式 : CALL FAR PTR 过 程 名功 能 : ( CS) 入 栈 , 目 的 地 址 段 首 址 CS ( IP) 入 栈 , 目 的 地 址 EA IP 一 、 子 程 序 调 用 指 令 CALL:3) 段 内 间 接 调 用格 式 : CALL WORD PTR OPD功 能 : ( IP) 入 栈 ( OPD) IP3) 段 间 间 接 调 用格 式 : CALL DWORD PTR OPD功 能 : ( CS) 入

21、栈 , ( OPD+2) CS ( IP) 入 栈 , ( OPD) IP 二 、 返 回 指 令 RET:1) 格 式 1 格 式 : RET功 能 : ( SP) IP ( SP) CS*段 内 返 回 只 执 行 2) 格 式 2格 式 : RET n其 中 n是 偶 数 , 该 指 令 用 来 废 除 栈 顶 n/2个 无 用 的 参 数 ,即 执 行 格 式 1中 的 步 骤 后 再 执 行 ( SP) +n SP。 一 、 子 程 序 的 定 义 格 式 :1) 格 式 1 子 程 序 名 PROC NEAR ( NEAR可 省 略 ) 子 程 序 名 ENDP2) 格 式 2子

22、程 序 名 PROC FAR 子 程 序 名 ENDP 二 、 现 场 的 保 护 与 恢 复 : 如 果 在 子 程 序 中 用 到 某 些 寄 存 器 ( 或 存 储 单 元 ) ,就 会 破 坏 这 些 寄 存 器 ( 或 存 储 单 元 ) 在 转 子 前 原 有 的 内容 , 因 此 必 须 考 虑 现 场 的 保 护 与 恢 复 , 一 般 情 况 下 , 在子 程 序 的 开 始 安 排 一 串 保 护 现 场 的 语 句 , 在 子 程 序 返 回指 令 之 前 再 恢 复 现 场 。例 : A PROCPUSH AXPUSH BXPOP BXPOP AXRETA ENDP 一 、 寄 存 器 法 ;二 、 约 定 单 元 法 ;三 、 堆 栈 法 。 例 1: 编 写 将 n个 8位 无 符 号 二 进 制 数 排 成 递 增 序列 的 子 程 序 SORT。 认 真 复 习 , 融 会 贯 通

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!