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 />
用 嵌 入 式 汇 编 函 数 实 现 加 法 示 例<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