23.10.2014 Views

RealView - ARM Information Center

RealView - ARM Information Center

RealView - ARM Information Center

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

编 写 <strong>ARM</strong> 和 Thumb 汇 编 语 言<br />

2.5.3 在 <strong>ARM</strong> 状 态 中 使 用 条 件 执 行<br />

可 以 利 用 <strong>ARM</strong> 指 令 的 条 件 执 行 , 来 减 少 代 码 中 跳 转 指 令 的 数 目 。 这 样 就 改 进 了<br />

代 码 密 度 。<br />

跳 转 指 令 在 处 理 器 周 期 中 也 是 很 耗 时 的 。 在 跳 转 预 测 硬 件 的 <strong>ARM</strong> 处 理 器 上 , 每<br />

次 获 得 一 个 跳 转 时 , 一 般 需 要 三 个 处 理 器 周 期 来 重 填 处 理 器 流 水 线 。<br />

有 些 <strong>ARM</strong> 处 理 器 , 如 <strong>ARM</strong>10 和 Strong<strong>ARM</strong> ® , 带 有 跳 转 预 测 硬 件 。 在 使 用 这<br />

些 处 理 器 的 系 统 中 , 只 有 当 存 在 错 误 预 测 时 才 需 要 刷 新 和 重 填 流 水 线 。<br />

2.5.4 使 用 条 件 执 行 的 示 例<br />

此 例 使 用 Euclid 的 最 大 公 因 子 (gcd) 算 法 的 两 种 实 现 方 法 。 它 说 明 了 如 何 能 使 用<br />

条 件 执 行 来 改 进 代 码 密 度 和 执 行 速 度 。 有 关 执 行 速 度 的 详 细 分 析 只 适 用 于<br />

<strong>ARM</strong>7 处 理 器 。 代 码 密 度 计 算 适 用 于 所 有 <strong>ARM</strong> 处 理 器 。<br />

在 C 语 言 中 , 该 算 法 可 以 表 示 如 下 :<br />

int gcd(int a, int b)<br />

{<br />

while (a != b)<br />

{<br />

if (a > b)<br />

a = a - b;<br />

else<br />

b = b - a;<br />

}<br />

return a;<br />

}<br />

采 用 下 列 代 码 , 可 以 只 用 带 条 件 执 行 的 跳 转 来 实 现 gcd 函 数 :<br />

gcd CMP r0, r1<br />

BEQ end<br />

BLT less<br />

SUB r0, r0, r1<br />

B gcd<br />

less<br />

SUB r1, r1, r0<br />

B gcd<br />

end<br />

2-24 © 2002、 2003 <strong>ARM</strong> Limited 版 权 所 有 。 保 留 所 有 权 利 。 <strong>ARM</strong> DUI 0204BSC

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!