清华大学冯博琴微机原理第4章汇编语言程序设计

上传人:san****019 文档编号:21175539 上传时间:2021-04-25 格式:PPT 页数:125 大小:1.47MB
收藏 版权申诉 举报 下载
清华大学冯博琴微机原理第4章汇编语言程序设计_第1页
第1页 / 共125页
清华大学冯博琴微机原理第4章汇编语言程序设计_第2页
第2页 / 共125页
清华大学冯博琴微机原理第4章汇编语言程序设计_第3页
第3页 / 共125页
资源描述:

《清华大学冯博琴微机原理第4章汇编语言程序设计》由会员分享,可在线阅读,更多相关《清华大学冯博琴微机原理第4章汇编语言程序设计(125页珍藏版)》请在装配图网上搜索。

1、第 4章 汇 编 语 言 程 序 设 计 .ASM .OBJ .EXE编 译 连 接编 译 程 序 : MASM.EXE连 接 程 序 : LINK.EXE 用 户 编 写 程 序 , 程 序 在 计 算 机 中 运 行 ,计 算 机 的 控 制 由 操 作 系 统 交 给 用 户 程 序 , 运行 用 户 程 序 , 当 用 户 程 序 运 行 结 束 后 , 应 再将 控 制 权 交 回 操 作 系 统 , 所 以 , 在 程 序 中 应该 有 返 回 DOS的 指 令 。 在 计 算 机 中 , 返 回DOS的 指 令 是 操 作 系 统 中 的 一 个 子 程 序 , 用户 使 用 时

2、 应 调 用 这 个 子 程 序 。 每 当 一 个 用 户 的 可 执 行 文 件 .EXE装 入 内 存 后 , 存 储 器 的分 配 情 况 如 图 : 系 统 占 用程 序 段 前 缀用 户 数 据 区用 户 堆 栈 区用 户 代 码 段 系 统 和ROM占 用 00000H100个 字 节SS 用 户 程 序 空 间FFFFFHCSDS,ES 系 统 占 用INT 20H 程 序 段 前 缀用 户 数 据 区用 户 堆 栈 区用 户 代 码 段 系 统 和ROM占 用 无 论 用 户 程 序 有 几 段 , 也 无 论 这 些 段的 排 列 顺 序 如 何 , 用 户 程 序 的 代

3、 码 前一 定 有 100个 字 节 的 程 序 段 前 缀(Program Segment Prefix, 简 称 PSP),PSP给 出 了 用 户 的 可 执 行 文 件 (.EXE)的 若 干 控 制 信 息 。 其 中 PSP的 开 始 处(第 1, 2字 节 )有 一 条 中 断 指 令 INT 20H的 代 码 , 这 条 指 令 的 功 能 是 结 束 用 户程 序 , 返 回 操 作 系 统 。 在 用 户 程 序 执行 完 以 后 , 通 过 执 行 该 条 指 令 就 可 以返 回 DOS。 如 何 使 用 户 程 序 执 行 完 后 返 回 来 执 行 这 条 指 令

4、? 系 统 占 用INT 20H 程 序 段 前 缀用 户 数 据 区用 户 堆 栈 区用 户 代 码 段 RET系 统 和ROM占 用DS,ESSSCS首 先 将 用 户 程 序 定 义 为 一 个 远 过 程 , 当可 执 行 文 件 装 入 内 存 后 , DS,ES两 个 段寄 存 器 被 CPU自 动 设 置 为 指 向 PSP的 首址 , 所 以 一 般 程 序 的 开 始 指 令 为 : PUSH DS XOR AX, AX PUSH AX即 将 DS的 内 容 和 0000H压 入 堆 栈 , 程 序结 束 时 的 最 后 一 条 语 句 为 RET, 就 把 压入 堆 栈 的

5、 PSP段 的 段 基 址 和 偏 移 量0000H弹 出 并 送 入 CS和 IP, 转 而 执 行 返回 DOS的 指 令 INT 20H。 00H00HPSPLPSPH堆 栈情 况 返 回 操 作 系 统 的 另 一 个 办 法 是 用 系 统 调 用 中 断指 令 : INT 21H, 在 用 户 程 序 结 束 时 , 用 下面 两 条 指 令 : MOV AH, 4CH INT 21H这 两 条 指 令 经 常 用 在 短 的 程 序 段 中 , 即 用 户 程序 并 不 是 一 个 完 整 的 汇 编 程 序 , 而 只 是 由 一 些指 令 组 成 的 、 没 有 堆 栈 区

6、或 数 据 区 的 程 序 段 。 第 一 节 伪 指 令 伪 指 令 : 伪 指 令 不 是 处 理 器 运 行 的 指 令 , 而 是 程序 员 给 汇 编 程 序 下 达 的 命 令 。 是 在 编 译 源 程 序 期间 由 汇 编 程 序 执 行 的 命 令 。因 为 程 序 要 分 段 放 在 内 存 内 , 编 译 程 序 必 须要 知 道 每 段 的 起 始 位 置 , 为 CPU的 段 寄 存 器 分 配地 址 ; 如 果 程 序 中 有 变 量 , 还 要 定 义 变 量 空 间 ,存 放 数 据 、 结 果 ; 知 道 源 程 序 的 开 始 、 结 束 标志 伪 指 令

7、语 句 : 在 汇 编 时 不 产 生 二 进 制 代 码 , 仅 为编 译 程 序 提 供 汇 编 时 所 需 要 的 信 息 的 语 句 。 一 、 段 定 义一 般 的 源 程 序 分 为 4个 段 : 代 码 段 Code、 数 据 段 Data、 堆栈 段 Stack、 附 加 段 Extra。各 个 段 从 段 定 义 语 句 开 始 , 到 段 结 束 语 句 ENDS结 束 。段 名 SEGMENT 定 位 类 型 组 合 类 型 类 别段 体段 名 ENDS用 户 指 定 可 任 选 定 义 段 名 必 须 是 合 法 是 标 识 符 。定 位 类 型 :内 存 可 以 看

8、成 是 一 本 书 ,将 其 分 成 页 ,段 ,字 ,和 字 节每 256个 地 址 为 一 页(PAGE), 每 页 的 起 始 地址 为 二 进 制 :* * * 0000 000016进 制 : *00H 第 一 页 (256个 地 址 )第 二 页 (256个 地 址 )00000H000FFH00100H 00200H001FFH 每 16个 地 址 为 一 段 (PARA),每 段 的 起 始 地 址 为 二 进 制 :* * * * 000016进 制 : *0H 第 一 段 (16个 地 址 )第 二 段 (16个 地 址 )*00H*0FH*10H*1FH *20H段 (节

9、 )是 默 认 的 定 位 类 型 每 2个 地 址 为 一 个 字 (WORD), 每 个 字 的 起 始 地 址为 偶 数 ;最 基 本 的 类 型 是 字 节 (BYTE), 字 节 只 包 含 一 个 地址 , 可 以 是 内 存 的 任 何 空 间 。定 位 类 型 表 示 所 定 义 的 段 存 放 在 内 存 空 间 时 , 段首 地 址 对 内 存 空 间 的 要 求 , 即 段 起 始 点 是 放 在 一页 的 起 点 上 (PAGE)还 是 一 段 的 起 点 上 (PARA)等 ,如 果 不 定 义 定 位 类 型 , 编 译 程 序 将 默 认 其 为 段 类型 , 即

10、 将 段 首 地 址 放 在 从 *0H开 始 的 内 存 空 间 BYTE: 表 示 本 段 起 始 单 元 可 以 从 任 一 地 址 开 始 ;WORD: 表 示 本 段 起 始 单 元 从 一 个 偶 地 址 开 始 ;PARA: 表 示 本 段 起 始 单 元 从 一 个 段 的 边 界 开 始 (默认 );PAGE: 表 示 本 段 起 始 单 元 从 一 个 页 的 边 界 开 始 。 组 合 类 型组 合 类 型 是 告 诉 编 译 程 序 , 所 定 义 的 段 与 其 他 段的 关 系 , 即 将 该 段 存 放 内 存 时 , 是 否 将 该 段 与 其他 段 在 物 理

11、 上 或 逻 辑 上 放 在 一 起 。常 常 一 个 汇 编 程 序 可 以 有 很 多 代 码 段 、 数 据 段 或堆 栈 段 , 这 时 , 就 要 综 合 考 虑 各 段 的 组 合 类 型 。NONE: 表 示 本 段 与 其 他 段 不 发 生 任 何 关 系 , 该段 有 自 己 的 基 地 址 , 是 默 认 的 组 合 关 系 。PUBLIC: 在 满 足 定 位 类 型 的 前 提 下 与 其 他 模 块的 同 名 段 连 接 在 一 起 , 形 成 一 个 新 的 逻 辑 段 , 共用 一 个 段 基 址 。 COMMON: 表 示 产 生 一 个 覆 盖 段 。 连

12、接 时 , 把 本段 与 其 他 也 用 COMMON说 明 的 同 名 段 置 成 相 同 的起 始 地 址 , 重 叠 在 一 起 , 共 享 相 同 的 存 储 区 , 其段 长 度 由 最 长 的 段 确 定 。STACK: 在 每 个 汇 编 程 序 中 , 只 能 必 须 有 一 个 堆 栈段 , 连 接 时 , 将 本 段 与 其 他 也 用 STACK说 明 的 同名 段 连 接 成 一 个 连 续 的 大 的 STACK段 , 编 译 程 序自 动 初 始 化 SS和 SP寄 存 器 , 使 SS的 内 容 为 该 连 续段 的 首 址 , SP指 向 堆 栈 底 部 加 1

13、的 存 储 单 元 。 MEMORY: 表 示 本 段 在 存 储 器 中 应 定 位 在 所 有 其他 段 的 最 高 地 址 。AT: 表 示 本 段 从 表 达 式 指 定 的 地 址 处 开始 装 入 , 这 样 , 在 程 序 中 用 户 就 可 以 直 接 定 义 段地 址 , 这 种 方 式 不 适 用 于 代 码 段 。类 别 : 是 用 单 引 号 括 起 来 的 字 符 串 , 连 接 时 ,LINK程 序 把 类 别 相 同 的 段 放 在 连 续 的 存 储 区 中 (可以 不 同 名 )。 类 别 名 可 以 任 意 , 但 一 般 为 CODE , STACK, D

14、ATA等 , 表 明 该 段 的 类 型 例 如 : 定 义 堆 栈 段 如 下 :ST SEGMENT PARA STACK STACK DB 100 DUP(?)ST ENDS段 名 组 合 类 型 类 别定 位 类 型 堆 栈 长 度段 结 束通 过 定 义 , 自 动 初始 化 了 SS和 SP。 SS:0000HSS:0063HSS:0064H 100字 节SP 连 接 两 个 汇 编 语 言 目 标 程 序 时 , 它 们 的 数 据 段 同名 , 组 合 类 型 为 PUBLIC, 定 位 类 型 为 PARA。 连接 后 第 一 个 目 标 程 序 的 数 据 段 的 起 始

15、物 理 地 址 是01010H, 长 度 为 17AH, 则 第 二 个 目 标 程 序 数 据 段的 起 始 物 理 地 址 为 多 少 ?01010H + 17AH= 0118AH 因 为 第 二 个 数 据 段 的 定 位 类 型 为 PARA, 故 应 从 节(段 )的 边 界 开 始 , 01190H因 为 组 合 类 型 为 PUBLIC, 所 以 共 用 一 个 段 基 址 ,在 内 存 中 顺 序 存 放 。 现 有 汇 编 目 标 程 序 A和 B, 它 们 的 数 据 段 类 别 名 相同 , 组 合 类 型 皆 为 COMMON, 若 A程 序 数 据 段 中有 字 符

16、串 ABC, B程 序 数 据 段 中 有 字 符 DEF,则 执 行 连 接 操 作 LINK A+B 后 , 产 生 目 标 程 序 的数 据 段 中 偏 移 地 址 为 0000H单 元 的 内 容 是 什 么 ?43H42H41HDS:0000H A数 据 段 46H45H44HDS:0000H B数 据 段因 为 COMMON类 型 为 覆 盖 , 所 以 组 合 后 B覆 盖 A44H 二 、 过 程 定 义过 程 的 含 义 和 子 程 序 是 一 样 的 , 一 个 码 段 中 可 以包 含 一 个 或 多 个 过 程 。码 段 名 SEGMENT过 程 名 1 PROC FA

17、R RET过 程 名 1 ENDP过 程 名 2 PROC NEAR RET过 程 名 2 ENDP 码 段 名 ENDS FAR: 该 过 程 为 远 过 程 ,调 用 该 过 程 时 为 段 间 调用 , 即 CS和 IP均 要 重 新赋 值 ;NEAR: 该 过 程 为 近 过 程 ,调 用 该 过 程 时 为 段 内 调用 , 只 赋 值 IP。 (默 认 ) 过 程 名 1 PROC FAR RET过 程 名 1 ENDP过 程 名 是 合 法 的 标 识 符 ;一 个 程 序 的 主 过 程 (起 始 指 令 所 在 的 过 程 )应 是 FAR过 程 , 因 为 该 过 程 是

18、DOS调 用 的 。 过 程 中 应 有RET指 令 , 以 便 返 回 到 调 用 处 。 过 程 可 以 嵌 套 调用 , 但 不 可 以 嵌 套 定 义 。 过 程 开 始过 程 结 束 例 : 延 时 100ms的 子 程 序 , 编 程 如 下 :DELAY PROC MOV BL, 10AGAIN: MOV CX, 2801HWAIT: LOOP WAIT DEC BL JNZ AGAIN RETDELAY ENDP 三 、 段 寻 址虽 然 定 义 了 段 , 但 由 于 段 名 是 任 意 的 , 编 译 程 序仍 然 不 知 道 哪 个 段 是 码 段 , 哪 个 段 是 数

19、 据 段 等 ,所 以 在 码 段 中 要 用 ASSUME伪 指 令 进 行 说 明 , 告诉 编 译 器 不 同 的 段 寄 存 器 分 别 对 应 哪 个 段 地 址 。ASSUME 段 寄 存 器 : 段 名 , 段 寄 存 器 : 段 名 , 当 汇 编 程 序 遇 到 一 个 段 名 时 , 就 自 动 地 引 用 给 出的 段 寄 存 器 对 段 名 加 以 汇 编 。但 汇 编 程 序 将 DS和 ES的 值 赋 为 PSP首 址 的 值 , 在程 序 中 还 要 由 MOV指 令 重 新 对 DS赋 值 。 系 统 和ROM占 用用 户 代 码 段用 户 堆 栈 区用 户 数

20、 据 区程 序 段 前 缀 系 统 占 用 00000HDS,ES 100个 字 节SS 用 户 程 序 空 间FFFFFHCS正 确 的 DS地 址MOV AX, 数 据 段 名MOV DS, AX 四 、 结 束 语 句 ENDENDS : 段 结 束ENDP: 过 程 结 束END: 整 个 汇 编 源 程 序 结 束 (不 配 对 使 用 )汇 编 程 序 在 编 译 时 遇 到 END, 便 得 知 源 程 序 已 经结 束 。 END 表 达 式表 达 式 为 可 执 行 程 序 运 行 的 起 始 位 置 , 一 般 为主 过 程 名 。 五 、 ORGORG 表 达 式指 定

21、了 在 其 后 的 指 令 或 数 据 存 放 的 偏 移 地 址 。ORG 0100HMOV AX, 0表 明 该 指 令 放 在 码 段 , 其 偏 移 地 址 为 0100H。 码 段的 首 地 址 从 CS:0000H处 开 始 。 六 、 完 整 结 构 DATA SEGMENT X DB 3 Y DB 5DATA ENDSSTACK SEGMENT STACK STACK DB 100 DUP(?)STACK ENDSCODE SEGMENT ASSUME CS:CODE, DS: DATA, SS:STACK BEGIN PROC FAR PUSH DS XOR AX, AX P

22、USH AX MOV AX, DATA MOV DS, AX RET BEGIN ENDPCODE ENDSEND BEGIN 将 PSP首 址 压 栈 ,以 便 返 回 DOS设 置 DS段 寄 存 器 内 容 源 程 序 结 束 , 第一 条 指 令 的 地 址分 配 段 寄 存 器主 过 程 名 数 据 段堆 栈 段 返 回 DOS PUSH DS XOR AX, AX PUSH AX MOV AX, DATA MOV DS, AX标 准 程 序 前 奏 , 一 般 写 在 代 码 段 开 始 第 二 节 数 据 定 义 一 、 常 量 、 变 量 及 标 识 符常 量 : 二 进 制

23、(B), 八 进 制 (Q), 十 六 进 制 (H), 十 进 制 (D)(默 认 )100 01100100B 244Q 64H AB变 量 : 代 表 存 放 在 某 些 存 储 单 元 的 数 据 , 这 些 数据 在 程 序 的 运 行 期 间 随 时 可 以 修 改 。在 程 序 中 以 变 量 名 的 形 式 出 现 。定 义 变 量 : 给 变 量 分 配 存 储 单 元 , 为 这 个 单 元 起 名字 (变 量 名 ), 可 以 同 时 将 这 些 存 储 单 元 预 置 初 值 。 每 个 变 量 都 有 三 个 属 性1) 段 属 性 (SEG) 变 量 所 在 的 存

24、 储 单 元 的 段 基 址2) 偏 移 量 属 性 (OFFSET) 变 量 所 在 的 存 储 单 元 距 段起 点 的 字 节 数3) 类 型 属 性 (TYPE) 一 个 单 位 变 量 占 用 存 储 单 元 的字 节 数 , 分 为 : DB(1个 字 节 ) DW(2个 字 节 ) DD(4个 字 节 ) DQ(8个 字 节 ) DT(10个 字 节 ) DATA SETMENT X DB 5, 4 Y DW 40H Z DD 2030HDATA ENDS 05H04H40H00H30H20H00H00HDS:0000H XYZX,Y,Z分 别 都 有 三 个 属 性 :段 基

25、址 , 偏 移 量 , 类 型 值这 三 个 属 性 都 有 固 定 的 值 。 标 识 符 : 给 指 令 或 某 一 存 储 单 元 地 址 所 起 的 名 字标 识 符 由 下 列 字 符 组 成 :字 母 : AZ, az; 数 字 : 09; 特 殊 字 符 : ? . _ $数 字 不 能 作 标 识 符 的 第 一 个 字 符 , 标 识 符 最 长 为31个 字 符 。标 识 符 后 面 跟 冒 号 时 , 表 示 标 号 , 代 表 该 行 指 令的 起 始 地 址 , 标 号 可 以 被 转 移 、 调 用 指 令 直 接 引 用标 识 符 后 面 不 带 冒 号 时 ,

26、表 示 变 量 。 标 号 : 代 码 段 中 某 一 条 指 令 的 地 址 。标 号 有 3个 属 性 :1) 段 属 性 (SEG) 该 条 指 令 所 在 段 的 段 基 址2) 偏 移 量 属 性 (OFFSET) 该 指 令 的 偏 移 地 址 (距 段 起 点 的字 节 数 )3) 距 离 属 性 表 示 该 标 号 是 作 为 段 内 还 是 段 间 被 调 用 或 转移 的 , 该 属 性 有 两 个 值 :a) NEAR(FFFFH, -1): 本 标 号 只 能 被 标 号 所 在 段 的 转移 或 调 用 指 令 所 访 问 (段 内 转 移 ), 标 号 后 有 冒

27、号 ;b) FAR (FFFEH, -2): 本 标 号 可 被 其 他 段 (不 是 标 号 所在 段 )的 转 移 或 调 用 指 令 访 问 (段 间 转 移 )。标 号 名 LABEL FAR 二 、 数 据 定 义 伪 操 作DB: 定 义 字 节 , 其 后 的 每 个 操 作 数 占 有 一 个 字 节单 元 , 连 续 存 放 ;BUFFER DB 2, 3, 5 05H03H02HBUFFERDW: 定 义 字 , 其 后 的 每 个 操 作 数 占 有 两 个 字 节 ;BUF DW 2, 3, 5 05H00H00H03H00H02HBUF DD: 定 义 双 字 , 其

28、 后 每 个 操 作 数 占 4个 字 节 ;若 仅 保 留 单 元 , 不 初 始 化 , 用 ?代 替 初 值 ;若 数 据 重 复 , 用 n DUP( )代 替 , n为 重 复 次 数 。STRING DB HELLO!ARRAY DB 100 DUP(?)6个 字 节 的 存 储 单 元 , 内 为 各 字 符 对 应 的 ASCII码 , 字 符 串 用 单 引 号 标 识保 留 100个 字 节 , 首 地 址 为 ARRAY, 不 初 始 化 ,即 100个 字 节 内 均 为 随 机 值 DATA1 DB 100 DUP(AB)初 始 化 200个 字 节 , 内 有 10

29、0个 41H, 42H使 用 汇 编 语 言 定 义 的 伪 操 作 命 令 是 :VAL DB 93 DUP (5, 2 DUP(1, 2 DUP(3), 4)则 在 VAL存 储 区 前 10个 字 节 单 元 的 数 据 是 :5, 1, 3, 3, 4, 1, 3, 3, 4, 5若 定 义 DB 1, 2, 5 DUP(0, 1, 2 DUP(3), 则 在 存 储区 前 7个 单 元 的 数 据 是 :1, 2, 0, 1, 3, 3, 0 三 、 等 值 伪 操 作名 字 EQU 表 达 式 名 字 = 表 达 式给 名 字 定 义 一 个 值 或 其 他 符 号 名 或 一 条

30、 可 执 行 语 句 , 在 汇编 时 , 凡 是 出 现 该 名 字 的 地 方 就 用 定 义 的 数 据 替 代 。用 EQU赋 值 的 名 字 不 能 重 新 赋 值 , 但 可 用 PURGE释 放 后 重 新 定 义 。TIMES EQU 50BUF DB TIMES DUP(?)等 效 于 : BUF DB 50 DUP(?)ALPHA EQU 256BETA = ALPHA-2 DATA SEGMENT A DW 3 B DW 4 L EQU B-ADATA ENDS 03H00H04H00HDS:0000H 数 据 段L为 常 量 , 不 占 空 间 , 值 为 2变 量 在

31、 数 据 段 出 现 , 一 般 为 偏 移 量 , 在 程 序 段 出现 , 为 存 储 空 间 的 内 容 。MOV AX, AMOV BX, BADD AX, BX ; AX: 3; BX: 4; AX: 7 DATA SEGMENT A DW 3, 7 B DW 14 L EQU B X DW B Y EQU B-ADATA ENDS 03H00H07H00H0EH00H04H00HDS:0000H 数 据 段; L: B; Y: 0004HMOV AX, LMOV AX, XMOV AX, AMOV AX, A+2MOV BX , Y ; AX: 000EH; AX: 0004H;

32、AX: 0003H; AX: 0007H MOV AX, B; X:0004H; BX: 0004H 第 三 节 汇 编 语 言 运 算 符 汇 编 语 言 运 算 符 : 是 编 译 程 序 在 编 译 时 计 算 的 ,与 运 算 指 令 不 同 , 指 令 是 在 程 序 运 行 时 计 算 的 。一 、 算 术 运 算 符 , , *, / , MOD , SHL , SHR MOV AX, A+B二 、 逻 辑 运 算 符AND, OR, XOR, NOT C EQU B-A AND AX, C AND OFH 三 、 关 系 运 算 符 EQ, NE, LT, GT, LE, GE

33、 less than , great than 结 果 产 生 一 个 逻 辑 值 , 真 为 0FFFFH, 假 为 0000H 206 205 choicechoiceAXMOV AX, (choice LT 20) AND 5) OR (choice GE 20) AND 6 ) 注 意 : 算 术 运 算 符 总 可 以 用 于 数 字 操 作 , 其 结 果 也 是数 字 的 。 当 应 用 于 存 储 器 操 作 数 时 , 只 有 +, -运算 符 有 意 义 ; 逻 辑 运 算 符 的 操 作 数 也 必 须 是 数 字 , 存 储 器 操作 数 不 能 进 行 逻 辑 运 算

34、 ; 关 系 运 算 符 连 接 的 两 个 操 作 数 , 必 须 都 是 数 字的 或 是 在 同 一 段 内 的 存 储 器 地 址 。 四 、 值 返 回 符1) $运 算 符$: 当 前 地 址 偏 移 量 的 值BLOCK DB HELLO!NUM EQU $-BLOCK HELLO!BLOCK $;NUM为 6 STR1 DW ABSTR2 DB 16 DUP(?)CNT EQU $-STR1MOV CX, CNTMOV AX, STR1HLT STR1STR2 BA; CX为 18; AX为 4142H $ABSTR1 DW 4142HSTR1 DB 41H, 42H DATA

35、 SEGMENT NA EQU 15 NB EQU 10 NC DB 2 DUP(4, 2 DUP(5, 2) CNT DB $-NC CWT DW $-CNT ND DW NCDATA ENDS设 数 据 段 定 义 如 下 :从 DS:0000H开 始 至 CNT单 元 之 前 存 放 的 数 据 依 次 为 :_; ND单 元 中 的 值 为 _; CWT单 元 中 的值 为 _; CNT单 元 中 的 值 为 _。4, 5, 2, 5, 2, 4, 5, 2, 5, 20000H1 0AH 04H05H02H05H02H04H05H02H05H02H0AH01H 00H00H00H 2

36、) SEG 和 OFFSETSEG: 求 标 号 或 变 量 的 段 基 址OFFSET: 求 标 号 或 变 量 的 距 段 首 址 的 偏 移 量DATA SEGMENT A DB 12 B DW 23, 25DATA ENDSMOV BX, OFFSET BMOV AX, SEG BLEA BX, B ; BX: 0001H; AX: DS值; BX: 0001H 与 MOV BX, OFFSET B DATA SEGMENT TABLE DW 10, 20, 30, 40, 50 ENTRY DW 3DATA ENDSMOV BX, OFFSET TABLEADD BX, ENTRYM

37、OV AX, BX 0AH00H14H00H1EH00H28H00H32H00H03H00H;0000H;BX: 3;AX: 1E00H BX 3) TYPE 标 号 或 符 号 的 类 型 值对 变 量 : 表 示 变 量 的 字 节 数 DB 1, DW 2, DD 4对 标 号 : 表 示 过 程 或 指 令 地 址 的 调 用 类 型 (NEAR) -1 或 (FAR) -2DATA SEGMENT A DB 12 B DW 23, 25DATA ENDSMOV AX, TYPE AMOV BX, TYPE B ;AX: 0001H;BX: 0002H 4) LENGTH 和 SIZE

38、LENGTH: 对 DUP情 况 下 , 变 量 的 项 数 或 元 素 个 数 , 在 其他 情 况 下 该 项 属 性 为 1;SIZE: 对 操 作 数 分 配 的 字 节 数 。 SIZE=LENGTH TYPE A DB 1234 B DW 5 DUP(2, 3 DUP(0) C DW AB, C, DL1: MOV AL, TYPE B MOV BL, LENGTH B MOV AH, SIZE A MOV BH, SIZE C MOV CL, TYPE L1 MOV CH, SIZE B ; AL: 2; BL: 5; AH: 1; BH: 2; CL: 0FFH; CH: 0A

39、HC DW ABE, C, D正 确 与 否 ? 对 于 下 面 的 数 据 定 义 , 各 条 MOV指 令 单 独 执 行 后 ,请 填 充 有 关 寄 存 器 的 内 容 : TABLE1 DB ? TABLE2 DW 20 DUP(?) TABLE3 DB ABCD MOV AX, TYPE TABLE1 MOV BX, TYPE TABLE2 MOV CX, LENGTH TABLE2 MOV DX, SIZE TABLE2 MOV SI, LENGTH TABLE3; AX: 1; BX: 2; CX: 20; DX: 40; SI: 1 5) HIGH 和 LOWHIGH: 对

40、操 作 数 取 高 字 节 ;LOW: 对 操 作 数 取 低 字 节 。NUM EQU 0CDEFHMOV AH, HIGH NUMMOV AL, LOW NUM ; AH: 0CDH; AL: 0EFH 五 、 属 性 运 算 符用 来 给 指 令 中 的 操 作 数 指 定 一 个 临 时 的 属 性 , 而暂 时 忽 略 操 作 数 定 义 时 的 属 性 。1) PTR 定 义 操 作 数 为 新 的 类 型新 类 型 PTR 操 作 数操 作 数 可 以 是 存 储 器 的 地 址 或 标 号 名F1 DW 1234HF2 DB 23H, 56H, 18HMOV AL, BYTE

41、PTR F1MOV AX, WORD PTR F2; AL: 34H; AX: 5623H 18H56H23H12H34HF2F1 DAT1 DB 12H, 34H DAT2 DB 56H, 78H MOV AX, WORD PTR DAT1 CMP AX, WORD PTR DAT2 JA L1 MOV BX, WORD PTR DAT2 MOV WORD PTR DAT2, AX MOV WORD PTR DAT1, BXL1: HLTDAT1单 元 的 值 是 : _ ; AX: 3412H; 7856H56H 2) THIS 指 定 新 类 型像 PTR一 样 可 用 来 建 立 一

42、个 特 殊 类 型 的 存 储 器 地 址 操 作 数 ,而 没 有 为 它 分 配 存 储 器 。 新 的 存 储 器 操 作 数 的 段 和 偏 移 量部 分 就 是 下 一 个 能 分 配 的 存 储 单 元 的 段 和 偏 移 量 。F1 EQU THIS BYTEF2 DW 4321H, 2255HMOV AL, F1MOV AX, F2THIS 类 型 名 22H55H43H21HF2 F1; AL: 21H; AX: 4321HF1和 F2具 有 相 同 的 段 基 地 址 和 偏 移 地 址 , 但 类 型 不 同 。 3) 段 超 越强 迫 当 前 指 令 的 操 作 数 按

43、 指 定 的 段 基 地 址 寻 址 。MOV AX, ES:BX4) SHORT用 于 无 条 件 转 移 指 令 JMP, 通 知 编 译 器 , 转 移 的目 标 地 址 在 -128 +127之 间 。JMP 标 号 ; 是 三 字 节 指 令JMP SHORT 标 号 ; 是 两 字 节 指 令 第 四 节 汇 编 语 言 程 序 汇 编 语 言 编 写 的 程 序 也 跟 高 级 语 言 类 似 , 程 序结 构 分 三 种 : 顺 序 、 分 支 、 循 环 ; 较 复 杂 的 程序 也 应 该 是 由 众 多 子 程 序 组 成 的 , 每 个 子 程 序是 一 个 过 程 ,

44、 在 程 序 中 被 显 式 地 调 用 。 变 量 等数 据 部 分 被 定 义 在 数 据 段 , 所 有 程 序 都 要 显 式地 定 义 堆 栈 段 。 汇 编 程 序 的 每 一 条 指 令 都 与 机器 语 言 一 一 对 应 , 因 此 , 汇 编 生 成 的 可 执 行 文件 代 码 少 , 适 合 于 实 时 控 制 , 但 由 于 语 法 成 分很 少 , 不 适 合 于 复 杂 的 算 法 、 运 算 。 汇 编 程 序主 要 的 调 试 环 境 是 DOS系 统 下 的 DEBUG程 序 。 程 序 设 计 步 骤l1.分 析 问 题l2.建 立 数 学 模 型l3.确

45、 定 算 法l4.绘 制 程 序 流 程 图l5.内 存 分 配 (指 令 或 伪 指 令 )l6.编 制 程 序l7.程 序 调 试 例 : 自 然 数 09的 平 方 表 , 存 在 内存 TABLE开 始 的 连 续 10个 单 元中 , 现 XAD单 元 存 有 任 意 一 自然 数 ( 0XALIMUL VARC ;(a+b)*c-AXMOV BH , 0MOV BL , VARD ; d-BXSUB AX, BX ;(a+b)*c-d-AXIDIV VAREMOV VARY , AX VARA 6VARB 7VARC 8VARD 9VARE 10VARY ?; AX: 09H,DX

46、:05H l可 以 有 两 种 形 式 , 如 图 所 示 , 它 们 分 别 相 当 于高 级 语 言 程 序 中 的 IF-THEN-ELSE语 句 和CASE语 句 , 它 们 适 用 于 要 根 据 不 同 条 件 做 不同 处 理 的 情 况 。 语 句 判 定 条 件语 句 CASE结 构 语 句 nIF-THEN-ELSE结 构 语 句 判 定 条 件语 句 l 实 现 方 法 : 在 产 生 分 支 之 前 , 通 常 用 比 较 、测 试 的 办 法 在 标 志 寄 存 器 中 设 置 相 应 的 标 志位 , 然 后 再 选 用 适 当 的 条 件 转 移 指 令 , 以

47、实现 不 同 情 况 的 分 支 转 移 。 语 句 判 定 条 件语 句 CASE结 构 语 句 nIF-THEN-ELSE结 构 语 句 判 定 条 件语 句 例 : 符 号 函 数 :( 128X+127)设 任 意 给 定 的 X存 放 在XX单 元 , 计 算 出 函 数 Y值 要 求 存 放 在 YY单 元 。 0,1 0,0 0,1 xxxy 当当当 开 始 X X A L - 1 A L 1 A L A L Y Y 单 元 A L 0 A L = 0YN 结 束 例 : 符 号 函 数 :DATA SEGMENTXX DB 0F0HYY DB ?DATA ENDSCODE SE

48、GMENTASSUME CS:CODE,DS:DATASTARTPROC FARPUSH DS SUB AX,AX PUSH AX MOV AX,DATAMOV DS,AX MOV AL,XXCMP AL,0JGE BIGR MOV AL,0FFHMOV YY,AL ; AL = -1RETBIGR: JE EQULMOV AL,1 ; AL =1EQUL:MOV YY,ALRETSTARTENDP CODE ENDSEND START l 实 现 方 法 : 用 地 址 表 法 。 思 路 : 将 各 分 支 程 序 的 入口 地 址 依 次 罗 列 形 成 一 个 地 址 表 , 让 BX

49、指 向 地 址 表的 首 地 址 , 从 键 盘 接 收 或 其 他 方 式 获 取 要 转 到 的 分 支号 , 再 让 BX与 分 支 号 进 行 运 算 , 使 BX指 向 对 应 分 支入 口 地 址 , 最 后 即 可 使 用 JMP WORD PTR BX 或JMP DWORD PTR BX 指 令 实 现 所 要 转 到 的 分 支 语 句 判 定 条 件语 句 CASE结 构 语 句 nIF-THEN-ELSE结 构 语 句 判 定 条 件语 句 例 : 根 据 AL(18)中 的 值 , 转 移 到 不 同 分 支 (R1R8)。解 : 1、 建 立 分 支 地 址 表DAT

50、A SEGMENTBRTAB DW R11,R12DW R21,R22DW R31,R32DW R81,R82DATA ENDS 分 支 1偏 移 地 址 R11分 支 1段 地 址 R12分 支 2偏 移 地 址 R21分 支 2段 地 址 R22分 支 3偏 移 地 址 R31分 支 3段 地 址 R32 分 支 8偏 移 地 址 R81分 支 8段 地 址 R82 解 : 2、 实 现 分 支 转 移方 法 1: LEA BX, BRTABGTB:RCR AL , 1JC GETADADD BX , 4JMP GTBGETAD: JMP DWORD PTR BX 分 支 1偏 移 地 址

51、 R11分 支 1段 地 址 R12分 支 2偏 移 地 址 R21分 支 2段 地 址 R22分 支 3偏 移 地 址 R31分 支 3段 地 址 R32 分 支 8偏 移 地 址 R81分 支 8段 地 址 R82例 : 根 据 AL(07)中 的 值 , 转 移 到 不 同 分 支 (R1R8)。 方 法 2:LEA BX, BRTABMOV AH , 0MUL 04HADD BX, AXJMP DWORD PTR BX 分 支 1偏 移 地 址 R11分 支 1段 地 址 R12分 支 2偏 移 地 址 R21分 支 2段 地 址 R22分 支 3偏 移 地 址 R31分 支 3段 地

52、 址 R32 分 支 8偏 移 地 址 R81分 支 8段 地 址 R82BX例 : 根 据 AL(07)中 的 值 , 转 移 到 不 同 分 支 (R1R8)。解 : 2、 实 现 分 支 转 移 1.设 置 循 环 的 初 始 状 态 设 置 循 环 次 数 的 计 数 值 , 以 及 循 环 体 正 常 工 作 的 初 始状 态 等2.循 环 体 由 循 环 的 工 作 部 分 及 修 改 部 分 组 成 。3.循 环 控 制 部 分 循 环 程 序 设 计 的 关 键 , 每 一 个 循 环 程 序 必 须 选 择 一 个循 环 控 制 条 件 来 控 制 循 环 的 运 行 和 结

53、 束 ,通 常 有 两 种 方法 控 制 循 环 : 用 计 数 控 制 循 环 ,用 条 件 控 制 循 环 l 先 判 断 条 件 , 然 后 执 行 循 环 体 。 DO-WHILE结 构l 先 执 行 循 环 体 , 然 后 判 断 条 件 。 DO-UNTIL结 构特 点 : 至 少 执 行 一 次 循 环 体 。赋 初 值条 件循 环 体 修 改YN 开 始 赋 初 值循 环 体 修 改条 件 ? N Y开 始 例 : 显 示 以 0结 尾 的 字 符 串 。STR DB Let us have a try !,0MOV BX,OFFSET STRAGAIN: MOV DL,BXC

54、MP DL,0JZ DONE ; 为 0结 束MOV AH,2; 调 用 DOS功 能 的 2号 功 能INT 21H ; 不 为 0, 显 示INC BX ; 指 向 下 一 个 字 符JMP AGAINDONE: 例 : 求 S=1+2+3+4+100解 1: MOV CX,100MOV AX , 0MOV BX,1AG: ADD AX, BXINC BXLOOP AG MOV SUM, AX 解 2: MOV CX,99MOV AX , 1MOV BX,2AG: ADD AX, BXINC BXLOOP AG MOV SUM, AX 例 : 从 给 定 串 中 寻 找 最 大的 值 ,并

55、 放 到 MAX单 元 .元 素 放 在 BUFFER开 始的 单 元 中 。解 : 分 析 :CX: 循 环 比 较 次 数 , 循 环 次 数 数 据 个 数 1BX: 数 据 指 针LOOP:循 环 控 制 开 始BX 元 素 表 首 地 址CX N-1BX BX+1AL=BX?AL、 BX中 的 数 交 换CX CX-1 CX=0?YN 暂 停 YN 参 考 程 序 :BUFFER DB 21,33,45,67,98,10, COUNT EQU $-BUFFERMAX DB ? MOV CX, COUNT-1 MOV BX, OFFSET BUFFER MOV AL, BX DON:

56、INC BX ;指 向 下 一 个 数 CMP AL, BX ;AL- BX JA P1 ;大 于 转 MOV AL, BX ;交 换 P1 : LOOP DON MOV MAX,AL BUFFER 213345679810COUNT 6MAX ? 例 : 求 N!分 析 :N等 于 0: N!=1 N不 等 于 0:N!=N*(N-1)*(N-2) *3*2*1 AX=NBX=N-1AX=1?AX=1 退 出AX=AX*BXBX=BX-1BX=0?Y YN N 程 序 段 :MOV AX, NCMP AX, 1JA NOZNOZ: OK: MOV YY,AX AX=NBX=N-1AX=1?A

57、X=1 退 出AX=AX*BXBX=BX-1BX=0?Y YN N 例 : 试 编 制 程 序 把 BX寄 存 器 内 的 二 进 制 数 以 十 六 进制 形 式 在 屏 幕 上 显 示 出 来 。分 析 :1、 二 进 制 到 十 六 进 制 显 示 必 须 转 换 成 ASCII码 , 即 0-9、 41H-46H( AF)2、 BX寄 存 器 为 16位 , 共 有 4组 4位 二 进 制 位 , 可 用 一个 循 环 次 数 为 4的 循 环 逐 一 显 示 。3、 取 出 四 位 二 进 制 位 可 以 用 循 环 左 移 指 令 , 再 将 高四 位 与 0FH相 与 。 MOV

58、 CH,4 MOV CL,4ROL BX,CL; BX循 环 左 移 四 位 MOV AL,BLAND AL,0FH; 取 其 低 四 位ADD AL,30H; 转 换 为 ASCII码CMP AL,3AHJL DISP ; 小 于 10, 转 换 完 毕ADD AL,7; 大 于 等 于 10, 换 到 AFDISP: MOV DL,ALMOV AH,2INT 21H ; 显 示 DEC CH ; 循 环 次 数 减 一JNZ ; 循 环 完 成 否 继 续 循 环 设 循 环 次 数开 始BX循 环 左 移 四 位低 四 位 30H是 A F? 7显 示循 环 次 数 够 ?退 出 例 :

59、设 计 一 个 100ms的 软 件 延 时 程 序。 采 用 多 重 循 环程 序 , 内 循 环 完成 10ms的 延 时 ,外 层 循 环 10次 即可 。 CODE SENGMETASSUME CS:CODESTART: MOV DL,10DELAY1: MOV CX,2800HDELAY2: LOOP DELAY2DEC DLJNZ DELAY1MOVAH,4CHINT 21HCODE ENDSEND START以 5MHz主 频 为 例 ,LOOP指 令 执 行 需18个 时 钟 周 期 。10 000 *5 /18=2800 子 程 序 :相 对 主 程 序 而 言 ,是 被 主

60、 程 序 调 用 的程 序 .把 功 能 相 对 独 立 的 程 序 段 单 独 编 写 和 调试 , 作 为 一 个 相 对 独 立 的 模 块 供 程 序 使 用 ,就 形 成 子 程 序子 程 序 调 用 示 意 图 : 主 子 子 子 1子 2主 主 主 汇 编 语 言 中 , 子 程 序 要 用 一 对 过 程 伪 指 令 PROC和ENDP声 明 , 格 式 如 下 :过 程 名 PROC NEAR/FAR ; 过 程 体过 程 名 ENDP可 选 的 参 数 指 定 过 程 的 调 用 属 性 。 没 有 指 定 过 程 属性 , 则 采 用 默 认 属 性l NEAR属 性 (

61、 段 内 近 调 用 ) 的 过 程 只 能 被 相 同 代码 段 的 其 他 程 序 调 用 l FAR属 性 ( 段 间 远 调 用 ) 的 过 程 可 以 被 相 同 或 不同 代 码 段 的 程 序 调 用 利 用 寄 存 器 传 递 参 数 主 程 序 将 参 数 保 存 到 寄 存 器 中 , 子 程 序 通 过访 问 寄 存 器 来 取 得 变 量 。 子 程 序 将 参 数 保 存 到 寄 存 器 中 , 主 程 序 通 过访 问 寄 存 器 来 取 得 变 量 。 例 : 从 键 盘 接 收 一 个 十 进 制 数 , 将 其 以 十 六 进制 的 形 式 显 示 出 来 。

62、 分 析 :1) 从 键 盘 接 收 十 进 制 数 , 键 盘 输 入 的 是 ASCII码 , 要先 转 换 成 十 六 进 制 30H-39H, 如 果 输 入 的 不 是 数 字 ,还 要 加 以 判 断 。 若 输 入 的 是 多 位 数 , 也 要 加 以 判 断 ,并 累 加 计 算 。2) 输 入 后 在 下 一 行 显 示 十 六 进 制 数 , 应 当 有 回 车 换 行3) 将 十 进 制 数 转 换 成 十 六 进 制 数 后 , 再 逐 一 转 换 成ASCII码 显 示 CODE SEGMENT ASSUME CD:CODE,DS:DATAMAIN PROC FAR

63、 START: PUSH DSMOV AX,0 PUSH AXCALL DECINCALL CRLFCALL BINTODEC RET MAIN ENDP DECIN PROC NEARMOV BX, 0NEWCHAR:MOV AH, 1;有 回 显 键 盘 输 入INT 21H ;AL=键 输 入 ASCII码SUB AL, 30HJL EXITCMP AL, 9JG EXITCBW XCHG AX,BXMOV CX,10MUL CXXCHG AX,BXADD BX, AXJMP NEWCHAREXIT: RETDECIN ENDP CRLF PROC NEAR MOV DL,0DH ; 回

64、 车 ASCII码MOV AH,2INT 21H ; 显 示 回 车MOV DL,0AH ; 换 行 ASCII码MOV AH,2INT 21H ; 显 示 换 行RET CRLF ENDP BINTODEC PROC NRARMOV CH, 4NEXT2:MOV CL,4ROL BX,CLMOV AL,BLAND AL,0FHADD AL,30CMP AL,3AHJL PRINTADD AL,7 PRINT:MOV DL,ALMOV AH,2INT 21HDEC CHJNZ NEXT2RETBINTODEC ENDP 例 : 从 键 盘 接 受 一 个 十 六 进 制 数 ( 00FFFFH

65、,正 数 ) , 转 换 为 十 进 制 数 并 在 屏 幕 上 显 示 出 来分 析 :1) 从 键 盘 接 受 十 六 进 制 数 , 用 DOS的 1号 功 能调 用 逐 一 接 收 , 每 接 收 完 一 个 再 接 收 下 一 个 时应 将 先 前 的 左 移 四 位 。2) 接 收 完 毕 后 最 大 为 65536, 显 示 时 可 以 将 此 数除 以 10000, 1000, 100, 10, 1将 商 逐 一 显 示即 可 。 CODE SEGMENT ASSUME CD:CODE,DS:DATAMAIN PROC FAR START: PUSH DSMOV AX,0 PU

66、SH AXCALL HEXIBINCALL CRLFCALL BINIDECRET MAIN ENDP HEXIBIN PROC NEARMOV BX,0NEW:MOV AH,1INT 21HSUB AL,30HJL EXIT ;CMP AL,10DJL ADD_TOSUB AL,07HCMP AL,0AHJL EXIT CMP AL,10HJGE EXITADD_TO:MOV CL,4SHL BX,CLMOV AH,0ADD BX,AXJMP NEWEXIT:RETHEXIBIN ENDP CRLF PROC NEAR MOVDL,0DH ; 回 车 ASCII码MOVAH,2INT 21H ; 显 示 回 车MOVDL,0AH ; 换 行 ASCII码MOVAH,2INT 21H ; 显 示 换 行RET CRLF ENDP BINIDEC PROC NEARMOV CX,10000DCALL DEC_DIVMOV CX,1000DCALL DEC_DIVMOV CX,100DCALL DEC_DIVMOV CX,10DCALL DEC_DIVMOV CX,1DCALL DEC_D

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