01.12.2014 Views

RealView Compilation Tools Developer Guide - ARM Information ...

RealView Compilation Tools Developer Guide - ARM Information ...

RealView Compilation Tools Developer Guide - ARM Information ...

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

混 合 使 用 C、C++ 和 汇 编 语 言<br />

如 果 未 指 定 任 何 列 表 , 则 :<br />

• r0-r3 用 作 输 入 参 数 ;<br />

• r0 用 于 输 出 值 ;<br />

• r12 和 r14 被 破 坏 。<br />

寄 存 器 列 表 的 语 法 与 LDM 和 STM 寄 存 器 列 表 相 同 。 如 果 修 改 了 NZCV 标 志 , 则 必<br />

须 在 破 坏 寄 存 器 列 表 中 指 定 PSR。<br />

5.1.3 内 联 汇 编 程 序 和 armasm 的 不 同 点<br />

内 联 汇 编 程 序 接 受 的 汇 编 语 言 和 <strong>ARM</strong> 汇 编 程 序 接 受 的 汇 编 语 言 之 间 有 大 量 不<br />

同 之 处 和 限 制 。 对 于 内 联 汇 编 程 序 :<br />

• 不 能 用 点 表 示 法 (.) 或 {PC} 获 取 当 前 指 令 的 地 址 。<br />

• 不 支 持 LDR Rn, = 表 达 式 伪 指 令 。 请 使 用 MOV Rn, 表 达 式 代 替 ( 它 可 以 从 文 字<br />

池 装 载 )。<br />

• 不 支 持 标 号 表 达 式 。<br />

• 不 支 持 ADR 和 ADRL 伪 指 令 。<br />

• 不 能 使 用 & 操 作 符 表 示 十 六 进 制 常 数 。 应 使 用 0x 前 缀 来 代 替 。 例 如 :<br />

__asm {AND x, y, 0xF00}<br />

• 用 于 指 定 8 位 常 数 实 际 循 环 的 表 示 法 在 内 联 汇 编 语 言 中 不 能 使 用 。 这 意 味<br />

着 在 使 用 8 位 移 位 常 数 时 , 如 果 更 新 了 NZCV 标 志 ,C 标 志 必 须 视 为 已 破<br />

坏 的 。<br />

• 必 须 小 心 使 用 寄 存 器 ( 如 r0-r3、 ip、 lr) 和 CPSR 中 的 NZCV 标 志 。 如 果<br />

使 用 C 或 C++ 表 达 式 , 这 些 寄 存 器 可 能 被 用 作 临 时 寄 存 器 , 并 且 NZCV<br />

标 志 可 能 在 计 算 表 达 式 时 被 编 译 程 序 破 坏 。 请 参 阅 第 5-5 页 的 虚 拟 和 物 理<br />

寄 存 器 。<br />

• 没 有 为 PC (r15)、lr (r14) 和 sp (r13) 寄 存 器 创 建 虚 拟 寄 存 器 , 而 且 不 能 在 内<br />

联 汇 编 代 码 中 读 取 或 直 接 修 改 它 们 。 有 关 虚 拟 寄 存 器 的 详 细 信 息 , 请 参 阅<br />

第 5-5 页 的 虚 拟 和 物 理 寄 存 器 。<br />

• 您 不 能 写 入 PC。 不 支 持 BX、 BXJ、 BLX 和 BKPT 指 令 。<br />

• 不 得 修 改 栈 。 这 是 没 有 必 要 的 , 因 为 编 译 程 序 根 据 需 要 自 动 将 任 何 工 作 寄<br />

存 器 压 栈 和 恢 复 。 不 允 许 明 确 压 栈 和 恢 复 工 作 寄 存 器 。<br />

<strong>ARM</strong> DUI 0203BSC © 2002、 2003 <strong>ARM</strong> Limited 版 权 所 有 。 保 留 所 有 权 利 。 5-7

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

Saved successfully!

Ooh no, something went wrong!