Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
编 写 <strong>ARM</strong> 和 Thumb 汇 编 语 言<br />
2.10.6 使 用 基 于 寄 存 器 的 MAP 和 FIELD 命 令<br />
基 于 寄 存 器 的 MAP 和 FIELD 命 令 定 义 基 于 寄 存 器 的 符 号 。 基 于 寄 存 器 的 符 号 的 主<br />
要 用 途 是 :<br />
• 定 义 与 C 语 言 结 构 类 似 的 结 构 ;<br />
• 更 快 地 访 问 不 是 由 基 于 寄 存 器 的 MAP 和 FIELD 命 令 描 述 的 存 储 器 段 。<br />
定 义 基 于 寄 存 器 的 符 号<br />
基 于 寄 存 器 的 符 号 可 以 非 常 有 用 , 但 使 用 时 必 须 小 心 。 作 为 通 则 , 请 仅 按 下 列 方<br />
式 使 用 它 们 :<br />
• 作 为 一 个 装 载 或 存 储 指 令 的 装 载 或 存 储 地 址 。 如 果 Location 是 基 于 寄 存 器<br />
的 符 号 ( 基 于 寄 存 器 Rb 并 带 有 数 字 偏 移 量 ), 汇 编 程 序 会 自 动 进 行 切 换 ,<br />
例 如 将 LDR Rn,Location 转 换 为 LDR Rn,[Rb,#offset]。<br />
在 ADR 或 ADRL 指 令 中 ,ADR Rn,Location 将 由 汇 编 程 序 转 换 为 ADD<br />
Rn,Rb,#offset 。<br />
• 将 一 个 常 规 的 数 字 表 达 式 加 到 一 个 基 于 寄 存 器 的 符 号 上 , 以 获 得 另 一 个 基<br />
于 寄 存 器 的 符 号 。<br />
• 从 一 个 基 于 寄 存 器 的 符 号 减 去 一 个 常 规 的 数 字 表 达 式 , 以 获 得 另 一 个 基 于<br />
寄 存 器 的 符 号 。<br />
• 从 一 个 基 于 寄 存 器 的 符 号 减 去 另 一 个 基 于 寄 存 器 的 符 号 , 以 获 得 一 个 常 规<br />
的 数 字 表 达 式 。 除 非 两 个 基 于 寄 存 器 的 符 号 是 基 于 同 一 个 寄 存 器 的 , 否 则<br />
不 能 执 行 这 种 操 作 。 不 然 的 话 , 将 得 到 两 个 寄 存 器 和 一 个 数 字 值 的 组 合 。<br />
这 样 会 导 致 一 个 汇 编 程 序 错 误 。<br />
• 作 为 :BASE: 或 :INDEX: 运 算 符 的 操 作 数 。 这 些 运 算 符 主 要 用 于 宏 中 。<br />
其 它 用 法 通 常 会 导 致 汇 编 程 序 产 生 出 错 消 息 。 例 如 , 如 果 编 写 了 LDR Rn,=Location<br />
指 令 , 其 中 Location 是 基 于 寄 存 器 的 , 则 意 味 着 让 汇 编 程 序 从 一 个 存 储 器 位 置 装<br />
载 Rn, 该 位 置 总 是 含 有 寄 存 器 Rb 的 当 前 值 加 上 其 中 的 偏 移 量 。 汇 编 程 序 不 能 执<br />
行 这 条 指 令 , 因 为 不 存 在 这 样 的 存 储 器 位 置 。<br />
类 似 地 , 如 果 编 写 了 ADD Rd,Rn,#expression 指 令 , 其 中 expression 是 基 于 寄 存 器<br />
的 , 则 该 指 令 请 求 执 行 一 条 ADD 指 令 , 将 expression 的 两 个 基 址 寄 存 器 及 其 对 Rn<br />
的 偏 移 量 相 加 。 再 一 次 , 汇 编 程 序 不 能 执 行 这 一 指 令 。 您 必 须 使 用 两 个 ADD 指 令<br />
来 执 行 这 两 个 加 法 。<br />
2-60 © 2002、 2003 <strong>ARM</strong> Limited 版 权 所 有 。 保 留 所 有 权 利 。 <strong>ARM</strong> DUI 0204BSC