微机原理与接口技术第3章汇编语言程序设计

上传人:san****019 文档编号:22675060 上传时间:2021-05-30 格式:PPT 页数:80 大小:475.31KB
收藏 版权申诉 举报 下载
微机原理与接口技术第3章汇编语言程序设计_第1页
第1页 / 共80页
微机原理与接口技术第3章汇编语言程序设计_第2页
第2页 / 共80页
微机原理与接口技术第3章汇编语言程序设计_第3页
第3页 / 共80页
资源描述:

《微机原理与接口技术第3章汇编语言程序设计》由会员分享,可在线阅读,更多相关《微机原理与接口技术第3章汇编语言程序设计(80页珍藏版)》请在装配图网上搜索。

1、第 3 章 第 3 章 3.1 8086/8088指 令 系 统3.2 汇 编 语 言 程 序3.3 汇 编 语 言 程 序 设 计习 题 例 8086/8088指 令 语 句 格 式 : ; 标 号 是 自 定 义 的 、 非 系 统 关 键 字 的 符 号 串 。 操 作 符 是 操 作 码 的 助 记 符 号 表 示 , 是 指 令 的 关 键 字 , 必不 可 少 。 操 作 数 是 参 与 指 令 具 体 操 作 的 操 作 对 象 , 根 据 操 作 数 的个 数 , 有 0( 零 ) 操 作 数 指 令 、 单 操 作 数 指 令 和 双 操 作 数( 用 逗 号 分 割 ) 指

2、 令 。 注 释 仅 仅 是 提 供 阅 读 的 文 字 信 息 。 操 作 数 寻 址 方 式 操 作 数 作 为 参 与 指 令 具 体 操 作 的 对 象 , 可 以 是 操 作 数 据 ,也 可 以 是 转 移 地 址 。 操 作 数 可 以 是 立 即 数 , 也 可 以 存 放 在 寄 存 器 或 内 存 储 器或 输 入 /输 出 接 口 中 。 操 作 数 的 寻 址 方 式 有 立 即 方 式 、 寄 存 器 方 式 、 直 接 内 存方 式 、 间 接 内 存 方 式 、 I/O方 式 。 8086/8088寻 址 方 式 分 为 数 据 寻 址 方 式 ( 7种 ) 和

3、转 移 地址 寻 址 方 式 ( 4种 ) 两 大 类 。 数 据 传 送 MOV指 令传 送 指 令 MOV格 式 : MOV dst, src操 作 : dst src源 操 作 数 ( src) 传 送 到 目 的 操 作 数 ( dst )双 操 作 数 : 源 操 作 数 , 目 的 操 作 数数 据 类 型 : 字 节 类 型 /字 类 型 立 即 方 式 : 操 作 数 据 在 指 令 中 直 接 给 出 ( 立 即 数 ) 。寄 存 器 方 式 : 操 作 数 存 放 在 指 令 给 出 的 字 节 /字 寄 存 器 中 。例 如 : MOV AX, 0FC25H ; AX0F

4、C25H MOV AL, 42H ; AL42HMOV AH, 11010011B ; AH 11010011B(0D3H) MOV CX, -25 ; AX -25MOV AL, 1000 ; 错 误 , 立 即 数 1000超 字 节 范 围 MOV DS, 2000H ; 错 误 , 不 能 直 接 取 立 即 数 给 段 RMOV AX, 2000H ; 取 2000H ( 立 即 数 ) 给 AXMOV DS, AX ; 将 AX中 的 段 基 址 数 传 送 给 DSMOV AX, IP ; 错 误 , 程 序 中 不 得 出 现 IPMOV AX, CS ; 正 确 , CS可

5、读MOV CS, AX ; 错 误 , CS不 可 写立 即 寻 址 和 寄 存 器 寻 址 8086/8088存 储 器 组 织 微 机 存 储 器 是 以 字 节 为 存 储 单 位 。 8086/8088存 储 器 ( 内 存 ) 地 址 线 是 20根 , 内 存 容 量 1MB,地 址 范 围 0 0FFFFFH 。 8086/8088存 储 器 是 分 段 结 构 , 每 段 最 大 为 64KB。 操 作 数 如 果 存 放 在 内 存 , 需 要 指 明 内 存 的 逻 辑 地 址 , 微 处理 器 的 地 址 加 法 器 会 自 动 形 成 内 存 的 物 理 地 址 . 逻

6、 辑 地 址 描 述 格 式 段 基 址 : 偏 移 址 物 理 地 址 = 段 基 址 16 + 偏 移 址 存 储 器 寻 址 方 式 段 址 寄 存 器 : 内 存 逻 辑 地 址 的 段 基 址 存 放 的 寄 存 器 ( CS, SS, DS, ES) 。 偏 移 址 寄 存 器 : 基 址 寄 存 器 ( BX, BP) , 变 址 寄 存 器 ( SI, DI) 。 内 存 逻 辑 地 址 的 偏 移 地 址 ( EA) 寻 址 方 式 : 直 接 寻 址 方 式 : 指 令 中 直 接 给 出 EA 寄 存 器 间 接 寻 址 方 式 : EA =( 基 /变 址 R) 寄 存

7、 器 相 对 寻 址 方 式 : EA =( 基 /变 址 R) + 位 移 量 基 址 变 址 寻 址 方 式 : EA =( 基 址 R) + ( 变 址 R) 基 址 变 址 相 对 寻 址 方 式 : EA =( 基 址 R) + ( 变 址 R) + 位 移 量 段 址 寄 存 器 和 偏 移 址 寄 存 器 配 对 使 用 的 隐 含 规 定 :代 码 ( 指 令 ) 指 针 CS:IP堆 栈 操 作 指 针 SS:SP, 或 SS:BP 源 数 据 串 指 针 DS:SI目 的 数 据 串 指 针 ES:DI 存 储 器 寻 址 方 式 例MOV AL, 1000H ; ( DS

8、 : 1000H) 的 字 节 数 ALMOV 2000H, BX ; BX ( DS : 2000H)MOV AX, BX ; ( DS : BX) 的 字 数 AXMOV AX, SS:BX ; ( SS : BX) 的 字 数 AXMOV AX, BX-100 ; ( DS :( BX-100) ) 的 字 数 AXMOV BX+ SI , AX ; BX+SI 是 内 存 间 接 寻 址MOV AX, CX ; 错 误 , CX寄 存 器 不 能 用 于 内 存 寻 址MOV BX, SI ; 错 误 , 2个 操 作 数 不 能 都 是 内 存 寻 址 MOV AX, SI+DI ;

9、 错 误 , SI和 DI 不 能 配 对 做 内 存 间 接 寻 址 8086/8088指 令 系 统 8086/8088微 机 的 指 令 系 统 有 133条 指 令 ( 附 录 A) , 分 为 六 大 类 :1. 数 据 传 送 类 指 令 : 主 要 有 MOV, PUSH, POP, XCHG, LEA, IN,OUT等 指 令 。2. 算 术 运 算 类 指 令 : 加 、 减 、 乘 、 除 ( 整 数 ) 等 算 术 运 算 指 令 。3. 逻 辑 运 算 和 移 位 类 指 令 : 逻 辑 运 算 和 移 位 指 令 。4. 控 制 转 移 类 指 令 : 有 /无 条

10、件 转 移 指 令 ( 在 分 支 程 序 设 计 中 介 绍 ) ,LOOP循 环 控 制 指 令 ( 在 循 环 程 序 设 计 中 介 绍 ) , CALL/RET指 令( 在 子 程 序 设 计 中 介 绍 ) 。5. 串 操 作 类 指 令 ( 在 循 环 程 序 设 计 中 介 绍 ) 6. 处 理 机 控 制 类 指 令 1. 数 据 传 送 指 令 类 数 据 传 送 类 指 令 一 共 有 14条 。 这 里 主 要 介 绍 : MOV 传 送PUSH 压 入 堆 栈 POP 弹 出 堆 栈XCHG 交 换 LEA 取 偏 移IN 输 入 端 口 “ 读 ” OUT 输 出

11、端 口 “ 写 ” 数 据 传 送 类 指 令 均 不 影 响 标 志 位 。 数 据 类 型 字 节 ( byte) /字 ( word) 。 绝 大 多 数 是 双 操 作 数 ,两 个 操 作 数 ( 字 节 /字 ) 类 型 必 须 一 致 。 寻 址 方 式 基 本 与 MOV 指 令 的 要 求 相 同 。 数 据 传 送 指 令传 送 指 令 MOV格 式 : MOV dst, src操 作 : dst( src)双 操 作 数 寻 址 方 式 :dst (目 的 操 作 数 ) src (源 操 作 数 )reg(寄 存 器 ) reg| mem| imm(立 即 数 )| s

12、egregmem(内 存 ) reg| imm| segregsegreg(段 寄 存 器 ) reg| mem注 意 : 1. 两 个 操 作 数 类 型 ( 字 节 /字 ) 要 一 致 。2. 目 的 操 作 数 不 能 是 立 即 数 , 两 个 操 作 数 不 能 都 是 内 存 寻 址 方 式 。 堆 栈 操 作 指 令PUSH 和 POP 是 一 对 堆 栈 操 作 指 令 : 堆 栈 是 一 个 “ 先 进 后 出 ” 的 内 存 数 据 存 取 区 域 。 逻 辑 地 址 SS: SP 。 数 据 进 入 堆 栈 的 操 作 为 压 入 ( PUSH) , 从 堆 栈 取 出

13、 数 据 的 操 作 为 弹 出( POP) 。 堆 栈 操 作 是 单 操 作 数 指 令 , 只 能 是 字 类 型 数 据 。压 入 指 令 PUSH 格 式 : PUSH src操 作 : ( SP) -2SP ( src) ( SP)操 作 数 寻 址 : src = |mem |reg |segreg例 如 : MOV AX, 100 PUSH AX SS:0000 SP 栈 顶 栈 底 堆 栈 操 作 指 令弹 出 指 令 POP格 式 : POP dst操 作 : ( ( SP) ) dst ( SP) +2SP操 作 数 寻 址 : dst = mem|reg|segreg例

14、 如 :PUSH AX ; AX( SS : SP)PUSH BX ; ( DS : BX) ( SS : SP)POP CX ; ( SS : SP) CXPUSH CL ; 错 误 , 堆 栈 操 作 必 须 是 字 类 型 数 据POP 200 ; 错 误 , 立 即 数 不 能 是 堆 栈 操 作 数 据 交 换 指 令 XCHG格 式 : XCHG opr1, opr2操 作 : ( opr1) ( opr2)操 作 数 寻 址 : opr1=reg |mem opr2= reg |mem例 如 : XCHG 2000H, BX ; 错 误 , 两 个 内 存 数 据 不 可 直 接

15、 交 换 。可 改 为 : MOV AX, 2000H ; ( DS : 2000H) AX XCHG AX, BX ; AX和 ( DS : BX) 交 换 MOV 2000H, AX ; AX( DS : 2000H)数 据 交 换 指 令 查 表 换 码 指 令 XLAT格 式 : XLAT ; 无 操 作 数操 作 : ALDS:( BX+AL) ; 隐 含 操 作 数 寻 址注 意 : BX为 表 头 的 EA, AL是 距 离 表 头 的 位 移 量 。 表 最 大 容 量 为 256个字 节 。例 如 :MEM DB ABCDEFGHIJKLMNOPQRSTUVWXYZMOV B

16、X, OFFSET MEM MOV AL, 2XLAT ; AL= 43H( C的 ASCII码 值 )查 表 换 码 指 令 装 偏 移 指 令 LEA格 式 : LEA dst, src操 作 : src的 偏 移 址 dst操 作 数 寻 址 : dst= reg src = mem 例 如 :MEM DB ABCDEFGHIJKLMNOPQRSTUVWXYZLEA BX, MEM ; BX取 MEM数 据 表 头 的 EA( 等 同 于 : MOV BX, OFFSET MEM )MOV AL, BX+2 ; AL= 43H装 偏 移 址 指 令 输 入 /输 出 ( I/O) 指 令

17、 I/O接 口 指 令 的 语 句 格 式 : IN AL , 端 口 地 址 OUT 端 口 地 址 , AL I/O接 口 的 端 口 地 址 16位 , 地 址 范 围 为 00FFFFH。 若 端 口 地 址 为 00FFH( 0255) , 可 以 直 接 给 出 ; 超 出 字 节 范 围 的 端 口 地 址 必 须 存放 在 DX寄 存 器 中 , 间 接 给 出 。例 如 :IN AL , 80H ; 与 MOV AL, 80H 的 区 别OUT 20H , AL ; 与 MOV 20H, AL 的 区 别MOV DX, 100H ; DX=100H OUT DX, AL ;

18、与 MOV DX, AX 的 区 别IN AL, 80H ; 错 误 , 端 口 寻 址 不 能 用 方 括 号 算 术 运 算 类 指 令 可 以 分 成 加 、 减 、 乘 、 ( 整 ) 除 和 十 进 制 ( BCD码 )调 整 五 组 。 这 里 介 绍 加 、 减 、 乘 、 除 14条 指 令 。ADD 加 法 ADC 进 位 加 INC 加 1 SUB 减 法 SBB 借 位 减 DEC 减 1 CMP 比 较 NEG 求 补MUL 无 符 号 乘 法 IMUL 有 符 号 乘 法DIV 无 符 号 除 法 IDIV 有 符 号 除 法CBW 字 节 符 号 扩 展 CWD 字

19、 符 号 扩 展 算 术 运 算 类 指 令 基 本 都 均 影 响 标 志 位 ( ZF、 SF、 CF、 OF) 。 绝 大 多 数 是 双 操 作 数 , 操 作 数 可 为 字 节 /字 类 型 。 寻 址 方 式 与 MOV 指 令 基 本 相 同 。2. 算 术 运 算 指 令 类 加 法 指 令 ADD格 式 : ADD dst, src ;( dst) +( src) dst进 位 加 指 令 ADC格 式 : ADC dst, src ; ( dst) +( src) + CF dst加 1指 令 INC格 式 : INC dst ;( dst) + 1 dst操 作 数 寻

20、 址 方 式 : dst src reg reg|mem|imm mem reg|imm加 法 运 算 指 令 减 法 指 令 SUB格 式 : SUB dst, src ;( dst) -( src) dst 借 位 减 指 令 SBB格 式 : SBB dst, src ;( dst) -( src) - CF dst减 1指 令 DEC格 式 : DEC dst ;( dst) - 1dst操 作 数 寻 址 方 式 : dst src reg reg|mem|imm mem reg|imm减 法 运 算 指 令 减 法 运 算 指 令比 较 指 令 CMP格 式 : CMP dst,

21、src操 作 : ( dst) -( src) , 仅 根 据 计 算 结 果 设 置 相 关 标 志 位 。求 补 指 令 NEG格 式 : NEG dst操 作 : 0 -( dst) dst ; 求 互 补 码 无 符 号 乘 法 指 令 MUL 有 符 号 乘 法 指 令 IMUL格 式 : MUL src IMUL src操 作 数 寻 址 : src = reg|mem操 作 : 有 /无 符 号 数 的 乘 法字 节 乘 法 : ( AL) ( src) AX字 乘 法 : ( AX) ( src) DX|AX( 32位 )注 意 : 被 乘 数 和 乘 积 是 固 定 寻 址

22、, 只 需 给 出 乘 数 。例 如 : 无 符 号 数 字 节 乘 法 ( 255 1 ) 0FFH 1= 00FFH 有 符 号 数 字 节 乘 法 ( -1 1 ) 0FFH 1= 0FFFFH乘 法 运 算 指 令 无 符 号 除 法 指 令 DIV 有 符 号 除 法 指 令 IDIV格 式 : DIV src IDIV src操 作 数 寻 址 : src = reg|mem操 作 : 有 /无 符 号 数 的 除 法字 节 除 法 : ( AX) /( src) AL( 商 ) , AH( 余 数 )字 除 法 : ( DX|AX) /( src) AX( 商 ) , DX( 余

23、 数 )注 意 : 1. 被 除 数 , 商 和 余 数 是 固 定 寻 址 , 只 需 给 出 除 数 。 2. 除 法 可 能 有 0作 除 数 错 误 ; 商 超 出 字 节 /字 范 围 的 溢 出 错 误 。 3. 有 符 号 数 除 法 的 余 数 与 被 除 数 的 符 号 相 同 。除 法 运 算 指 令 符 号 扩 展 指 令 CBW, CWD 格 式 : CBW ; 把 AL字 节 数 的 符 号 扩 展 到 AH, 成 AX字 数CWD ; 把 AX字 数 的 符 号 扩 展 到 DX, 成 DX|AX双 字 数操 作 数 : 隐 含 寻 址 (AL/ AX/ DX )标

24、 志 位 : 不 改 变 。例 如 : MOV AL, 56HCBW ; AX=0056HMOV AX, 8600HCWD ; AX= 8600H, DX= 0FFFFH符 号 扩 展 指 令 例 如 : MUL AH ; 无 符 号 数 (AL) (AH)AX DIV BX ; 无 符 号 数 (DX|AX) / (BX) AXIMUL AL ; 有 符 号 数 (AL) (AL)AX IMUL CX ; 有 符 号 数 (AX) (CX)DX|AX例 如 : 计 算 (-104)除 以 25。MOV AL, -104 ; AL=-104( 98H) CBW ; AL扩 展 为 AX ( 0

25、FF98H) MOV BL, 25 ; BL=25 IDIV BL ; AL=-4( 商 ) , AH=-4( 余 数 )例 如 , 如 果 AX=0010H( +16) , BL=0FDH( -3) IDIV BL ; AX=01FBH, 商 =-5, 余 数 =1乘 /除 法 指 令 应 用 例 3. 逻 辑 运 算 和 移 位 指 令 逻 辑 运 算 和 移 位 类 指 令 是 以 2#数 位 为 单 位 的 “ 位 操 作 ” 指 令 , 逻 辑 运算 指 令 5条 , 移 位 指 令 8条 。NOT 逻 辑 非 AND 逻 辑 与 OR 逻 辑 或XOR 逻 辑 异 或 TEST 位

26、 测 试SHL 逻 辑 左 移 ROL 循 环 左 移 SHR 逻 辑 右 移 ROR 循 环 右 移SAL 算 术 左 移 RCL 带 进 位 循 环 左 移SAR 算 术 右 移 RCR 带 进 位 循 环 右 移 操 作 数 可 为 字 节 /字 类 型 , 按 位 进 行 逻 辑 运 算 。 多 数 情 况 不 改 变 标 志 位 。 逻 辑 运 算 指 令逻 辑 非 指 令 NOT格 式 : NOT dst ; 求 ( dst) 的 互 反 码逻 辑 与 指 令 AND逻 辑 或 指 令 OR逻 辑 异 或 指 令 XOR格 式 : AND dst, src 操 作 : ( dst)

27、 ( src) dst OR dst, src ( dst) ( src) dstXOR dst, src ( dst) ( src) dst测 试 指 令 TEST格 式 : TEST dst, src 操 作 : ( dst) ( src) ; 不 保 存 与 运 算 结 果 , 只 设 置 标 志 位 移 位 指 令逻 辑 左 移 SHL 逻 辑 右 移 SHR算 术 左 移 SAL 算 术 右 移 SAR循 环 左 移 ROL 循 环 右 移 ROR带 进 位 循 环 左 移 RCL 带 进 位 循 环 右 移 RCR格 式 : dst, cnt操 作 数 寻 址 : dst是 移 位

28、 的 对 象 , dst=reg|memcnt是 移 位 的 位 数 , cnt=1|CL操 作 : ( 图 3.1 移 位 指 令 操 作 图 解 )标 志 CF : 左 移 取 自 dst的 最 高 位 , 右 移 取 自 dst 的 最 低 位 D0位 。 逻 辑 运 算 和 移 位 指 令 应 用 例; AX乘 以 10SAL AX, 1MOV BX, AXSAL AX, 1SAL AX, 1 ADD AX, BX; 双 字 算 术 右 移SAR DX, 1RCR AX, 1 DX CF AX CFSAR DX,1 RCR AX,1AND AL, 50H ; AL=( AL) 50HO

29、R AX, 8080H ; AX=( AX) ( DS : 8080H)AND AL, 0FH ; AL高 4位 清 0, 低 4位 保 留OR AL, 0FH ; AL高 4位 保 留 , 低 4位 置 1XOR AL, 0FH ; AL高 4位 保 留 , 低 4位 取 反 6. 处 理 器 控 制 指 令 标 志 位 设 置 指 令 :CLC CF=0 STC CF=1 CMC CF取 反CLD DF=0 STD DF=1CLI IF=0 STI IF=1 CPU控 制 指 令 :NOP 无 操 作 ( 空 操 作 )HLT 停 机 ( 暂 停 ,等 待 外 部 中 断 ,中 断 后 恢

30、 复 运 行 )WAIT 等 待 ( 等 待 测 试 信 号 TEST, 恢 复 运 行 ) 汇 编 语 言 程 序 的 语 句汇 编 语 言 源 程 序 由 三 类 指 令 语 句 组 成 :( 符 号 ) 执 行 指 令 语 句提 供 给 汇 编 程 序 “ 翻 译 ” 成 机 器 能 直 接 执 行 的 指 令 。汇 编 指 示 性 语 句 ( 伪 指 令 )提 供 给 汇 编 程 序 指 示 汇 编 操 作 的 指 令 。宏 指 令 语 句提 供 给 汇 编 程 序 的 扩 展 的 “ 功 能 宏 大 ” 的 指 令 。 8086/8088汇 编 语 句 格 式汇 编 语 言 源 程

31、序 语 句 的 格 式 : ; 名 字 项 是 自 定 义 的 一 个 符 号 串 。 操 作 码 项 是 执 行 指 令 、 伪 指 令 和 宏 指 令 的 操 作 功 能 符 。 操 作 数 项 是 0个 或 1个 或 多 个 ( 用 逗 号 分 隔 ) 的 操 作 对 象 。 注 释 项 是 开 始 于 “ ; ” , 提 供 阅 读 的 文 字 信 息 。注 意 : 各 项 之 间 用 空 格 键 符 , 或 TAB键 符 分 界 。操 作 码 项 必 有 , 其 它 项 可 选 择 有 /无 。汇 编 语 言 程 序 不 区 别 大 小 写 英 文 。 名 字 项 名 字 项 是 自

32、 定 义 的 一 个 符 号 串 , 可 以 是 标 号 名 ( 必 须 结 束 于 “ : ” ) 、符 号 常 数 名 、 变 量 名 、 段 名 、 过 程 名 。 名 字 项 的 合 法 字 符 : 英 文 字 母 AZ/az , 数 字 09 , 特 殊 字 符 _ ? 等 。注 意 : 数 字 09不 能 是 第 1个 字 符 , 句 点 “ ” 只 能 做 第 1个 字 符 。 在 执 行 指 令 语 句 的 操 作 数 项 中 :符 号 常 数 名 作 为 立 即 数 使 用 。标 号 名 、 过 程 名 作 为 转 移 地 址 使 用 。 变 量 名 作 为 存 储 单 元

33、的 偏 移 址 , 可 以 直 接 寻 址 使 用 。 段 名 作 为 段 基 址 ( 立 即 数 ) 使 用 。 汇 编 表 达 式 操 作 数 项 是 0个 或 1个 或 多 个 ( 用 逗 号 分 隔 ) 的 指 令 操 作 的 对 象 , 用 规定 的 汇 编 表 达 式 描 述 。 汇 编 表 达 式 是 由 ( 整 数 ) 常 数 、 寄 存 器 、 标 号 、 变 量 等 , 和 一 些 运 算符 , 或 操 作 符 组 成 的 表 达 式 。 汇 编 表 达 式 能 被 汇 编 程 序 解 释 , 并 计 算 出 数 值 /地 址 结 果 , 所 以 分 为 数值 表 达 式

34、和 地 址 表 达 式 两 种 。 数 值 表 达 式 : 由 常 数 、 数 值 运 算 符 组 成 的 表 达 式 , 计 算 结 果 为 字 节 /字数 据 。 地 址 表 达 式 : 包 含 地 址 ( 标 号 、 变 量 和 过 程 名 都 是 地 址 ) 、 常 数 , 以 及 地 址 运 算 /操 作 符 的 表 达 式 , 计 算 结 果 为 内 存 地 址 值 。 常 数 和 数 值 运 算 符数 字 常 数 (立 即 数 ) : 2/10/16进 制 数 、 ASCII字 符 (用 引 号 括 起 来 )符 号 常 数 给 常 数 起 的 名 字数 值 运 算 符 ( 运

35、算 对 象 和 结 果 是 整 数 常 数 ) : 算 术 运 算 符 : +、 、 *、 /、 MOD逻 辑 运 算 符 : NOT、 AND、 OR、 XOR 关 系 运 算 符 : EQ、 NE、 GT、 GE、 LT、 LE ( 真 值 为 全 1, 假 值 为 全 0) 地 址 运 算 /操 作 符地 址 的 属 性 : 段 基 址 偏 移 址 类 型 ( BYTE、 WORD、 DWORD、 NEAR, FAR)地 址 运 算 /操 作 符 :地 址 运 算 符 : + 、 ; 取 偏 移 址 的 相 对 位 移 量分 析 运 算 符 : 取 地 址 类 型 值 TYPE ; 类

36、型 值 有 1/2/4/-1/-2 取 段 基 址 值 SEG 取 偏 移 址 值 OFFSET 属 性 定 义 运 算 符 :PTR ; 确 定 寻 址 的 类 型换 段 前 缀 ; 修 改 段 地 址 寄 存 器 SHORT ; 确 定 为 “ 短 ” 转 移 地 址 汇 编 运 算 符 的 优 先 级运 算 符 号 优 先 级( ) 、 、 高低: 、 PTR、 THIS、 SEG、 OFFSET、 TYPEHIGH、 LOW*、 /、 MOD、 SHL、 SHR+、 -EQ、 NE、 LT、 LE、 GT、 GENOTAND OR、 XORSHORT ( 短 距 离 转 移 ) 类 型

37、 指 示 符 PTR应 用 格 式 : PTR 例 如 ,INC WORD PTR BX ; 内 存 操 作 数 为 字 类 型INC BYTE PTR BX ; 内 存 操 作 数 为 字 节 类 型CALL FAR PTR sub1 ; 段 间 调 用 子 程 序 sub1CALL NEAR PTR sub2 ; 段 内 调 用 子 程 序 sub2地 址 表 达 式 应 用 例 换 段 指 示 符 应 用 格 式 : : 例 如 ,MOV AX, SS:SI+2 SUB AX, ES:BXMOV ES:BX, AXMEM DB 10H, 20H, 30H, 40HMOV AX, SEG

38、MEM ; AX取 MEM段 址MOV DS, AXMOV BX, OFFSET MEM ; BX取 MEM偏 移 址MOV AL, BX+2 ; AL=30HMOV AX, WORD PTR MEM ; AX=2010H MOV AL, TYPE MEM ; AL=1 汇 编 指 示 语 句 ( 伪 指 令 ) 常 用 的 汇 编 指 示 语 句 ( 伪 指 令 ) 分 成 五 组 :符 号 定 义 、 内 存 数 据 定 义 、 段 定 义 、 过 程 定 义 、 模 块 定 义 。 常 用 的 伪 指 令 语 句 :EQU 和 = ( 符 号 定 义 /赋 值 )DB / DW / DD

39、 ( 存 储 单 元 类 型 和 存 储 数 据 定 义 )SEGMENT 和 ENDS ( 段 定 义 )ORG ( 段 内 偏 移 址 指 针 $设 置 )PROC 和 ENDP ( 过 程 子 程 序 定 义 )NAME 和 END ( 模 块 定 义 和 源 程 序 结 束 ) 符 号 定 义 伪 指 令等 值 伪 指 令 EQU格 式 : EQU 等 号 伪 指 令 ( =)格 式 : =与 EQU不 同 : = 只 能 是 合 法 的 汇 编 表 达 式 ; = 的 符 号 名 可 以 重 复定 义 。例 如 :count EQU 19 ; count =19b=20b=b+10

40、; b重 新 定 义 , b = 30d=(count+4)*2 ; d = 46f EQU 123456H ; 正 确 , “ 123456H”为 符 号 对 象 g=123456H ; 错 误 , 123456H超 过 16位 2# 的 数 值 范 围 数 据 定 义 伪 指 令内 存 数 据 定 义 伪 指 令 DB、 DW 和 DD 格 式 : DB / DW / DD 功 能 : 定 义 内 存 变 量 和 类 型 , 分 配 和 初 始 化 内 存 单 元 数 据 。伪 指 令 类 型 字 节 数 数 值 范 围DB BYTE 1 字 节 ( 8位 ) 数DW WORD 2 字 (

41、 16位 ) 数DD DWORD 4 双 字 数 , 即 2个 字 数 内 存 数 据 定 义 的 数 据 表 数 据 表 为 顺 序 存 放 在 内 存 单 元 的 数 据 , 多 个 数 据 之 间 用 “ , ” 分 隔 。 数 值 表 达 式 :DB ( 8位 数 值 的 数 据 表 )DW ( 16位 数 值 的 数 据 表 )DD ( 32位 数 值 的 数 据 表 ) 地 址 表 达 式 :DW ( 偏 移 址 的 数 据 表 )DD ( 偏 移 址 和 段 基 址 的 数 据 表 ) ASCII码 字 符 串 :用 单 /双 引 号 界 定 的 字 符 串 的 数 据 表 。

42、? 分 配 空 单 元 , 不 放 数 据 DUP 数 据 重 复 定 义 ( 可 嵌 套 使 用 )格 式 : DUP ( ) 内 存 数 据 定 义 例 DA1 DB DATA SEGMENTDA2 EQU $-DA1 ; $ 为 当 前 偏 移 址 指 针 , DA2=12DA3 DB 6DH, 62, 15H, 28DA4 DB 10 dup (0, 5 dup (1, 2), 0)DA5 DB 12345DA6 DW 7, 9, 298, 1967DA7=DA6 DA4 ; DA7=125DA8= $DA4 ; DA8=133 段 定 义 伪 指 令段 定 义 伪 指 令 SEGME

43、NT格 式 : SEGMENT 段 结 束 伪 指 令 ENDS格 式 : ENDS SEGMENT语 句 与 对 应 的 ENDS语 句 的 段 名 必 须 一 致 。段 基 址 说 明 伪 指 令 ASSUME 格 式 : ASSUME :, . 段 寄 存 器 可 以 是 CS/DS/ES/SS, 段 名 是 已 定 义 的 。偏 移 址 指 针 设 置 伪 指 令 ORG格 式 : ORG ;数 值 065535 偏 移 址 指 针 用 “ $ ”表 示 。 程 序 的 代 码 段 结 构 : SEGMENT ; 段 开 始 ASSUME ENDS ; 此 段 结 束 程 序 的 数

44、据 段 结 构 : SEGMENT ; 段 开 始 ENDS ; 此 段 结 束程 序 的 段 结 构 程 序 模 块 定 义 伪 指 令程 序 模 块 开 始 伪 指 令 NAME格 式 : NAME ( 源 程 序 模 块 开 始 NAME伪 指 令 可 以 省 略 不 用 。 )程 序 模 块 结 束 伪 指 令 END格 式 : END 汇 编 语 言 源 程 序 结 构 例data SEGMENT x db ? y dw ? z dd ?data ENDSstack SEGMENT dw 100 dup (?) top equ $stack ENDS code SEGMENTASSU

45、ME CS:code, DS:data, SS:stackSTART: MOV AX, data MOV DS, AX ; 设 置 DS MOV AX, 4C00H ; 返 回 DOSINT 21Hcode ENDS END START 汇 编 语 言 程 序 设 计 技 术 结 构 化 汇 编 语 言 程 序 设 计结 构 化 程 序 设 计 使 程 序 结 构 清 晰 、 易 于 理 解 、 易 于 调 试 和修 改 , 充 分 显 示 了 程 序 模 块 化 的 优 点 。 汇 编 语 言 程 序 的 基 本 结 构汇 编 语 言 程 序 设 计 有 三 种 基 本 结 构 , 即 顺

46、序 结 构 、 分 支 结构 和 循 环 结 构 。 它 们 是 单 入 口 /出 口 的 程 序 结 构 。 这 三 种 结构 的 任 意 组 合 和 嵌 套 构 成 了 结 构 化 程 序 设 计 。 子 程 序 设 计 技 术 顺 序 程 序 设 计 例 1【 例 3.1】 计 算 S =( 8000 -( X*Y+ Z) ) /X, 其 中 X, Y, Z,S均 是 有 符 号 数 字 变 量 。 ; 定 义 内 存 字 变 量 x, y, z, s:DATA SEGMENT X DW 600 Y DW 25 Z DW -2000 S DW ?, ? ; 存 放 商 和 余 数DATA

47、 ENDS ; 计 算 S算 术 表 达 式 程 序 段 :MOV AX, XIMUL Y ; DX | AX =X*YMOV BX, AXMOV CX, DX ; CX | BX= X*YMOV AX, ZCWD ; Z扩 展 成 双 字 DX | AXADD BX, AXADC CX, DX ; CX | BX= X*Y+ZMOV AX, 8000CWD ; 8000扩 展 成 双 字 DX | AXSUB AX, BXSBB DX, CX ; DX | AX= 8000 -( X*Y+Z)IDIV X ; ( 8000 -( X*Y+Z) ) /X MOV S, AX ; 商 ( AX)

48、 存 放 到 S单 元MOV S+2, DX ; 余 数 ( DX) 存 放 到 S+2单 元 顺 序 程 序 设 计 例 2【 例 3.2】 把 一 个 字 节 的 压 缩 BCD, 转 换 成 两 个 字 节 的 ASCII码 。 ; 定 义 数 据 段 :DATA SEGMENT BCD DB 48H ASC DB ?, ? ; 存 放 转 换 结 果DATA ENDS ; 转 换 程 序 段 :MOV AL, BCDMOV BL, AL ; AL, BL取 BCD单 元 的 值AND AL, 0FH ; AL= 08HOR AL, 30H ; AL= 38HMOV ASC, AL ;

49、38H存 放 到 ASC单 元MOV CL, 4SHR BL, CL ; BL= 04HOR BL, 30H ; BL= 34H MOV ASC+1, BL ; 34H存 放 到 ASC+1单 元 无 条 件 转 移 指 令无 条 件 转 移 指 令 JMP 操 作 : 计 算 转 移 目 标 的 地 址 , 转 移 到 目 标 处 去 执 行 。 段 内 直 接 转 移 ( 直 接 给 出 段 内 目 标 地 址 的 标 号 )格 式 : JMP lab例 如 : JMP sub1 ; 直 接 转 移 到 标 号 sub1 JMP SHORT sub2 ; 段 内 直 接 短 转 移 到 标

50、 号 sub2 JMP NEAR PTR sub3 ; 段 内 直 接 近 转 移 到 标 号 sub3 段 内 间 接 转 移 ( 寄 存 器 /内 存 单 元 给 出 目 标 地 址 )格 式 : JMP src操 作 数 寻 址 : src = reg|mem ; 字 类 型 例 如 : JMP BX ; IP 从 BX 中 取 偏 移 址 EA JMP WORD PTR BX ; IP 从 ( BX ) 指 示 的 内 存 2字 节 中 取 EA 条 件 转 移 指 令 Jxxx格 式 : Jxxx 操 作 数 : 为 段 内 短 转 移 , 即 标 号 偏 移 址 的 位移 量 在

51、( -128, +127) 区 间 。操 作 : IP = IP + ( 补 码 )注 意 :1.条 件 转 移 指 令 通 常 用 在 能 设 置 了 标 志 位的 指 令 之 后 ,根 据 状 态 标 志 条 件 的 成 立 与否 判 断 是 否 转 移 。2.条 件 转 移 指 令 只 能 使 用 段 内 短 转 移 寻 址方 式 。 条 件 转 移 指 令 条 件 成 立 ? yesno 转 目 标 语 句下 一 条 语 句 ( 单 标 志 ) 条 件 转 移 指 令 表指 令 助 记 符 测 试 标 志 条 件 说 明JZ( JE) ZF=1 为 零 转 ( 等 于 转 )JNZ(

52、JNE) ZF=0 非 零 转 ( 不 等 转 )JC CF=1 有 进 /借 位 转JNC CF=0 无 进 /借 位 转JS SF=1 符 号 位 为 1转JNS SF=0 符 号 位 为 0转JO OF=1 有 溢 出 错 转JNO OF=0 无 溢 出 错 转JP PF=1 “1”偶 数 个 转 JNP PF=0 “1”奇 数 个 转JCXZ ( CX) = 0 CX为 零 转 ( 复 合 标 志 ) 条 件 转 移 指 令 表指 令 助 记 符 测 试 标 志 条 件 A和 B比 较 情 况JG ( SF OF) ZF=0 AB 有符号数JGE SF OF=0 A=BJL SF OF

53、=1 ABJLE ( SF OF) ZF=1 AB 无符号数JAE CF=0 A=BJB CF=1 AB JBE CF ZF=1 A=B 分 支 结 构 程 序 设 计 用 条 件 转 移 ( Jxxx) 指 令 实 现 程 序 的 双 分 支 ( 二 分 支 ) 。双 分 支 结 构 相 当 于 : if then 双 分 支 程 序 设 计 一 般 为 :先 行 有 产 生 条 件 的 语 句 ;利 用 条 件 转 移 指 令 , 测 试 并 判 断 条 件 ;根 据 条 件 成 立 与 否 , 决 定 程 序 走 向 ( 转 /不 转 ) 。 多 ( 2) 分 支 程 序 是 把 多 分

54、 支 结 构 , 分 解 成 多 个 双 分 支 结构 。 分 解 方 法 有 : 逻 辑 分 解 法 和 地 址 跳 转 表 法 。注 意 : 条 件 转 移 指 令 中 的 转 向 标 号 超 出 了 字 节 值 ( -128127)范 围 , 为 转 移 跨 距 超 值 错 误 。 二 分 支 程 序 设 计 例【 例 3.3】 把 有 符 号 字 节 数 X和 Y 的 较 大 者 送 入 变 量 Z。 ; 字 节 变 量 X和 Y比 较 程 序 段 :MOV AL, X ; AL=XCMP AL, Y ; AL( 即 X) 和 Y比 较JGE YG ; X=Y, 转 YGMOV AL,

55、 Y ; X3, 转 重 新 输 入 一 个 字 符js P1 ; 0, 转 重 新 输 入 一 个 字 符mov ah, 0 shl ax, 1 ; ( ax) * 2 mov bx, axjmp tabl bx ; 转 到 对 应 的 标 号 地 址; 4个 分 支 程 序 段 :ent-a: ( 输 出 A : 10085 !字 符 串 ) jmp quitent-b: ( 输 出 B : 8470 !字 符 串 )jmp quitent-c: ( 输 出 C : 6960 !字 符 串 ) jmp quitent-d: ( 输 出 D : 590 !字 符 串 )quit: MOV A

56、X, 4C00H INT 21H ; 返 回 DOS 循 环 结 构 程 序 设 计 循 环 结 构 程 序 是 一 段 重 复 执 行 的 程 序 段 ( 循 环 体 ) , 必 须 在 有 限 次 的重 复 执 行 后 结 束 。 循 环 程 序 的 基 本 结 构 : 循 环 初 始 化 循 环 体修 改 循 环 控 制 变 量 no 判 断 循 环 结 束 ?yes 判 断 循 环 结 束 的 控 制 指 令 :Jxxx 条 件 转 移 指 令 LOOP 循 环 指 令 循 环 控 制 指 令 循 环 指 令 LOOP格 式 : LOOP 操 作 数 : 为 段 内 短 转 移 , 即

57、 标 号 偏 移 址 的 位 移 量 在 ( -128,+127) 区 间 。操 作 : ( 1) (cx) 1cx。 ( 2) 测 试 CX是 否 为 0, 如 CX不 为 0, 转 到 标 号 处 ,即 IP = IP + ; 如 CX为 0, 执 行 下 一 条 指 令 。标 志 位 : 不 改 变 。 循 环 程 序 设 计 例 1【 例 3.6】 把 存 储 器 中 N个 字 节 数 据 “ 搬 家 ” 。 ; “ 搬 家 ” 程 序 段 :MOV AX, DATAMOV DS, AX ; 设 置 DS数 据 段 基 址MOV CX, N ; CX取 数 据 个 数 NLEA SI,

58、 BLKSLEA DI, BLKDLOP1: MOV AL, SI ; 取 一 个 数MOV DI, AL ; “ 搬 ” 一 个 数INC SI INC DI ; SI和 DI分 别 做 +1修 改LOOP LOP1 ; CX-1, 重 复 “ 搬 ” 数 , 直 至 CX=0结 束 循 环 程 序 设 计 例 2【 例 3.8】 计 算 SUM=a1b1+ a2b2 + a10b10 。; 内 存 数 据 定 义a db 89, -5, 56, 80 ; 10个 数 据b db 18, 29, -12, 38 ; 10个 数 据sum dw ? ; 计 算 SUM程 序 段 :mov dx

59、, 0mov si, 0 mov cx,10lop1: mov al, asiimul bsiadd dx, axinc siloop lop1mov sum, dx 循 环 程 序 设 计 例 3【 例 3.11】 ARR数 据 区 有 N个 有 符 号 字 节 数 ( ARR数组 ) 。 求 ARR数 组 的 最 大 值 、 最 小 值 、 数 组 元 素 之 和 ,以 及 数 据 平 均 值 。 arr db 89, -90, 56, 88 n equ $-arr ; n=数 据 个 数 max db -128 ; 预 先 放 最 小 值 -128 min db 127 ; 预 先 放

60、最 大 值 127 sum dw 0 ; 预 先 放 求 和 初 值 0 ping db ? ; 平 均 值; 程 序 段lea bx, arrmov cx, npp1: mov al, bxc wadd sum, axcmp max, aljge p1mov max, al p1: cmp min,aljle p2mov min,alp2: inc bx loop pp1mov ax, summov cl, nidiv cl ; al=平 均 值mov ping, al 子 程 序 程 序 设 计 子 程 序 是 具 有 一 定 功 能 的 一 组 指 令 集 合 , 可 以 被 多 次 调

61、 用 。 8086/8088子 程 序 结 构 定 义 的 伪 指 令 : 定 义 子 程 序 伪 指 令 PROC 结 束 子 程 序 伪 指 令 ENDP 子 程 序 调 用 指 令 :CALL 子 程 序 返 回 指 令 :RET 子 程 序 ( 过 程 ) 定 义 伪 指 令过 程 定 义 伪 指 令 PROC格 式 : PROC NEAR/FAR 子 程 序 类 型 :NEAR 段 内 过 程 , FAR 段 间 过 程 。 过 程 结 束 伪 指 令 ENDP格 式 : ENDP PROC语 句 与 对 应 的 ENDP语 句 的 过 程 名 必 须 一 致 。 子 程 序 ( 过

62、 程 ) 调 用 和 返 回 指 令过 程 调 用 指 令 CALL格 式 : CALL 操 作 : 先 把 返 回 地 址 ( IP或 IP和 CS ) 压 入 堆 栈 , 再 转 向 被 调过 程 ( 子 程 序 ) 。过 程 返 回 指 令 RET 格 式 : RET操 作 : 从 堆 栈 中 弹 出 返 回 地 址 ( IP或 IP和 CS) 。 子 程 序 ( 过 程 ) 结 构 必 须 在 代 码 段 结 构 内 。 SEGMENT ; 段 开 始 ASSUME CALL ; 调 用 过 程 指 令 PROC ; 过 程 开 始 RET ; 过 程 返 回 指 令 ENDP ; 过

63、 程 结 束 ENDS ; 段 结 束子 程 序 的 结 构 PROC ; 过 程 开 始 保 护 现 场 ( “ 现 场 ” 用 PUSH指 令 入 栈 保 护 ) . 子 程 序 功 能 程 序 . 恢 复 现 场 ( “ 现 场 ” 用 POP指 令 出 栈 恢 复 ) RET ; 过 程 返 回 指 令 ENDP ; 过 程 结 束子 程 序 的 处 理 环 节 主 、 子 程 序 之 间 的 参 数 传 递 寄 存 器 传 递 参 数用 寄 存 器 传 递 子 程 序 入 /出 口 参 数 的 方 法 最 通 用 , 但 参 数 个 数 有 限 。 特别 是 函 数 式 子 程 序

64、, 常 用 寄 存 器 传 递 自 变 量 和 函 数 值 。 堆 栈 传 递 参 数 表把 传 递 的 入 口 参 数 依 次 压 入 堆 栈 , 然 后 调 用 子 程 序 ; 子 程 序 取 堆 栈 中 的参 数 表 使 用 ; 返 回 时 使 用 RET n指 令 , 弹 出 堆 栈 中 的 入 口 参 数 表 ( n为参 数 表 的 字 节 数 ) 。 数 据 缓 冲 区 传 递 参 数用 数 据 缓 冲 区 传 递 子 程 序 入 /出 口 参 数 的 方 法 , 在 参 数 个 数 较 多 , 并 且 数 据 是 连 续 时 使 用 。 子 程 序 设 计 例【 例 3.14】

65、求 一 个 无 符 号 字 变 量 的 10#/ 2 # / 16 #数 位 之 和 。num dw ? sum dw ?; 主 程 序 : mov ax, num ; ax 取 数 n mov cx, 10 ; cx 取 数 制 ( 10/2/16)(或 mov cx, 2)(或 mov cx, 16) call subr ; ax,cx 入 口 参 数 , bx 出 口 参 数 mov sum, bx ; 子 程 序 subrsubr procpush dx ; 保 护 现 场mov bx, 0 ; 数 位 和 初 值 0bx lop: cmp ax, 0 jz ok ; ax=0, 结

66、束 求 数 位 和 mov dx, 0 div cx ; 除 以 10/2/16 add bx, dx jmp lop ok: pop dx ; 恢 复 现 场retsubr endp 系 统 功 能 调 用 软 件 中 断 指 令格 式 : INT n ; n为 中 断 类 型 号 0255( 00FFH) 系 统 功 能 调 用微 机 的 BIOS和 DOS提 供 了 一 批 系 统 功 能 中 断 子 程 序 ( 附录 B和 附 录 C) , 让 用 户 用 INT n 指 令 调 用 。 常 用 的 I/O中 断 指 令 :INT 10H CRD输 出 中 断 指 令INT 16H 键 盘 输 入 中 断 指 令INT 21H DOS功 能 调 用 中 断 指 令 常 用 的 DOS功 能 调 用 返 回 DOS 的 功 能 调 用 :MOV AX, 4C00H ; AH=4CH, AL=0INT 21H 字 符 I/O 的 DOS功 能 调 用 :AH=01H 读 一 个 字 符 到 AL中 , 并 回 显 AH=08H 读 一 个 字 符 到 AL中 , 不 回 显 AH=

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