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

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 />

用 嵌 入 式 汇 编 函 数 实 现 加 法 示 例<br />

示 例 5-4 显 示 使 用 嵌 入 式 汇 编 函 数 将 两 个 值 相 加 的 示 例 。 将 它 与 第 5-4 页 的 示 例<br />

5-1 中 的 内 联 汇 编 代 码 进 行 比 较 。<br />

示 例 5-4 用 嵌 入 式 汇 编 函 数 实 现 加 法<br />

#include <br />

__asm int add(int i, int j) {<br />

ADD r0,r0,r1 // Value of i in r0 and j in r1, result in r0<br />

MOV pc,lr<br />

}<br />

void main() {<br />

printf("12345 + 67890 = %d\n", add(12345, 67890));<br />

}<br />

5.2.2 嵌 入 式 汇 编 语 句 的 限 制<br />

以 下 约 束 适 用 于 嵌 入 式 汇 编 函 数 :<br />

• 预 处 理 后 , __asm 函 数 只 能 包 含 汇 编 代 码 , 以 下 标 识 符 除 外 :<br />

__cpp(expr)<br />

__offsetof_base(D, B)<br />

__mcall_is_virtual(D, f)<br />

__mcall_is_in_vbase(D, f)<br />

__mcall_this_offset(D, f)<br />

__vcall_offsetof_vfunc(D, f)<br />

• 编 译 程 序 不 为 __asm 函 数 生 成 返 回 指 令 。 如 果 要 从 __asm 函 数 返 回 , 必 须 将<br />

用 汇 编 代 码 编 写 的 返 回 指 令 包 含 到 函 数 体 内 。<br />

备 注<br />

因 为 嵌 入 式 汇 编 程 序 保 证 按 照 已 定 义 的 顺 序 发 出 __asm 函 数 , 所 以 这 使 得<br />

转 到 下 一 个 函 数 成 为 可 能 。 然 而 , 内 联 和 模 板 函 数 的 表 现 有 所 不 同 。<br />

• __asm 函 数 不 更 改 应 用 的 ATPCS 规 则 。 这 意 味 着 , 即 使 __asm 函 数 可 用 的<br />

汇 编 代 码 ( 例 如 , 更 改 状 态 ) 中 没 有 限 制 , 在 __asm 函 数 和 普 通 C 或 C++<br />

函 数 之 间 的 所 有 调 用 也 必 须 紧 随 ATPCS。<br />

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

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

Saved successfully!

Ooh no, something went wrong!