Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
命 令 参 考<br />
7.7.9 EXTERN<br />
EXTERN 命 令 为 汇 编 程 序 提 供 一 个 未 在 当 前 汇 编 代 码 中 定 义 的 名 称 。<br />
EXTERN 与 IMPORT 非 常 类 似 , 只 是 如 果 在 当 前 汇 编 代 码 中 未 找 到 其 引 用 , 则 不 导 入<br />
该 名 称 ( 请 参 阅 第 7-65 页 的 IMPORT 和 第 7-61 页 的 EXPORT 或 GLOBAL)。<br />
语 法<br />
EXTERN symbol{[WEAK]}<br />
其 中 :<br />
symbol 是 在 一 个 单 独 汇 编 的 源 文 件 、 目 标 文 件 或 库 中 定 义 的 一 个 符 号 名 。<br />
符 号 名 是 区 分 大 小 写 的 。<br />
[WEAK]<br />
用 法<br />
如 果 符 号 未 在 其 它 文 件 中 定 义 , 防 止 链 接 程 序 产 生 错 误 信 息 。 也 防<br />
止 链 接 程 序 搜 索 还 未 包 括 的 库 。<br />
在 链 接 时 , 将 名 称 确 定 为 在 一 个 单 独 的 目 标 文 件 中 定 义 的 符 号 。 该 符 号 被 当 作 一<br />
个 程 序 地 址 。 如 果 未 指 定 [WEAK], 那 么 如 果 在 链 接 时 没 有 找 到 相 应 的 符 号 , 则 链<br />
接 程 序 产 生 一 个 错 误 。<br />
如 果 指 定 了 [WEAK] 且 在 链 接 时 没 有 找 到 相 应 的 符 号 :<br />
• 如 果 该 引 用 是 一 个 B 或 BL 指 令 的 目 标 , 则 将 下 一 指 令 的 地 址 作 为 该 符 号 的<br />
值 。 这 样 就 有 效 地 使 B 或 BL 指 令 变 成 一 个 NOP。<br />
• 否 则 , 该 符 号 的 值 取 为 零 。<br />
示 例<br />
此 例 测 试 检 查 是 否 已 链 接 C++ 库 , 并 根 据 结 果 执 行 条 件 跳 转 。<br />
AREA Example, CODE, READONLY<br />
EXTERN __CPP_INITIALIZE[WEAK] ; If C++ library linked, gets the address of<br />
; __CPP_INITIALIZE function.<br />
LDR r0,=__CPP_INITIALIZE ; If not linked, address is zeroed.<br />
CMP r0,#0 ; Test if zero.<br />
BEQ nocplusplus ; Branch on the result.<br />
<strong>ARM</strong> DUI 0204BSC © 2002、 2003 <strong>ARM</strong> Limited 版 权 所 有 。 保 留 所 有 权 利 。 7-63