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.3.3 调 用 子 程 序<br />

要 调 用 子 程 序 , 可 使 用 一 个 跳 转 和 链 接 指 令 。 其 语 法 是 :<br />

BL destination<br />

其 中 destination 通 常 是 位 于 子 程 序 的 第 一 个 指 令 处 的 标 号 。<br />

destination 也 可 以 是 一 个 相 对 程 序 或 相 对 寄 存 器 的 表 达 式 。 有 关 详 细 信 息 请 参<br />

阅 第 4-98 页 的 B 和 BL。<br />

BL 指 令 :<br />

• 将 返 回 地 址 放 入 链 接 寄 存 器 (lr) 中 ;<br />

• 将 程 序 计 数 器 设 置 为 子 程 序 的 地 址 。<br />

在 执 行 子 程 序 代 码 后 , 可 以 使 用 MOV pc,lr 指 令 返 回 。 根 据 约 定 , 寄 存 器 r0 到 r3<br />

用 于 给 子 程 序 传 递 参 数 , 并 将 结 果 送 回 调 用 程 序 。<br />

备 注<br />

单 独 汇 编 或 编 译 的 模 块 之 间 的 调 用 , 必 须 符 合 由 程 序 调 用 标 准 规 定 的 限 制 和 约<br />

定 。 有 关 详 细 信 息 , 请 参 阅 <strong>RealView</strong> 编 译 工 具 2.0 版 开 发 人 员 指 南 中 的 使 用 程<br />

序 调 用 标 准 一 章 。<br />

示 例 2-2 说 明 了 一 个 将 两 个 参 数 值 相 加 并 将 结 果 返 回 r0 的 子 程 序 。 该 示 例 的 代<br />

码 在 RVCT examples\asm 子 目 录 下 的 subrout.s 文 件 中 。 有 关 如 何 汇 编 、 链 接 和 执<br />

行 该 示 例 的 操 作 说 明 , 请 参 阅 第 2-2 页 的 代 码 示 例 。<br />

示 例 2-2<br />

AREA subrout, CODE, READONLY<br />

; Name this block of code<br />

ENTRY<br />

; Mark first instruction to execute<br />

start MOV r0, #10 ; Set up parameters<br />

MOV r1, #3<br />

BL doadd ; Call subroutine<br />

stop MOV r0, #0x18 ; angel_SWIreason_ReportException<br />

LDR r1, =0x20026 ; ADP_Stopped_ApplicationExit<br />

SWI 0x123456 ; <strong>ARM</strong> semihosting SWI<br />

2-18 © 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!