23.10.2014 Views

RealView - ARM Information Center

RealView - ARM Information Center

RealView - ARM Information Center

SHOW MORE
SHOW LESS

Create successful ePaper yourself

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

编 写 <strong>ARM</strong> 和 Thumb 汇 编 语 言<br />

2.8.3 用 LDM 和 STM 实 现 栈 操 作<br />

装 载 多 个 和 存 储 多 个 指 令 可 以 更 新 基 址 寄 存 器 。 对 于 栈 操 作 来 说 , 基 址 寄 存 器 通<br />

常 是 栈 指 针 r13。 这 就 意 味 着 , 可 以 使 用 单 个 装 载 多 个 和 存 储 多 个 指 令 , 为 任 意<br />

数 量 的 寄 存 器 实 施 推 入 和 弹 出 操 作 。<br />

装 载 多 个 和 存 储 多 个 指 令 可 以 使 用 几 种 类 型 的 栈 :<br />

降 序 或 升 序<br />

满 的 或 空 的<br />

栈 向 下 增 长 , 从 一 个 高 地 址 开 始 并 向 更 低 地 址 ( 降 序 栈 ); 或 者<br />

向 上 增 长 , 从 一 个 低 地 址 开 始 并 向 更 高 地 址 前 进 ( 升 序 栈 )<br />

栈 指 针 可 指 向 栈 中 的 最 后 一 个 条 目 ( 满 栈 ), 或 者 指 向 栈 中 的 下 一<br />

个 可 用 空 间 ( 空 栈 )。<br />

为 便 于 程 序 员 操 作 , 可 以 使 用 面 向 栈 的 后 缀 , 来 代 替 后 缀 之 前 或 之 后 的 增 量 或 减<br />

量 。 请 参 阅 表 2-5 中 的 面 向 栈 的 后 缀 列 表 。<br />

栈 类 型 推 进 弹 出<br />

表 2-5 用 于 装 载 多 个 和 存 储 多 个 指 令 的 后 缀<br />

满 降 序 STMFD (STMDB) LDMFD (LDMIA)<br />

满 升 序 STMFA (STMIB) LDMFA (LDMDA)<br />

空 降 序 STMED (STMDA) LDMED (LDMIB)<br />

空 升 序 STMEA (STMIA) LDMEA (LDMDB)<br />

例 如 :<br />

STMFD<br />

LDMFD<br />

r13!, {r0-r5} ; Push onto a Full Descending Stack<br />

r13!, {r0-r5} ; Pop from a Full Descending Stack.<br />

备 注<br />

<strong>ARM</strong>-Thumb 程 序 调 用 标 准 (ATPCS) 以 及 <strong>ARM</strong> 和 Thumb C 与 C++ 编 译 程 序 总 是<br />

使 用 满 降 序 栈 。<br />

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