资源描述
8086指 令 系 统 系 统 第 4章 8086指 令 系 统 系 统 本 章 重 点 : 掌 握 8086/8088 CPU的 寻 址 方 式 、 指 令 系 统中 指 令 的 分 类 及 其 常 用 指 令 的 格 式 和 功 能 。本 章 难 点 : 灵 活 运 用 指 令 解 决 问 题 及 其 快 速 查 阅 指 令 表 。 概 述指 令 是 微 处 理 器 执 行 某 种 操 作 的 命 令 , 微 处 理 器 全 部 指 令的 集 合 称 为 指 令 系 统 ( 指 令 集 ) 。指 令 有 两 种 书 写 格 式 : 机 器 指 令 和 符 号 指 令 。F机 器 指 令 指 令 的 二 进 制 数 描 述硬 件 只 能 识 别 机 器 指 令 , 用 机 器 指 令 书 写 的 程 序 可 以 直 接 运行F符 号 指 令 用 规 定 的 助 记 符 和 规 定 的 书 写 格 式 书写 的 指 令 与 机 器 指 令 一 一 对 应 , 需 要 翻 译 成 机 器 指 令 才 能 运 行10110000 00000001 MOV AL, 11. 指 令 2. 程 序程 序 是 为 解 决 某 一 问 题 而 编 写 在 一 起 的 指 令 序 列机 器 语 言 程 序 : 由 机 器 指 令 书 写 的 程 序汇 编 语 言 程 序 : 由 符 号 指 令 书 写 的 程 序高 级 语 言 程 序 : 由 高 级 语 言 书 写 的 程 序 , 高 级 语 言 的 基 础是 语 句 , 而 不 是 处 理 器 的 指 令 系 统汇 编 语 言 程 序 和 高 级 语 言 程 序 必 须 先 翻 译 成 机 器 语 言 程 序 才 能 执行 。 这 一 翻 译 过 程 对 汇 编 语 言 程 序 叫 做 汇 编 ( assemble) , 对 高级 语 言 程 序 叫 做 编 译 ( compilation) 或 解 释 ( interpretation) 符 号 指 令 的 书 写 格 式 为 :标 号 : 操 作 码 助 记 符 操 作 数 助 记 符 ;注 释 标 号 代 表 该 指 令 在 存 储 器 中 的 地 址 , 为 分 支 、 循 环 提供 转 移 目 标 。 可 选操 作 码 助 记 符 如 ADD, MOV等 , 指 出 指 令 要 实 现 的 功能操 作 数 是 指 令 操 作 的 对 象 。 当 一 条 指 令 需 要 一 个 以 上的 操 作 数 时 , 操 作 数 间 用 逗 号 分 隔 , 逗 号 前 为 目 标 操作 数 , 逗 号 后 为 源 操 作 数 。注 释 可 增 强 可 读 性 。 可 选 3. X86系 列 微 处 理 器 指 令 系 统 的 发 展基 本 指 令 集8086/8088 116条 指 令 基 本 指 令 集增 强 指 令 集系 统 控 制 指 令 集保 护 模 式 实 模 式Pentium306条 指 令 4.1 寻 址 方 式寻 址 方 式 : 寻 址 方 式 是 指 在 指 令 中 用 于 说 明 操 作 数 所 在 地址 的 方 法 。 8086指 令 系 统 把 寻 址 方 式 分 为 与 数 据 有 关 的 寻址 方 式 和 与 地 址 有 关 的 寻 址 方 式 两 类 。 操 作 数 有 三 种 可 能 的 存 放 方 式 :直 接 包 含 在 指 令 中 立 即 数 立 即 寻 址包 含 在 某 个 寄 存 器 中 寄 存 器 操 作 数 寄 存 器 寻 址在 内 存 中 存 储 器 操 作 数 ( 内 存 操 作 数 ) 存 储 器 寻 址 (1) 立 即 寻 址 方 式 定 义 : 有 一 部 分 指 令 所 用 的 8位 或 16位 操 作 数就 直 接 放 在 指 令 中 , 紧 跟 在 操 作 码 的 后 面 ,与 操 作 码 一 同 放 在 代 码 段 区 域 中 。用 途 : 主 要 用 来 给 寄 存 器 或 储 存 单 元 赋 值 。MOV AL, 80H4.1 寻 址 方 式4.1.1 与 数 据 有 关 的 寻 址 方 式 (2) 寄 存 器 寻 址 方 式定 义 : 指 令 中 操 作 数 由 寄 存 器 提 供 的 寻 址 方式 。 MOV DL, AL INC CX 4.1 寻 址 方 式4.1.1 与 数 据 有 关 的 寻 址 方 式 (3) 直 接 寻 址 方 式定 义 : 有 效 地 址 EA在 指 令 的 操 作 码 后 面 直 接给 出 的 寻 址 方 式 。说 明 : 默 认 段 寄 存 器 DS, 若 操 作 数 在 其 他 段 ,应 在 指 令 中 使 用 段 跨 越 前 缀 。 即 : EA=段 寄 存 器 : 位 移 量 ; PA=(段 寄 存 器 )左 移 4位 位 移 量 MOV AX, 1000H4.1 寻 址 方 式4.1.1 与 数 据 有 关 的 寻 址 方 式 指 令 中 的 操 作 数 部 分 直 接 给 出 操 作 数 的 有 效 地 址 EA,操 作 数 可 以 是 16位 或 32位 整 数 , 操 作 数 默 认 在 DS段 中MOV AX, 3000H 低 地 址高 地 址CS段操 作 码00H30H34H12H34H12HAX DS段5000053000DS 50000300053000+ 如 果 操 作 数 在 DS以 外 的 其 他 段 ( CS,SS,ES ) 中 , 指令 中 必 须 包 含 段 超 越 前 缀MOV AX, ES:3000H 低 地 址高 地 址CS段操 作 码00H30H34H12H34H12HAX FS段2000023000ES 20000300023000+ (4) 寄 存 器 间 接 寻 址 方 式定 义 : EA存 放 在 由 指 令 指 明 的 寄 存 器 中 ; 只 有 通 过 访问 寄 存 器 才 间 接 得 到 EA。 ( BX) ( SI) 操 作 数 存 放 在 由 DS指 示 的 数 据 段 。 ( DI) PA=(DS)左 移 4位 +(BX)/( SI) /( DI) ( BP) 操 作 数 存 放 在 由 SS指 示 的 堆 栈 段 中 。 PA=(SS)左 移 4位 +(BP) 如 果 DS=2000H, SI=1000H, 21000H=40H, 21001=32H。 MOV AX, SI指 令 执 行 后 结 果 : AX=3240H。 4.1.1 与 数 据 有 关 的 寻 址 方 式 低 地 址高 地 址CS段操 作 码34H12H34H12HAX SS段7000073000SS 70000300073000+MOV AX, BPBP (5) 寄 存 器 相 对 寻 址 方 式定 义 : 以 寄 存 器 (BX、 SI、 DI和 BP)内 容 为 基 地址 加 上 位 移 量 (8位 或 16位 )得 到 有 效 地 址 EA的寻 址 方 式 。 4.1 寻 址 方 式4.1.1 与 数 据 有 关 的 寻 址 方 式 低 地 址高 地 址CS段操 作 码00H15H34H12H34H12HDX DS段7000073500BX 150073500+MOV DX, BX+1500DS 700002000 若 选 择 BX、 SI、 DI寄 存 器 相 对 寻 址 , 存放 操 作 数 的 段 寄 存 器 默 认 为 DS, 若 选 择 BP寄存 器 相 对 寻 址 , 则 对 应 的 段 寄 存 器 默 认 为 SS。如 果 操 作 数 不 在 默 认 段 , 则 要 用 前 缀 指 出 相应 的 段 寄 存 器 名 。 即 操 作 数 的 有 效 地 址 为 : 位位移量16位位移量8DIISBPBXEA MOV AX, SI+10H4.1.1 与 数 据 有 关 的 寻 址 方 式 (6) 基 址 变 址 寻 址 方 式定 义 : 由 基 址 寄 存 器 (BX, BP)的 内 容 加 上 变址 寄 存 器 (SI, DI)的 内 容 得 到 操 作 数 有 效 地址 EA的 寻 址 方 式 。操 作 数 的 有 效 地 址 为 : DI SIBP BXEAMOV AX, BX+DI设 DS=1000H, BX=5000H, DI=2000H, 在 执 行 时 ,有 效 地 址 为 7000H, 指 令 执 行 结 果 为 17000H和17001H两 单 元 的 内 容 取 到 AX中 。 4.1.1 与 数 据 有 关 的 寻 址 方 式 (7) 基 址 变 址 相 对 寻 址 方 式 由 基 址 寄 存 器 (BX, BP)的 内 容 加 上 变 址寄 存 器 (SI, DI)的 内 容 , 再 加 上 位 移 量 (8位或 16位 )得 到 操 作 数 有 效 地 址 EA的 方 式 称 为 基址 变 址 相 对 寻 址 方 式 。操 作 数 的 有 效 地 址 为 : MOV AX, BX+SI+4500H 若 DS=3000H, BX=2000H, SI=1000H, 37500H=56H, 37501H=12H, 指 令 执 行 后 AX=1256H。 位 位 移 量位 位 移 量168DISIBPBXEA4.1.1 与 数 据 有 关 的 寻 址 方 式 单 元 (0,0)单 元 (0,1)单 元 (0,n)( 位 移 量 )二 维 数 组 的 基 址 加 变 址 寻 址 方 式基 址 寄 存 器+MOV AX, BX+SI+100H 单 元 (1,0)单 元 (1,n)单 元 (1,1)单 元 (m,n)变 址 寄 存 器+ 在 8086指 令 系 统 中 , 有 一 些 对 指 令 的 地 址进 行 寻 址 的 指 令 , 这 种 寻 址 方 式 叫 与 地 址 有 关的 寻 址 方 式 。(1) 段 内 直 接 寻 址 用 段 内 直 接 寻 址 方 式 时 , 指 令 中 给 出 一 个相 对 位 移 量 , 有 效 转 移 地 址 为 IP的 当 前 内 容 再加 上 一 个 8位 或 16位 的 位 移 量 。 段 内 直 接 转 移寻 址 也 称 为 相 对 寻 址 。4.1.2 与 地 址 有 关 的 寻 址 方 式 (2) 段 内 间 接 寻 址 用 段 内 间 接 寻 址 方 式 时 , 有 效 地 址 总 是 在寄 存 器 中 或 者 在 内 存 单 元 中 , 段 内 间 接 寻 址 方式 可 适 用 于 于 无 条 件 转 移 指 令 和 调 用 指 令 。(3) 段 间 直 接 寻 址 用 段 间 直 接 寻 址 方 式 进 行 寻 址 时 , 指 令 中要 给 出 转 移 地 址 的 段 值 和 偏 移 量 。 产 生 转 移 时 ,将 段 值 送 入 CS中 , 将 偏 移 量 送 入 IP中 。 用 这 种寻 址 方 式 , 可 以 提 供 一 种 使 程 序 从 一 个 代 码 段转 移 到 另 一 个 代 码 段 的 方 法 。 4.1.2 与 地 址 有 关 的 寻 址 方 式 (4) 段 间 间 接 寻 址 在 段 间 间 接 寻 址 方 式 下 产 生 转 移 时 , IP和CS的 内 容 用 内 存 中 2个 连 续 的 字 来 替 换 。 而 对这 2个 内 存 字 , 可 以 通 过 对 数 据 的 各 种 寻 址 方式 来 访 问 , 不 过 立 即 数 寻 址 方 式 和 寄 存 器 寻 址方 式 除 外 。 段 间 转 移 和 段 内 间 接 转 移 必 须 是 无条 件 转 移 指 令 和 调 用 指 令 。 换 句 话 说 , 条 件 转移 指 令 只 能 用 段 内 直 接 寻 址 方 式 , 而 且 转 移 范围 只 能 是 指 令 所 在 位 置 前 后 的 -128 +127个 单元 。 4.1.2 与 地 址 有 关 的 寻 址 方 式 总 结 :寻 址 方 式 既 针 对 源 操 作 数 , 也 针 对 目 标 操 作 数实 模 式 下 段 的 最 大 长 度 为 64KB, 因 此 必 须 保 证 有效 地 址 不 超 过 FFFFH立 即 寄 存 器 寄 存 器 间 接 寄 存 器 相 对 直 接 基 址 变 址 相 对 基 址 变 址 8086 8088的 指 令 系 统 中 包 含 133条 基 本指 令 , 可 以 分 为 以 下 六 个 功 能 组 。 (1)传 送 指 令 ; (2)逻 辑 运 算 和 移 位 指 令 ; (3)控 制 转 移 指 令 ; (4)算 术 运 算 指 令 ; (5)串 操 作 指 令 ; (6)处 理 器 控 制 指 令 。4.2 8086指 令 系 统 8086数 据 传 送 指 令 有 如 下 四 类 : (1) 通 用 传 送 指 令 ; (2) 累 加 器 专 用 传 送 指 令 ; (3) 地 址 传 送 指 令 ; (4) 标 志 传 送 指 令 。4.2 8086指 令 系 统 4.2.1 传 送 指 令 1 通 用 传 送 指 令 ( General Purpose Transfer) 通 用 传 送 指 令 中 包 括 MOV、 XCHG、 堆 栈 和地 址 传 送 指 令 。(1) 最 基 本 的 传 送 指 令格 式 : MOV DST, SRC功 能 : 把 一 个 字 节 或 字 的 源 操 作 数 送 到 目 标 操 作 数 所 在 的 单 元 。例 : MOV AL, BL ; BL中 的 8位 数 据 送 AL 4.2.1 传 送 指 令 MOV MEM, REG MOV REG, MEM MOV REG1, REG2 MOV REG, DATA MOV MEM, DATA MOV SREG, REG MOV SREG, MEM MOV REG, SREG MOV MEM, SREG具 体 指 令 可 以 字 型 , 也 可 以 字 节型 , 但 是 必 须 匹 配 只 能 是 字 型 操 作MOV AX , 100MOV AX , 100H的 区 别 ? l操 作 数 即 可 以 是 字 节 型 , 也 可 以 是 字 型 ,但 两 个 类 型 必 须 相 同 。l两 个 操 作 数 不 能 都 是 存 储 器 操 作 数l代 码 段 寄 存 器 不 能 是 目 标 操 作 数l段 寄 存 器 不 能 直 接 用 立 即 数 赋 值l两 个 操 作 数 必 须 有 一 个 能 确 定 类 型l所 有 MOV指 令 不 影 响 标 志 寄 存 器注 意 : (2) 堆 栈 操 作 指 令 堆 栈 操 作 指 令 分 为 : 入 栈 指 令 PUSH和 出 栈 指 令 POP。格 式 : PUSH SRC功 能 : 堆 栈 指 针 SP减 2后 , 把 一 个 字 的 源 操 作 数 传 送 到 目 的 操 作 数 所 在 的 单 元 。格 式 : POP DST功 能 : 把 SP指 出 的 栈 顶 中 的 一 个 字 传 送 到 目 标 操 作 数 所 在 的 单 元 , 然 后 加 2。说 明 : 堆 栈 是 按 “ 先 进 后 出 ” 原 则 工 作 的 一 段 存 储 器 区 域 。 例 : PUSH AX ; 将 AX的 内 容 推 入 堆 栈 PUSH DS ; 将 DS的 内 容 推 入 堆 栈 PUSH BX ; 将 栈 顶 两 单 元 弹 出 送 BX 4.2.1 传 送 指 令 注 释 所 有 堆 栈 操 作 都 是 16位 的 操 作 除 CS外 , 段 寄 存 器 都 可 以 作 为 POP的 操作 数 栈 操 作 不 允 许 立 即 数 不 影 响 标 志 寄 存 器 (3) 交 换 指 令格 式 : XCHG DST, SRC功 能 : 使 源 操 作 数 与 目 的 操 作 数 相 互 交 换 。说 明 : 交 换 指 令 XCHG可 以 实 现 字 节 交 换 , 也 可 以 实 现 字 交 换 。例 : XCHG AL, BL XCHG 2530, CX4.2.1 传 送 指 令 注 释 可 以 字 节 , 也 可 以 字 操 作 , 但 是 类 型 要一 致 不 能 出 现 段 寄 存 器 不 能 两 个 存 储 器 操 作 数 不 能 有 立 即 数 不 影 响 标 志 寄 存 器 2 累 加 器 专 用 传 送 指 令 累 加 器 专 用 传 送 指 令 主 要 有 输 入 指 令 IN、输 出 指 令 OUT和 换 码 指 令 XLAT。(1) 输 入 输 出 指 令格 式 : IN AL,PORT功 能 : 把 来 自 端 口 PORT的 一 个 字 节 送 入 AL寄 存 器 中4.2.1 传 送 指 令 2 累 加 器 专 用 传 送 指 令 输 入 输 出 指 令格 式 : IN AX,PORT功 能 : 把 来 自 PORT和 PORT +1两 个 端 口 的 数 据 构 成 一 个 字 送 入 AX寄 存 器 中格 式 : OUT PORT,AL功 能 : 把 AL寄 存 器 中 的 一 个 字 节 送 入 端 口 PORT格 式 : OUT PORT,AX功 能 : 把 AX寄 存 器 中 的 一 个 字 送 入 PORT和 PORT+1 两 个 端 口 4.2.1 传 送 指 令 注 释 可 以 8位 也 可 以 16位 , 8位 时 AL, 16位 时AX 若 端 口 地 址 小 于 256, 可 以 直 接 在 指 令 中给 出 , 否 则 必 须 由 DX提 供 端 口 地 址 所 有 输 入 或 输 出 必 须 借 助 累 加 器 AL或AX 传 输 , 其 他 寄 存 器 不 行 (2) 换 码 指 令 (Translate) 格 式 : XLAT OPRD 功 能 : 设 BX指 向 一 张 256个 字 节 的 表 的 起点 , AL为 表 的 索 引 值 , 本 指 令 执 行 后AL中 即 为 查 表 所 得 到 的 信 息 , XLAT经常 用 来 把 一 种 代 码 翻 译 成 另 一 个 代 码 。 4.2.1 传 送 指 令 3 地 址 传 送 指 令 8086指 令 系 统 中 , 有 3条 专 用 于 传 送 地 址 的指 令 : LEA、 LDS和 LES。(1) 取 有 效 地 址 指 令 格 式 : LEA REG16, MEM 功 能 : 将 源 操 作 数 的 有 效 地 址 送 到 指 定 寄 存器 中 。4.2.1 传 送 指 令 (2) 将 地 址 指 针 装 入 DS和 另 一 个 寄 存 器 的 指 令格 式 : LDS REG16, MEM功 能 : 把 源 操 作 数 SRC的 前 16位 送 入 目 标 操 作 数 REG, 后 16位 送 入 DS寄 存 器 中 。(3) 将 地 址 指 针 装 入 ES和 另 一 个 寄 存 器 的 指 令 LES REG16, MEM LES指 令 和 LDS指 令 的 格 式 及 使 用 方 法 是类 似 的 , 只 是 LES是 将 一 个 地 址 指 针 装 入 ES和另 一 个 寄 存 器 。 4 标 志 传 送 指 令(1) 读 取 标 志 指 令 ( Load AH with Flags)格 式 : LAHF功 能 : 将 标 志 位 寄 存 器 中 的 低 8位 传 送 到 AH中说 明 : 将 SF、 ZF、 AF、 PF和 CF传 送 到 AH寄 存 器的 相 应 位 , 即 D7、 D6、 D4、 D2和 D0位 , 执 行LAHF指 令 后 , AH寄 存 器 的 D5、 D3、 D1位 没 有意 义 , 如 图 所 示 。 OF DF IF TF SF ZF AF PF CF D7 D6 D4 D2 D0FLAG AH 4.2.1 传 送 指 令 (2) 设 置 标 志 指 令 ( Store AH into Flags)格 式 : SAHF功 能 : 将 AH寄 存 器 的 相 应 位 传 送 到 标 志 寄 存 器 低8位 。 (3) 对 标 志 寄 存 器 的 推 入 堆 栈 指 令格 式 : PUSHF功 能 : 将 标 志 寄 存 器 的 值 推 入 堆 栈 顶 部 , 同 时 ,栈 指 针 SP的 值 减 2, 此 指 令 在 执 行 时 标 志 寄 存器 的 值 不 变 。4.2.1 传 送 指 令 (4)对 标 志 寄 存 器 的 弹 出 堆 栈 指 令 格 式 : POPF 功 能 : 在 执 行 时 从 堆 栈 中 弹 出 一 个 字 送 到 标 志寄 存 器 中 , 同 时 堆 栈 指 针 SP的 值 加 2。 PUSHF和 POPF指 令 一 般 用 在 子 程 序 和 中 断 处理 程 序 的 首 尾 , 起 保 存 主 程 序 标 志 和 恢 复 主程 序 标 志 的 作 用 。 4.2.1 传 送 指 令 总 结 所 有 传 输 类 指 令 , 除 POPF和 SAHF外 ,均 不 影 响 标 志 寄 存 器 所 有 传 输 类 指 令 不 允 许 两 个 操 作 数 均 为存 储 器 操 作 数 ( 堆 栈 指 令 除 外 ) 要 注 意 段 寄 存 器 的 搭 配 使 用 注 意 数 据 类 型 默 认 的 段 寄 存 器 搭 配操 作 段 寄 存 器 段 内 地 址 段 跨 越 示 例取 指 令 CS IP 无源 串 DS SI CS,ES,SS MOVS DI,CS:SI目 标 串 ES DI 无 MOVSW堆 栈 SS SP 无 POP AX通 用 数 据 操 作无 BP参 与 DS 各 种 有 效 地 址 CS,ES,SS MOV AL, 2000H有 BP参 与 SS 各 种 有 效 地 址 CS,ES,DS MOV AL, ES:BP 已 知 (BX)=2000H, (DI)=3000H,(SS)=4000H, (DS)=6000H, (SS)=5000H,66000H单 元 的 内 容 为 28H, 则 指 令 MOV AL, BX+DI+1000H的 执 行 结 果 是_。 指 令 “ MOV AX,BX”源 操 作 数 的 寻 址 方式 为 _。 8086的 I/O指 令 有 _和_两 种 寻 址 方 式 。 设 当 前 的 (SP)=0100H, 执 行 PUSH AX指令 后 , (SP)=_H 在 寻 址 方 式 中 , 可 作 基 址 寄 存 器 的 有_、 _。 若 (DS)=2000H, (ES)=2100H,(CS)=1500H, (SI)=00A0H, (BX)=0100H, (BP)=0010H, 数 据 量 COUNT的 偏 移 地 址为 0050H, 则 执 行 指 令 LEA AX, BXSI 之 后 , (AX)=_H, 源 操 作 数 是_寻 址 方 式 。 指 令 LEA DX,BUFFER 的 功 能 是 将_传 送 给 DX。 累 加 器 专 用 传 送 指 令 IN间 接 访 问 I/O端 口 ,端 口 号 地 址 范 围 为 _。 针 对 源 操 作 数 按 下 列 寻 址 方 式 各 举 出 一条 指 令 (1) 直 接 寻 址 方 式 指 令 : (2) 寄 存 器 间 接 寻 址 方 式 指 令 : (3) 寄 存 器 相 对 寻 址 方 式 指 令 : (4) 基 址 加 变 址 寻 址 方 式 指 令 : (5) 寄 存 器 方 式 指 令 : IBM-PC有 哪 些 寄 存 器 可 用 来 指 示 存 储 器偏 移 地 址 ? MOV DS, 1000H LEA BX,DATA ; 变 量 名 ( ) 执 行 下 列 指 令 可 以 将 其 00H送 到 端 口 地 址 为2F8H的 外 设 上 : ( ) MOV AL, 00H MOV DX, 2F8H OUT DX, AL MOV WORD PTR BX, 1000H ( ) IN AL, N ; ( N255) ( ) MOV BXDI, 10 ( ) MOV DS, AX ( ) MOV CS, AX ( ) 执 行 下 列 指 令 可 以 将 00H送 到 端 口 地 址 为 1A0H的 外 设上 。 MOV AL, 00H MOV 1A0H , AL ( ) MOV BX, 1000 ( ) MOV ES,3F00H ( ) PUSH AL ( ) IN AL,DX ( ) MOV BX,SI ( ) XCHG CS, AX ( ) XCHG BX, IP ( ) PUSH CS ( ) PUSH SS ( ) POP ES ( ) IN BX, DX ( ) 算 术 运 算 指 令 共 有 以 下 五 类 : 加 法 运 算 指 令 、减 法 运 算 指 令 、 乘 法 运 算 指 令 、 除 法 运 算指 令 、 转 换 指 令 。1 加 法 指 令 (1) 不 带 进 位 位 的 加 法 指 令格 式 : ADD DST, SRC功 能 : 执 行 源 操 作 数 SRC和 目 的 操 作 数 DST的相 加 操 作 , 结 果 放 在 目 的 操 作 数 的 中 。4.2 8086指 令 系 统 4.2.2 算 术 运 算 指 令 (2) 带 进 位 位 的 加 法 指 令格 式 : ADC DST, SRC功 能 : ADC与 ADD类 似 , 不 同 的 是 将 进 位 标 志CF 的 值 加 在 和 中 。 ADD AL, 50H ADC AX, SI (3) 增 量 指 令格 式 : INC SRC功 能 : 将 源 操 作 数 的 内 容 加 1, 再 送 回 该 源 操 作 数 。4.2.2 算 术 运 算 指 令 2 减 法 指 令 (1) 不 考 虑 借 位 的 减 法 指 令格 式 : SUB DST, SRC功 能 : 将 目 的 操 作 数 减 去 源 操 作 数 , 结 果 放在 目 的 操 作 数 中 , 主 要 完 成 2个 字 节 或 2个字 的 相 减 。(2) 考 虑 借 位 的 减 法 指 令格 式 : SBB DST, SRC功 能 : 目 的 操 作 数 减 去 源 操 作 数 的 同 时 , 还要 减 去 CF的 值 。 SBB AX, 2030H 4.2.2 算 术 运 算 指 令 (3) 减 量 指 令格 式 : DEC DST功 能 : 使 目 的 操 作 数 减 1, 再 送 回 到 目 的 操 作数 中 。(4) 求 补 指 令格 式 : NEG DST功 能 : 对 目 的 操 作 数 求 补 码 , 结 果 送 回 目 的操 作 数 中 。 4.2.2 算 术 运 算 指 令 (5) 比 较 指 令格 式 : CMP DST, SRC功 能 : 执 行 两 个 数 的 相 减 操 作 , 但 不 送 回 相 减的 结 果 , 只 是 使 结 果 影 响 标 志 位 AF、 CF、 OF、PF、 SF和 ZF。 对 于 有 符 号 数 的 比 较 , 要 根 据 OF和 SF两 者的 关 系 来 判 断 结 果 。 OF和 SF的 值 相 同 , 则说 明 被 减 数 比 减 数 大 , 反 之 , 被 减 数 比 减 数小 。4.2.2 算 术 运 算 指 令 3 乘 法 指 令 (1) 无 符 号 数 的 乘 法 指 令格 式 : MUL SRC功 能 : 将 AL( 8位 ) 或 AX( 16位 ) 中 的 数 据 与 源 操 作 数 相 乘 , 结 果 放 在 AX或 DX与 AX两 寄 存 器 中 。 MUL BL ; AL中 的 8位 数 和 BL中 的 8位 数 相 乘 , 结 果 在 AX中 (2) 有 符 号 数 的 乘 法 指 令格 式 : IMUL SRC功 能 : 功 能 和 形 式 上 与 MUL很 类 似 , 只 是 要 求 两 个 乘 数 必 须 均 为 有 符 号 数 。 IMUL BX ; AX和 BX中 的 两 个 16位 有 符 号 数 相 乘 , 结 果 在 DX和 AX中4.2.2 算 术 运 算 指 令 4 除 法 指 令(1)符 号 数 的 除 法 指 令格 式 : DIV SRC功 能 : 把 AX( 或 DX, AX) 中 的 被 除 数 除 以 8位 ( 或 16位 ) 源 操 作 数 , 商 数 放 在 AL(或 AX), 余 数 放 在 AH(或 DX)中 。 DIV CL ; AX中 的 数 据 除 以 CL中 的 数 据 , 商 在 AL中 , 余 数 在 AH中 4.2.2 算 术 运 算 指 令 (2) 有 符 号 数 的 除 法 指 令格 式 : IDIV SRC功 能 : 与 DIV相 似 , 不 同 的 是 将 除 数 , 被 除 数 ,商 和 余 数 都 看 作 是 带 符 号 数 。 IDIV BX; 将 DX和 AX中 的 32位 数 除 以 BX中 的16位 数 , 运 算 后 , 商 在 AX中 , 余 数 在 DX中 除 法 运 算 时 , 要 求 用 16位 数 除 以 8位 数 , 或者 用 32位 数 除 以 16位 数 , 当 被 除 数 只 有 8位 时 ,必 须 将 此 8位 数 据 放 在 AL中 , 并 对 高 8位 AH进 行 扩展 。 同 样 , 当 被 除 数 只 有 16位 , 而 除 数 也 为 16位时 , 必 须 将 16位 被 除 数 放 在 AX中 , 并 对 高 16位 DX进 行 扩 展 。4.2.2 算 术 运 算 指 令 (3) 将 字 节 扩 展 成 字 的 指 令格 式 : CBW 功 能 : 将 AL寄 存 器 中 的 符 号 位 扩 展 到 AH中 。 即 当AL 80H时 , 执 行 CBW后 , AH=0; 当 AL 80H时 ,执 行 CBW后 , AH=FFH。(4) 将 字 扩 展 成 双 字 的 指 令格 式 : CWD功 能 : 用 CWD指 令 将 AX中 的 被 除 数 扩 展 成 双 字 。 4.2.2 算 术 运 算 指 令 5 BCD码 运 算 指 令 (1) BCD码 加 法 十 进 制 调 整 指 令 非 组 合 BCD码 的 加 法 调 整 指 令 。格 式 : AAA功 能 : 对 两 个 非 组 合 的 BCD码 相 加 结 果 进 行 调 整 ,产 生 一 个 非 组 合 的 BCD码 。 组 合 BCD码 的 加 法 调 整 指 令 。格 式 : DAA功 能 : 对 两 个 组 合 的 BCD码 相 加 结 果 进 行 调 整 ,产 生 一 个 组 合 的 BCD码 。4.2.2 算 术 运 算 指 令 (2) BCD码 减 法 十 进 制 调 整 指 令 非 组 合 BCD码 的 减 法 调 整 指 令格 式 : AAS功 能 : 对 两 个 非 组 合 的 BCD码 的 相 减 结 果 进 行 调整 。 组 合 BCD码 的 减 法 调 整 指 令 。格 式 : DAS功 能 : 对 两 个 组 合 的 BCD码 数 据 的 相 减 结 果 进 行调 整 , 得 到 一 个 组 合 的 BCD码 的 差 。 4.2.2 算 术 运 算 指 令 (3) 非 组 合 BCD码 乘 法 调 整 指 令格 式 : AAM功 能 : 用 于 将 非 组 合 BCD码 乘 法 的 结 果 (在 AL中 )转 换 成 两 个 非 组 合 型 BCD码 (AH和 AL中 )。 (4) 非 组 合 BCD码 除 法 调 整 指 令格 式 : AAD功 能 : 常 用 于 DIV指 令 之 前 , 将 AX中 的 两 位 非 组合 BCD码 变 为 二 进 制 数 。 即 : 将 (AH) 10+(AL)送 到 AL中 , 0送 到 AH中 。4.2.2 算 术 运 算 指 令 作 业1. 将 物 理 地 址 为 1F784H字 单 元 的内 容 , 送 到 物 理 地 址 为 89764H单 元2. 不 用 加 法 指 令 , 计 算4567H+6487H的 值 , 送 到 DX寄存 器 3. 如 BUFFER为 数 据 段 中 0032单 元 的 符号 地 址 其 中 存 放 的 内 容 为 2345H,试 问以 下 两 条 指 令 有 什 么 区 别 ?指 令 执 行 完成 后 AX寄 存 器 的 内 容 是 什 么 ? (1)MOV AX,BUFFER (2)LEA AX,BUFFER 一 个 32位 数 存 放 在 DX, AX中 , 试 编写 一 段 程 序 , 对 这 个 32位 数 求 补 , 结 果 仍然 存 放 在 DX, AX中 。 内 存 中 有 8位 无 符 号 变 量 X, Y, Z和 16位 变 量 W, 编 程 计 算 W=( ( X+Y) *Z/100+45) *Y 逻 辑 运 算 和 移 位 指 令 包 括 逻 辑 运 算 、 移 位 和循 环 移 位 指 令 。 1 逻 辑 运 算 指 令 “ 与 ” 操 作 指 令格 式 : AND DST, SRC “ 或 ” 操 作 指 令格 式 : OR DST, SRC “ 异 或 ” 操 作 指 令格 式 : XOR DST, SRC 测 试 指 令格 式 : TEST DST, SRC 求 反 指 令格 式 : NOT SRC4.2.3 逻 辑 运 算 和 移 位 指 令 在 程 序 设 计 中 , 一 般 用 AND指 令 对 一 个 数据 的 指 定 位 清 0。 OR指 令 常 常 用 来 对 一 些 指 定位 置 1。 XOR指 令 常 常 用 在 一 些 程 序 的 开 头 使 某个 寄 存 器 清 0, 以 配 合 初 始 化 工 作 的 完 成 。 NOT指 令 常 用 来 将 某 个 数 据 取 成 反 码 。 TEST指 令 一般 用 来 检 测 指 定 位 是 1还 是 0, 而 这 个 指 定 位 往往 对 应 一 个 物 理 量 。 AND AL, 0FH OR AL, 30H XOR AL, 0FH TEST AX, 8000H NOT AL 2 移 位 指 令非 循 环 移 位 指 令 算 术 左 移 指 令格 式 : SAL DST, SRC功 能 : 对 字 或 字 节 各 位 进 行 左 移 , 最 高 位 进 CF,右 端 补 0 逻 辑 左 移 指 令格 式 : SHL DST, SRC功 能 : 同 SAL 4.2.3 逻 辑 运 算 和 移 位 指 令 算 术 右 移 指 令格 式 : SAR DST, SRC功 能 : 最 高 位 不 动 , 其 它 各 位 右 移 , 最 低 位 进CF。 逻 辑 右 移 指 令格 式 : SHR DST, SRC功 能 : 对 字 和 字 节 进 行 右 移 , 最 低 位 进 CF, 左端 补 0。 循 环 移 位 指 令 不 带 进 位 位 的 循 环 左 移 指 令格 式 : ROL DST, SRC 不 带 进 位 位 的 循 环 右 移 指 令格 式 : ROR DST, SRC 循 环 移 位 指 令 带 进 位 位 的 循 环 左 移 指 令格 式 : RCL DST, SRC 带 进 位 位 的 循 环 右 移 指 令格 式 : RCR DST, SRC 4.2.4 串 操 作 指 令 数 据 串 是 存 储 器 中 的 一 串 字 节 或 字 的序 列 , 长 度 可 达 64KB。 串 操 作 指 令 用 于 对 存 储 器 中 的 一 串 连续 字 符 或 数 值 以 字 节 、 字 、 双 字 单 元进 行 操 作 处 理 , 包 括 串 传 送 MOVS,串 装 入 LODS, 串 存 储 STOS,串 比 较CMPS,串 扫 描 SCAS. 1.字 符 串 传 送 指 令格 式 : MOVSB/MOVSW4.2.4 串 操 作 指 令 该 指 令 把 SI作 为 指 针 的 源 串 中 的 一 个 字节 或 是 字 ,传 送 到 以 DI为 指 针 的 目 的 串 中 ,并 修 改 相 应 两 个 指 针 以 指 向 下 一 个 单 元 .ES:( DI) DS:(SI)( DI) ( DI) 2( SI) ( SI) 2 2.字 符 串 比 较 指 令 CMPSB CMPSW格 式 : CMPSB/CMPSW4.2.4 串 操 作 指 令 DS:( ( SI) ) - ES:( ( DI) ) ( SI) 1或 2, ( DI) 1或 2该 指 令 由 SI作 为 指 针 的 源 串 和 由 DI作 为指 针 的 目 的 串 进 行 比 较 ,比 较 之 后 的 结 果反 映 在 标 志 位 上 ,结 果 不 保 存 ,同 时 修 改SI和 DI的 值 . 3.字 符 串 检 索 指 令 SCASB SCASW格 式 : SCASB/SCASW 4.2.4 串 操 作 指 令 字 节 操 作 : ( ( AL) ) - ES:( DI) ,( DI) ( DI) 1字 操 作 : ( ( AX) ) - ES:( DI) ,( DI) ( DI) 2该 指 令 用 于 搜 索 内 存 单 元 中 与 AL或 AX寄 存 器 中 内 容 相 同 的 单 元 . 4.取 字 符 串 指 令 LODSB LODSW格 式 : LODSB/LODSW4.2.4 串 操 作 指 令 字 节 操 作 : ( ( AL) ) DS:( SI) ( SI) ( SI) 1字 操 作 : ( ( AX) ) DS:( SI) ( SI) ( SI) 2该 指 令 把 有 SI指 向 的 源 串 送 到 AL或 AX中 ,同 时 修 改 SI的 值 .该 指 令 不 影 响 标 志位 . 5.存 字 符 串 指 令 STOSB STOSW格 式 : STOSB/STOSW4.2.4 串 操 作 指 令 字 节 操 作 : ES:( ( DI) ) ( AL) , ( DI) ( DI) 1字 操 作 : ES:( ( DI) ) ( AX) , ( DI) ( DI) 2该 指 令 将 AL或 AX中 的 内 容 送 到 内 存DI指 向 的 单 元 中 ,数 据 传 送 完 后 ,DI的 内容 自 动 修 改 .该 指 令 不 影 响 标 志 位 6.重 复 前 缀 指 令 REP ; 无 条 件 重 复 前 缀 指 令 REPE/ REPZ ; 条 件 重 复 前 缀 指 令 REPNE/ REPNZ ; 条 件 重 复 前 缀 指 令4.2.4 串 操 作 指 令 重 复 前 缀 REP 1。 判 断 CX是 否 为 0, 若 是 , 结 束 本 指 令 , 否 则 2 2。 执 行 其 后 的 串 指 令 3。 ( CX) -1-( CX) 4。 转 1。REPZ/REPE1。 若 CX为 0或 ZF=0, 结 束 本 指 令 , 否 则 2 其 余 同 上REPNZ/REPNE1。 若 CX为 0或 ZF=1, 结 束 本 指 令 , 否 则 2 其 余 同 上 例 如 使 0400H开 始 的 256个 单 元 清 0的 程 序 段 。 CLD ; 清 除 方 向 标 志 LEA DI, 0400H ; 将 目 的 地 址 0400H送 DI MOV CX, 0080H ; 共 有 256个 字 节 XOR AX, AX ; AX清 0 REP STOSW ; 将 256个 字 节 清 0 4.2.4 串 操 作 指 令 串 操 作 指 令 的 使 用 约 定 源 串 默 认 放 在 数 据 段 中 , 用 SI指 出 逻 辑地 址 , 目 的 串 默 认 放 在 附 加 段 中 , 用 DI指 出 逻 辑 地 址 。 用 DF标 志 位 确 定 指 针 的 移 动 方 向 。 串 指 针 的 修 正 是 自 动 完 成 的 , 每 处 理 一个 元 素 , 修 正 一 次 , 指 向 下 一 个 元 素 。 用 CX存 放 字 符 串 的 长 度 。 例 题 : 在 当 前 附 加 段 中 从 STRING开 始 存放 一 个 有 300个 字 符 的 字 符 串 , 查 找 该 串中 是 否 存 在 字 符 “ *”, 如 果 存 在 , 将 第一 个 “ *”的 地 址 送 到 BX寄 存 器 中 。 大 家 分 析 该 题 目 如 何 完 成 控 制 转 移 指 令 中 包 括 4类 指 令 : 子 程 序 调用 和 返 回 指 令 ; 无 条 件 转 移 和 条 件 转 移 指 令 ;循 环 控 制 指 令 ; 中 断 指 令 和 中 断 返 回 指 令 。1 子 程 序 调 用 和 返 回 指 令(1) 子 程 序 调 用 指 令 格 式 : CALL 子 程 序 名 功 能 : 保 存 下 一 条 指 令 地 址 , 将 代 码 段 寄存 器 CS, 指 令 指 针 寄 存 器 IP指 向 调 用 子 程 序 。4.2.5 控 制 转 移 指 令 (2) 子 程 序 返 回 指 令 返 回 指 令 指 令 格 式 : RET 功 能 : 从 被 调 用 子 程 序 返 回 CALL指 令 的 下 一指 令 。 4.2.5 控 制 转 移 指 令 带 参 数 的 返 回 指 令 指 令 格 式 : RET n 功 能 : 先 执 行 与 RET相 同 的 操 作 , 再 修 改 SP:SP SP+n。 说 明 : 弹 出 值 应 为 一 个 16位 立 即 数 , 通 常是 偶 数 。 弹 出 值 表 示 返 回 时 从 对 堆 栈 中 舍 弃 的字 节 数 。 n可 以 为 0 FFFFH范 围 中 的 任 何 一 个偶 数 。 RET 4 ; 从 栈 顶 弹 出 返 回 地 址 以 后 , 再使 SP的 值 加 上 4。 4.2.5 控 制 转 移 指 令 2 无 条 件 转 移 指 令 和 条 件 转 移 指 令(1) 无 条 件 转 移 指 令 格 式 : JMP 目 的 地 址 功 能 : 将 程 序 无 条 件 的 转 移 到 目 标 地 址 去执 行 该 地 址 开 始 的 指 令 。 (2) 条 件 转 移 指 令 条 件 转 移 指 令 以 某 一 个 标 志 位 的 值 或 者 某几 个 标 志 位 的 值 作 为 判 断 是 否 进 行 转 移 的 依 据 ,如 果 满 足 指 令 中 所 要 求 的 条 件 , 则 产 生 转 移 ,否 则 往 下 执 行 条 件 转 移 指 令 后 面 的 一 条 指 令 。条 件 转 移 指 令 的 具 体 形 式 如 下 表 所 示 。4.2.5 控 制 转 移 指 令 指 令 名 称 助 记 符 转 移 条 件 备 注等 于 零 转 移不 等 于 非 零 转 移负 转 移正 转 移偶 转 移奇 转 移溢 出 转 移不 溢 出 转 移进 位 转 移无 进 位 转 移低 于 不 高 于 或 等 于 转 移高 于 或 等 于 不 低 于 转 移高 于 不 低 于 或 等 于 转 移低 于 或 等 于 不 高 于 转 移 大 于 不 小 于 或 等 于 转 移大 于 或 等 于 不 小 于 转 移小 于 不 大 于 或 等 于 转 移小 于 或 等 于 不 大 于 转 移CX等 于 零 转 移 JE JZJNE JNZJSJNSJP JPEJNP JPOJOJNOJCJNCJB JNAEJAE JNBJA JNBEJBE JNAJG JNLEJGE JNLJL JNGEJLE JNGJCXZ (ZF)=1(ZF)=0(SF)=1(SF)=0(PF)=1(PF)=0(OF)=1(OF)=0(CF)=1(CF)=0(CF) l(CF)=0(CF)=0且 (ZF)=0(CF)=1或 (ZF)=1(SF)=(OF)且 (ZF)=0(SF)=(OF)(SF) (OF)且(ZF)=0(SF) (OF)或(ZF)=l(CX) 0 无 符 号数无 符 号数无 符 号数无 符 号数带 符 号数带 符 号数带 符 号数带 符 号数 例 题 : 编 制 程 序 段 , 完 成 如 下 功 能 : 如 果AX的 值 为 负 值 , 则 将 -1送 到 AX; 如 果AX的 值 为 0, 则 将 0送 到 AX; 如 果 AX的值 为 正 值 , 则 将 1送 到 AX。 大 家 考 虑 应 该 如 何 完 成 CMP AX, 0 JL L1 JE L3 MOV AX, 1 JMP L3 L1: MOV AX, -1 L3: 。 。 CMP AX, 0 JL L1 JNE L2 JMP L3 L1: MOV AX, -1 JMP L3 L2: MOV AX, 1 L3: 。 。 3 循 环 控 制 指 令(1) LOOP指 令格 式 : LOOP 目 的 地 址功 能 : 先 将 CX的 内 容 减 1, 再 判 断 CX中 是 否 为 0, 如 不 为0, 则 继 续 循 环 , 如 为 0, 则 退 出 循 环 , 执 行 下 一 条 指 令 。(2) LOOPZ LOOPE指 令 格 式 : LOOPZ/LOOPE 目 的 地 址 功 能 : 同 一 条 指 令 的 两 个 不 同 的 助 记 符 。 在 执 行 时 ,使 CX减 1, 再 判 断 CX中 的 值 是 否 为 0, 并 且 判 断 ZF是 否 为1。 如 果 ZF=0, 或 者 CX=0, 则 退 出 循 环 , 只 有 在 ZF=1,并 且 CX 0的 情 况 下 , 才 继 续 循 环 。(3) LOOPNZ LOOPNE 格 式 : LOOPNZ/LOOPNE 目 的 地 址4.2.5 控 制 转 移 指 令 例 题 : 将 物 理 地 址 为 20000H到 20870H的 所有 单 元 中 存 放 其 地 址 低 8位 的 值 。 即 : ( 20000H) =00H, ( 20001H) =01H 应 该 如 何 完 成 呢 ? MOV AX, 2000H MOV DS, AX MOV BX, 0000H MOV CX, 871H NEXT: MOV BX, BL INC BX LOOP NEXT 8086指 令 系 统 4 中 断 指 令 和 中 断 返 回 指 令(1)中 断 指 令格 式 : INT n功 能 : 用 于 产 生 软 件 中 断 , 以 调 用 中 断 类 型 号 为 n的中 断 服 务 程 序 。 n为 一 个 8位 立 即 数 , 取 值 范 围 为0 255。(2) 溢 出 中 断 指 令格 式 : INTO(3) 中 断 返 回 指 令格 式 : IRET功 能 : 将 堆 栈 中 的 断 点 地 址 弹 出 赋 给 IP和 CS, 并 弹出 标 志 寄 存 器 值 , 以 实 现 中 断 返 回 , 恢 复 中 断 前的 状 态 。4.2.5 控 制 转 移 指 令 1 标 志 操 作 指 令CLC ; 进 位 标 志 位 CF清 0 (clear carry)STC ; 进 位 标 志 位 CF置 1 (set carry)CMC ; 进 位 标 志 位 CF取 反 ( complement carry)CLD ; 方 向 标 志 位 DF清 0 (clear direction)STD ; 方 向 标 志 位 DF置 1 (set direction)4.2.6 处 理 器 控 制 指 令 2 外 部 同 步 指 令
展开阅读全文