1、【 数 据 传 输 指 令 】 一、通用数据传送指令 1 、传送指令 MOV (move) 指令的汇编格式MOV DST,SRC 指令的基本功能(DST)(OPR2) 指令支持的寻址方式一个操作数必须在寄存器中另一个操作数可以在寄存器或存储器中。 指令对标志位的影戏不影响标志位。 指令的特殊要求不允许使用段寄存器。 二、累加器专用传送指令 4 、输入指令 IN (input) 输出指令 OUT (output) 指令的汇编格式IN ac,port port0FFH OUT port,ac port0FFH 指令的基本功能对8086 及其后继机型的微处理机所有I/O 端口与CPU 之间的通信都由
2、输入输出指令IN 和OUT 来完成。IN 指令将信息从I/O 输入到CPU OUT 指令将信息从CPU 输出到I/O端口因此IN 和OUT 指令都要指出I/O 端口地址。 IN ac,port port0FFH (AL)0FFH (DX) 1 时 c n t 必 须 放 入 C L寄 存 器 中 。 指 令 对 标 志 位 的 影 响 C F = 移 入 的 数 值 O F = 1 当 c n t = 1 时 移 动 后 最 高 位 的 值 发 生 变 化 。 O F = 0 当 c n t = 1 时 移 动 时 最 高 位 的 值 未 发 生 变 化 。 S F 、Z F 、P F 根 据
3、 移 动 后 的 结 果 设 置 。 3 5 、 带 进 位 的 循 环 左 移 R C L ( r o t a t e l e f t t h r o u g h c a r r y ) 指 令 的 汇 编 格 式 R C L d s t , c n t 指 令 的 基 本 功 能 R C L 对 由 d s t 指 定 的 寄 存 器 或 存 储 器 操 作 数 连 同 进 位 标 志C F 左 循 环 移 动 m 所 指 定 的 次 数 每 左 移 一 次 把 操 作 数 的 最 高 位 移 入 C F 而C F 中 原 有 内 容 移 入 操 作 数 的 最 低 位 。 指 定 支 持
4、 的 寻 址 方 式 目 的 操 作 数 d s t 可 以 是 除 立 即 数 外 的 任 何 寻 址 方 式 。移 动次 数 或 位 数 c n t = 1 时 1 可 以 直 接 写 在 指 令 中 c n t 1 时 c n t 必 须 放 入 C L寄 存 器 中 。 指 令 对 标 志 位 的 影 响 C F = 移 入 的 数 值 。 O F = 1 当 c n t = 1 时 移 动 后 最 高 位 的 值 未 发 生 变 化 。 O F = 0 当 c n t = 1 时 移 动 后 最 高 位 的 值 发 生 变 化 。 S F 、Z F 、P F 标 志 位 不 受 影
5、响 。 3 6 、 带 进 位 的 循 环 右 移 R C R ( r o t a t e r i g h t t h r o u g h c a r r y ) 指 令 的 汇 编 格 式 R C R d s t c n t 指 令 的 基 本 功 能 R C R 对 由 d s t 指 定 的 寄 存 器 或 存 储 器 操 作 数 连 同 进 位 标 志C F 右 循 环 移 动 m 所 指 定 的 次 数 每 右 移 一 次 把 操 作 数 的 最 高 低 位 移 入 C F 而 C F 中 原 有 内 容 移 入 操 作 数 的 最 高 位 。 指 令 支 持 的 寻 址 方 式 目
6、 的 操 作 数 d s t 可 以 是 除 立 即 数 外 的 任 何 寻 址 方 式 。移 动次 数 或 位 数 c n t = 1 时 1 可 以 直 接 写 入 指 令 中 c n t 1 时 c n t 必 须 放 入 C L寄 存 器 中 。 指 令 对 标 志 位 的 影 响 C F = 移 入 的 数 值 。 O F = 1 当 c n t = 1 时 操 作 数 最 高 位 的 值 未 发 生 变 化 。 O F = 0 当 c n t = 1 时 操 作 数 最 高 位 的 值 发 生 变 化 。 S F 、Z F 、P F 标 志 位 不 受 影 响 。 【 串 处 理
7、指 令 】 一 、 设 置 方 向 标 志 指 令 3 7 、D F 置 零 C L D ( c l e a r d i r e c t i o n f l a g ) D F 置 一 S T D ( s e t d i r e c t i o n f l a g ) 指 令 的 汇 编 格 式 C L D S T D 指 令 的 基 本 功 能 C L D D F = 0 S T D D F = 1 二 、 串 处 理 指 令 3 8 、 串 传 送 M O V S B / M O V S W ( m o v e s t r i n g b y t e / w o r d ) 指 令 的 汇
8、 编 格 式 M O V S B M O V S W 指 令 的 基 本 功 能 ( E S : D I ) - ( D S : S I ) ( S I ) - ( S I ) + / - 1 ( 字 节) 或+ / - 2 ( 字) ( D I ) - ( D I ) + / - 1 ( 字 节) 或+ / - 2 ( 字) 指 令 对 条 件 码 的 影 响 不 影 响 条 件 码 。 指 令 的 特 殊 要 求 源 串 必 须 在 数 据 段 中 目 的 串 必 须 在 附 加 段 中 串 处 理 指 令 隐含 的 寻 址 方 式 是 S I 和 D I 寄 存 器 的 间 接 寻 址
9、方 式 。源 串 允 许 使 用 段 跨 越 前 缀 来 指定 段 。 3 9 、 存 串 S T O S B / S T O S W ( s t r o e f r o m s t r i n g b y t e / w o r d ) 指 令 的 汇 编 格 式 S T O S B S T O S W 指 令 的 基 本 功 能 ( E S : D I ) - ( A L ) 或( A X ) ( D I ) - ( D I ) + / - 1 ( 字 节) 或+ / - 2 ( 字) 指 令 对 条 件 码 的 影 响 不 影 响 条 件 码 。 指 令 的 特 殊 要 求 源 串 必
10、须 在 数 据 段 中 目 的 串 必 须 在 附 加 段 中 串 处 理 指 令 隐含 的 寻 址 方 式 是 S I 和 D I 寄 存 器 的 间 接 寻 址 方 式 。源 串 允 许 使 用 段 跨 越 前 缀 来 指定 段 。 4 0 、 取 串 L O D S B / L O D S W ( l o a d f r o m s t r i n g b y t e / w o r d ) 指 令 的 汇 编 格 式 L O D S B L O D S W 指 令 的 基 本 功 能 ( A L ) 或( A X ) - ( D S : S I ) ( S I ) - ( S I )
11、+ / - 1 ( 字 节) 或+ / - 2 ( 字) 指 令 对 条 件 码 的 影 响 不 影 响 条 件 码 。 指 令 的 特 殊 要 求 源 串 必 须 在 数 据 段 中 目 的 串 必 须 在 附 加 段 中 串 处 理 指 令 隐含 的 寻 址 方 式 是 S I 和 D I 寄 存 器 的 间 接 寻 址 方 式 。源 串 允 许 使 用 段 跨 越 前 缀 来 指定 段 。 4 1 、 串 比 较 C M P S B / C M P S W ( c o m p a r e s t r i n g b y t e / w o r d ) 指 令 的 汇 编 格 式 C M
12、P S B C M P S W 指 令 的 基 本 功 能 ( D S : S I ) - ( E S : D I ) 根 据 比 较 结 果 设 置 条 件 码 ( S I ) - ( S I ) + / - 1 ( 字 节) 或+ / - 2 ( 字) ( D I ) - ( D I ) + / - 1 ( 字 节) 或+ / - 2 ( 字) 指 令 对 条 件 码 的 影 响 S F = 1 减 法 结 果 为 负 数 符 号 位 为 1 S F = 0 减 法 结 果 为 正 数 符 号 位 为 0 Z F = 1 减 法 结 果 为 零 Z F = 0 减 法 结 果 不 为 零
13、C F = 1 二 进 制 减 法 运 算 中 最 高 有 效 位 向 高 位 有 借 位 被 减 数 小 于 减 数 不 够 减 的情 况 C F = 0 二 进 制 减 法 运 算 中 最 高 有 效 为 向 高 位 无 借 位 被 减 数 = 减 数 够 减 的 情 况 O F = 1 两 数 符 号 相 反 正 数- 负 数 或 负 数- 正 数 而 结 果 符 号 与 减 数 相 同 。 O F = 0 同 符 号 数 相 减 时 或 不 同 符 号 数 相 减 其 结 果 符 号 与 减 数 不 同 。 4 2 、 串 扫 描 S C A S B / S C A S W ( s c
14、 a n s t r i n g b y t e / w o r d ) 指 令 的 格 式 S C A S B S C A S W 指 令 的 基 本 功 能 ( A L ) - ( E S : D I ) 或( A X ) - ( E S : D I ) 根 据 扫 描 比 较 的 结 果 设 置 条件 码 。 ( D I ) - ( D I ) + / - 1 ( 字 节) 或+ / - 2 ( 字) 指 令 对 条 件 码 的 影 响 S F = 1 结 果 为 负 数 符 号 位 为 1 S F = 0 结 果 为 正 数 符 号 位 为 0 Z F = 1 结 果 为 零 Z F
15、= 0 结 果 不 为 零 C F = 1 二 进 制 减 法 运 算 中 最 高 有 效 位 向 高 位 有 借 位 被 减 数 小 于 减 数 不 够 减 的情 况 C F = 0 二 进 制 减 法 运 算 中 最 高 有 效 为 向 高 位 无 借 位 被 减 数 = 减 数 够 减 的 情 况 O F = 1 两 数 符 号 相 反 正 数- 负 数 或 负 数- 正 数 而 结 果 符 号 与 减 数 相 同 。 O F = 0 同 符 号 数 相 减 时 或 不 同 符 号 数 相 减 其 结 果 符 号 与 减 数 不 同 。 三 、 串 重 复 前 缀 4 3 、 重 复 执
16、 行 串 R E P 指 令 的 汇 编 格 式 R E P ( C X ) = 重 复 次 数 指 令 的 基 本 功 能 ( C X ) = 0 时 串 指 令 执 行 完 毕 否 则 执 行 ( C X ) ( C X ) 1 执 行 串 指 令 M O V S 或 S T O S 重 复 执 行 4 4 、 相 等/ 为 零 时 重 复 执 行 串 指 令 R E P E / R E P Z 指 令 的 汇 编 格 式 R E P E / R E P Z ( C X ) = 比 较/ 扫 描 的 次 数 指 令 的 基 本 功 能 ( C X ) = 0 或 Z F = 0 时 结 束
17、 执 行 串 指 令 否 则 继 续 ( C X ) ( C X ) 1 执 行 串 指 令 C M P S 或 S C A S 重 复 执 行 4 5 、 不 等/ 不 为 零 时 重 复 执 行 串 指 令 R E P N E / P E P N Z 指 令 的 汇 编 格 式 R E P N E / P E P N Z ( C X ) = 比 较/ 扫 描 的 次 数 指 令 的 基 本 功 能 ( C X ) = 0 或 Z F = 1 结 束 执 行 串 指 令 否 则 继 续 ( C X ) ( C X ) 1 执 行 串 指 令 C M P S 或 S C A S 重 复 执 行
18、 【 控 制 转 移 指 令 】 一 、 无 条 件 转 移 指 令 4 6 、 短 转 移 J M P S H O R T l a b e l ( s h o r t j u m p ) 指 令 的 汇 编 格 式 J M P S H O R T l a b e l 指 令 的 基 本 功 能 ( I P ) - 当 前( I P ) + 8 位 位 移 量 8 位 位 移 量 是 汇 编 程 序 在 汇 编 源程 序 时 根 据 目 标 地 址 和 当 前 I P 之 间 的 距 离 自 动 生 成 的 。 指 令 对 条 件 码 的 影 响 对 标 志 位 无 影 响 。 4 7 、 近
19、 转 移 J M P N E A R P T R l a b e l ( n e a r j u m p ) 指 令 的 汇 编 格 式 直 接 转 移 J M P l a b e l ( d i r e c t j u m p ) 寄 存 器 间 接 转 移 J M P r e g ( r e g i s t e r i n d i r e c t j u m p ) 存 储 器 间 接 转 移 J M P W O R D P T R O P R ( m e m o r y i n d i r e c t j u m p ) 指 令 的 基 本 功 能 J M P l a b e l ( I
20、 P ) - O F F S E T l a b e l = ( I P ) 当 前 1 6 位 位 移 量 J M P r e g ( I P ) - ( r e g ) J M P W O R D P T R O P R ( I P ) - ( P A + 1 , P A ) 指 令 支 持 的 寻 址 方 式 指 令 中 的 转 向 地 址 可 以 是 直 接 寻 址 方 式 、寄 存 器 寻 址 方 式 、寄 存 器 间 接 寻 址 方 式 和 存 储 器 寻 址 方 式 。 指 令 对 条 件 码 的 影 响 对 标 志 位 无 影 响 。 4 8 、 远 转 移 J M P F A
21、 R P T R l a b e l ( f o r j u m p ) 指 令 的 汇 编 格 式 J M P F A R P T R l a b e l 指 令 的 基 本 功 能 ( I P ) - l a b e l 的 段 内 偏 移 地 址 ( C S ) - l a b e l 所 在 段 的 段 地 址 指 令 支 持 的 寻 址 方 式 远 转 移 的 目 的 地 址 可 以 使 用 除 立 即 寻 址 方 式 外 的 任 何 寻 址方 式 来 表 示 。 指 令 对 条 件 码 的 影 响 对 标 志 位 无 影 响 。 二 、 条 件 转 移 指 令 指 令 的 汇 编
22、格 式 及 功 能 根 据 条 件 码 的 值 转 移 4 9 、J Z ( J E ) O P R Z F = 1 Z F = 0 运 算 结 果 为 0 Z F就 置 1 5 0 、J N Z ( J N E ) O P R Z F = 0 5 1 、J S O P R S F = 1 S F = 0 二 进 制 最 高 位 是 什么, S F 就 是 什 么 如 最 高 位 为 1 则 S F = 1 5 2 、J N S O P R S F = 0 5 3 、J O O P R O F = 1 O F = 1 ( 两 个 负 数 相 加 变 成正 数 溢 出 5 4 、J N O O
23、P R O F = 0 5 5 、J P O P R P F = 1 P F = 0 ( 反 映 结 果 “ 1 ” 的个 数 奇 数 0 偶 数 个 1 5 6 、J N P O P R P F = 0 5 7 、J C O P R C F = 1 C F = 1 最 高 位 有 进 位 或 借位 就 置 1 5 8 、J N C O P R C F = 0 比 较 两 个 无 符 号 数 根 据 比 较 的 结 果 转 移 5 9 、J B ( J N A E , J C ) O P R C F = 1 被 减 数 小 于 减 数 则 转 移 6 0 、J N B ( J A E , J
24、N C ) O P R C F = 0 被 减 数 大 于 或 等 于 减 数 则 转 移 6 1 、J B E ( J N A ) O P R C F 或 Z F = 1 被 减 数 小 于 或 等 于 减 数 则 转 移 6 2 、J N B E ( J A ) O P R C F 或 Z F = 0 被 减 数 大 于 减 数 则 转 移 比 较 两 个 带 符 号 数 根 据 比 较 结 果 转 移 6 3 、J L / J N G E O P R S F 异 或 O F = 1 被 减 数 小 于 减 数 则 转 移 6 4 、J N L / J G E S F 异 或 O F =
25、0 被 减 数 不 小 于 减 数 则 转 移 6 5 、J L E / J N E ( S F 异 或 O F ) 与 Z F = 1 被 减 数 不 大 于 减 数 则 转 移 6 6 、J N L E / J G ( S F 异 或 O F ) 与 Z F = 0 被 减 数 大 于 减 数 则 转 移 根 据 C X 寄 存 器 的 值 转 移 6 7 、J C X Z ( C X ) = 0 C X 内 容 为 零 则 转 移 指 令 的 特 殊 要 求 所 有 条 件 转 移 指 令 都 是 短 转 移 指 令 转 移 的 目 标 地 址 必 须 在 当前 I P 地 址 的- 1
26、 2 8 至+ 1 2 7 字 节 范 围 之 内 因 此 条 件 转 移 指 令 是 2 字 节 指 令 。 三 、 循 环 指 令 6 8 、 循 环 L O O P ( l o o p ) 指 令 的 汇 编 格 式 L O O P l a b e l 指 令 的 基 本 功 能 ( C X ) ( C X ) 1 若 ( C X ) 0 则 ( I P ) ( I P ) 当 前 位 移量 否 则 循 环 结 束 。 指 令 的 特 殊 要 求 循 环 指 令 都 是 短 转 移 格 式 的 指 令 也 就 是 说 位 移 量 是 用 8位 带 符 号 数 来 表 示 的 转 向 地
27、址 在 相 对 于 当 前 I P 值 的 1 2 8 1 2 7 字 节 范 围之 内 。 6 9 、 为 零/ 相 等 时 循 环 L O O P Z / L O O P E ( l o o p w h i l e n o n z e r o o r e q u a l ) 指 令 的 汇 编 格 式 L O O P N Z / L O O P N E l a b e l 指 令 的 基 本 功 能 ( C X ) ( C X ) 1 若 Z F = 1 且 ( C X ) 0 则 ( I P ) ( I P ) 当 前 位 移 量 否 则 循 环结 束 。 指 令 的 特 殊 要 求 循
28、 环 指 令 都 是 短 转 移 格 式 的 指 令 也 就 是 说 位 移 量 是 用 8位 带 符 号 数 来 表 示 的 转 向 地 址 在 相 对 于 当 前 I P 值 的 1 2 8 1 2 7 字 节 范 围之 内 。 7 0 、 不 为 零/ 不 相 等 时 循 环 L O O P N Z / L O O P N E ( l o o p w h i l e n o n z e r o o r n o t e q u a l ) 指 令 的 汇 编 格 式 L O O P N Z / L O O P N E l a b e l 指 令 的 基 本 功 能 ( C X ) ( C
29、X ) 1 若 Z F = 0 且 ( C X ) 0 则 ( I P ) ( I P ) 当 前 位 移 量 否 则 循 环结 束 。 指 令 的 特 殊 要 求 循 环 指 令 都 是 短 转 移 格 式 的 指 令 也 就 是 说 位 移 量 是 用 8位 带 符 号 数 来 表 示 的 转 向 地 址 在 相 对 于 当 前 I P 值 的 1 2 8 1 2 7 字 节 范 围之 内 。 四 、 子 程 序 调 用 7 1 、 段 内 直 接 近 调 用 C A L L S U B R O U T 指 令 的 基 本 功 能 ( S P ) - ( S P ) - 2 ( ( S P
30、 ) + 1 , ( s p ) ) - ( I P ) ( I P ) - ( I P ) + 1 6 位 位 移 量 段 内 间 接 近 调 用 C A L L D E S T I N 指 令 的 基 本 功 能 ( S P ) - ( S P ) - 2 ( ( S P ) + 1 , ( S P ) ) - ( I P ) ( I P ) - ( E A ) 7 2 、 段 间 直 接 调 用 C A L L F A R P T R S U B R O U T 指 令 的 基 本 功 能 ( S P ) - ( S P ) - 2 , ( ( S P ) ) - ( C S ) 当 前
31、 ( S P ) - ( S P ) - 2 , ( ( S P ) ) - ( I P ) 当 前 ( I P ) - 偏 移 地 址( 在 指 令 的 第 2 、3 个 字 节) ( C S ) - 段 地 址( 在 指 令 的 第 4 、5 个 字 节) 五 、 返 回 指 令 7 3 、 段 内 返 回( 近 返 回) R E T 指 令 的 基 本 功 能 ( I P ) - ( ( S P ) + 1 , ( S P ) ) ( S P ) - ( S P ) + 2 段 间 返 回( 远 返 回) R E T 指 令 的 基 本 功 能 ( I P ) - ( ( S P ) )
32、 , ( S P ) - ( S P ) + 2 ( C S ) - ( ( S P ) ) , ( S P ) - ( S P ) + 2 带 立 即 数 返 回 R E T N 执 行 操 作 返 回 地 址 出 栈 操 作 同 段 内 或 段 间 返 回 修 改 堆 栈 指 针 ( S P ) ( S P ) N 六 、 中 断 及 中 断 返 回 指 令 7 4 、I N T n 中 断 指 令 i n t e r r u p t n 为 中 断 类 型 号 执 行 操 作 入 栈 保 存 F L A G S ( S P ) ( S P ) 2 ( ( S P ) ) ( F L A
33、G S ) 入 栈 保 存 返 回 地 址 ( S P ) ( S P ) 2 ( ( S P ) ) ( C S ) ( S P ) ( S P ) 2 ( ( S P ) ) ( I P ) 转 中 断 处 理 程 序 ( I P ) ( n 4 ) ( C S ) ( n 4 2 ) 7 5 、I R E T 中 断 返 回 指 令 r e t u r n f r o m i n t e r r u p t 执 行 操 作 返 回 地 址 出 栈 ( I P ) ( ( S P ) ) ( S P ) ( S P ) 2 ( C S ) ( ( S P ) ) ( S P ) ( S P
34、 ) 2 F L A G S 出 栈 ( F L A G S ) ( ( S P ) ) ( S P ) ( S P ) 2 7 6 、I N T O 溢 出 则 中 断 中 断 类 型 为 4 执 行 操 作 若 O F = 1 有 溢 出 则 入 栈 保 存 F L A G S ( S P ) ( S P ) 2 ( ( S P ) ) ( F L A G S ) 入 栈 保 存 返 回 地 址 ( S P ) ( S P ) 2 ( ( S P ) ) ( C S ) ( S P ) ( S P ) 2 ( ( S P ) ) ( I P ) 转 中 断 处 理 程 序 ( I P )
35、( 4 4 ) = ( 1 0 H ) ( C S ) ( 4 4 2 ) = ( 1 2 H HEL L O, WORL D 进阶汇编程序系列 Ed i t o r : a d mi n T i me : 2 0 0 4 - 3 - 2 1 1 2 : 4 9 Re a d : 9 7 8 5 Sc o r e : 8 Pr i n t Wr i t e r : L L UCT Ex c e r p t : 8 0 x 8 6 汇编小站 Pr e f a c e 感谢网友 l l u c t 为本站提供原创. . . . . . 适合初学者学习哦 Co n t e n t T I T L E
36、 * * * HEL L O, WORL D 进阶程序之选择分支 BY L L UCT * * * DAT A SEGMENT ; 定义数据段 MSG1 DB * * * WEL COME T O MY PROGRAM BY L L UCT * * * , $ ; 定义输出的第一个字符串信息, 字符串必须用 DB 定义, $ 为结束标志 MSG2 DB 1 : BASI C MESSAGE 2 : ADVANCED MESSAGE , $ ; 定义输出的字符串信息: 选择菜单 MSG3 DB PL EASE CHOOSE: , $ ; 定义输出的字符串信息: 选择前缀 MSG4 DB HEL
37、L O, WORL D! - , $ ; 定义输出的字符串信息: 分支 1 的信息 MSG5 DB T HI S I S MY F I RST ASM_ 8 6 P ROGRAM! - , $ ; 定义输出的字符串信息: 分支 2 的信息 ERRMSG DB CHOOSE ERROR! - _ - b , $ ; 定义输出的字符串信息: 选择错误信息 DAT A ENDS ; 数据段结尾 CODE SEGMENT ; 定义代码段 ASSUME CS: CODE ; 规定 CS 的内容 ASSUME DS: DAT A ; 规定 DS 的内容 ST ART : MOV AX, DAT A ; 程
38、序从 ST ART 开 始 MOV DS, AX ; DS 置初值, DATA 的段地址 CAL L ENT ER ; 调用显示回车换行子程序 L EA DX, MSG1 ; 输出第一个字符串的偏移地址 CAL L DI SPCHS ; 调用显示字符串子程序 CAL L ENT ER ; 调用显示回车换行子程序 CAL L ENT ER ; 这个. . . 同上啊 - L EA DX, MSG2 ; 输出第二个字符串的偏移地址 CAL L DI SPCHS ; 调用显示字符串子程序 AGAI N: CAL L ENT ER ; 定义 AGAI N 标号. 用于选择错误循环 L EA DX, M
39、SG3 ; 输出第三个字符串的偏移地址 CAL L DI SPCHS ; 调用显示字符串子程序 MOV AH, 0 1 H ; 调用 1 号功能: 从键盘输入一个字符并回显 I NT 2 1 H ; 完成输入回显 CMP AL , 1 ; 输入的字符和 1 相比较 J E BASI CP ; 如果相等, 转移到 BASI CP 标号( J E= J u mp i f Eq u a l ) CMP AL , 2 ; 输入的字符和 2 相比较 | | J E ADVANP ; 如果相等, 转移到 ADVANP 标号( J E= 如果相等就转移) J MP ERROR ; 否则就无条件转移到 ERR
40、OR 标号 EXI T : MOV AH, 4 CH ; 4 C 号功能调用: 终止当前程序并返回调用程序 I NT 2 1 H ; 返回 DOS BASI CP: CAL L ENT ER ; 什么, 还要解释啊. 晕- _ - ! ! ! L EA DX, MSG4 ; 输出第三个字符串的偏移地址 CAL L DI SPCHS ; 调用显示字符串子程序 CAL L ENT ER ; . . . . . . . . . . J MP EXI T ; 无条件转移到 EXI T 标号 ADVANP: CAL L ENT ER ; 5 5 5 5 5 5 5 5 L EA DX, MSG5 ; 解
41、释了四次, 应该懂了吧 CAL L DI SPCHS ; 调用显示字符串子程序 CAL L ENT ER ; 再问就死给你看 J MP EXI T ; 无条件转移到 EXI T 标号 ERROR: CAL L ENT ER L EA DX, ERRMSG ; 输出选择错误信息 CAL L DI SPCHS ; 调用显示字符串子程序 MOV DL , 0 7 H ; 输出 ASCI I 码的报警( 响铃) 控制符 BEL ( 0 7 H) CAL L DI SPCH ; 调用显示单个字符子程序 CAL L ENT ER J MP AGAI N DI SPCH PROC NEAR ; 显示单个字符
42、子程序, NEAR 说明子程序和主程序在同一个代码段中( 现无主程序调用) MOV AH, 0 2 H ; 2 号功能调用: 显示器输出字符 I NT 2 1 H ; 完成输出显示 RET ; 返回 DI SPCH ENDP ; 子程序结尾 ENT ER PROC NEAR ; 显示回车换行子程序 MOV DL , 0 DH ; 输出 ASCI I 码的回车控制符 CR( 0 DH) CAL L DI SPCH ; 调用显示单个字符子程序 MOV DL , 0 AH ; 输出 ASCI I 码的换行控制符 L F ( 0 AH) CAL L DI SPCH ; 调用显示单个字符子程序 RET
43、; 返回 ENT ER ENDP ; 子程序结尾 DI SPCHS PROC NEAR ; 显示字符串子程序, NEAR 说明子程序和主程序在同一个代码段中( 现无主程序调用) MOV AH, 0 9 H ; 9 号功能调用: 显示字符串 I NT 2 1 H ; 完成输出显示 RET DI SPCHS ENDP CODE ENDS ; 代码段结尾 END ST ART ; 结束汇编 ; 把以上代码复制到记事本等文本程序中, 并保存. ( 如 h e l l o c h . a s m) ; 编译: ma s m h e l l o c h . a s m ; 连接: l i n k h e
44、l l o c h . o b j ; 执行: h e l l o c h . e x e = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = t i t l e * * * h e l l o , wo r l d 进阶之字符串输入输出 b y l l u c t * * * d a t a s e g me n t ; 定义数据段 i n p u t d b 1 0 0 d u p ( ? ) ; 定义输入的字符串, 字符串必须
45、用 d b 定义, 长度为 1 0 0 个字节 ms g 1 d b He l l o , , $ ; 定义输出的前缀字符串信息, 字符串必须用 d b 定义, $ 为结束标志( 2 4 h ) ms g 2 d b , We l c o me t o h e r e ! , $ ; 定义输出的后缀字符串信息 h e a d ms g d b PL EASE I NPUT YOUR NAME: , $ ; 开始显示的字符串信息 d a t a e n d s ; 数据段结尾 c o d e s e g me n t ; 定义代码段 a s s u me c s : c o d e ; 规定 c
46、 s 的内容 a s s u me d s : d a t a ; 规定 d s 的内容 s t a r t : mo v a x , d a t a ; 程序从 s t a r t 开始 mo v d s , a x ; d s 置初值, d a t a 的段地址 mo v s i , 0 ; 变址寄存器置初值 0 c a l l e n t e r ; 调用显示回车换行子程序 l e a d x , h e a d ms g ; 输出开始显示的字符串的偏移地址 c a l l d i s p c h s ; 调用显示字符串子程序 r e p e a t : mo v a h , 0 1 h ; 定义 r e p e a t 标号, 用于循环输入单个字符. 调用 1 号功能: 从键盘输入一个字符并回显 i n t 2 1 h ; 完成输入回显 c mp a l , 0 d h ; 输入的字符和 CR( 回车) 比较 j e e x i t ; 如果等于回车就转移到 e x i t mo v i n p u t s i , a l ; 把 a l 的值传送到 i n p u t 的 s i 地址中( 好像是这样吧) i n c s i ; s i 加 1 j mp r e p e a t