RealView Compilation Tools Developer Guide - ARM Information ...
RealView Compilation Tools Developer Guide - ARM Information ...
RealView Compilation Tools Developer Guide - ARM Information ...
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
混 合 使 用 C、 C++ 和 汇 编 语 言<br />
5.1.4 用 法<br />
• 可 以 更 改 处 理 器 模 式 、 改 变 ATPCS 寄 存 器 fp、 sl 和 sb, 或 者 改 变 协 处 理<br />
器 状 态 , 但 编 译 程 序 不 会 意 识 到 所 做 的 更 改 。 如 果 更 改 处 理 器 模 式 , 则 直<br />
到 改 回 到 原 模 式 时 才 能 使 用 C 或 C++ 表 达 式 , 因 为 编 译 程 序 将 破 坏 用 于<br />
更 改 后 处 理 器 模 式 的 寄 存 器 。<br />
类 似 地 , 如 果 通 过 执 行 浮 点 指 令 更 改 了 浮 点 协 处 理 器 状 态 , 则 直 到 恢 复 原<br />
状 态 后 , 才 能 使 用 浮 点 表 达 式 。<br />
以 下 几 点 适 用 于 内 联 汇 编 语 言 :<br />
• 在 汇 编 语 言 中 , 逗 号 用 作 分 隔 符 , 因 此 使 用 逗 号 操 作 符 的 C 表 达 式 必 须 包<br />
含 在 括 号 中 以 区 分 它 们 :<br />
__asm {ADD x, y, (f(), z)}<br />
• 在 内 联 汇 编 程 序 中 , 寄 存 器 名 视 为 C 或 C++ 变 量 。 它 们 不 一 定 与 相 同 名<br />
称 的 物 理 寄 存 器 相 关 ( 请 参 阅 第 5-5 页 的 虚 拟 和 物 理 寄 存 器 )。 如 果 未 将<br />
寄 存 器 声 明 为 C 或 C++ 变 量 , 则 编 译 程 序 会 发 出 警 告 , 提 醒 您 将 它 声 明<br />
为 变 量 。<br />
• 在 内 联 汇 编 程 序 中 不 要 保 存 和 恢 复 寄 存 器 。 编 译 程 序 为 您 完 成 此 操 作 。 此<br />
外 , 内 联 汇 编 程 序 不 提 供 对 物 理 寄 存 器 的 直 接 访 问 ( 请 参 阅 第 5-5 页 的 虚<br />
拟 和 物 理 寄 存 器 )。 对 除 CPSR 和 SPSR 之 外 的 寄 存 器 , 如 果 在 读 取 其 之<br />
前 没 有 写 入 , 将 发 出 错 误 信 息 。 例 如 :<br />
int f(int x)<br />
{<br />
__asm<br />
{<br />
STMFD sp!, {r0}<br />
ADD r0, x, 1<br />
EOR x, r0, x<br />
LDMFD sp!, {r0}<br />
}<br />
return x;<br />
}<br />
该 函 数 必 须 写 为 下 列 形 式 :<br />
int f(int x)<br />
{<br />
int r0;<br />
__asm<br />
{<br />
ADD r0, x, 1<br />
// save r0 - illegal: read before write<br />
// restore r0 - not needed.<br />
5-8 © 2002、 2003 <strong>ARM</strong> Limited 版 权 所 有 。 保 留 所 有 权 利 。 <strong>ARM</strong> DUI 0203BSC