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.4 用 LDM 和 STM 实 现 块 复 制<br />

示 例 2-11 是 一 个 <strong>ARM</strong> 代 码 程 序 , 其 通 过 一 次 复 制 单 个 字 , 来 将 一 组 字 从 源 位<br />

置 复 制 到 目 标 位 置 上 。 该 示 例 存 放 在 RVCT 的 examples\asm 子 目 录 下 的 word.s<br />

文 件 中 。 有 关 如 何 汇 编 、 链 接 和 执 行 该 示 例 的 操 作 说 明 , 请 参 阅 第 2-2 页 的 代<br />

码 示 例 。<br />

示 例 2-11 块 复 制<br />

AREA Word, CODE, READONLY ; name this block of code<br />

num EQU 20 ; set number of words to be copied<br />

ENTRY<br />

; mark the first instruction to call<br />

start<br />

LDR r0, =src ; r0 = pointer to source block<br />

LDR r1, =dst ; r1 = pointer to destination block<br />

MOV r2, #num ; r2 = number of words to copy<br />

wordcopy LDR r3, [r0], #4 ; load a word from the source and<br />

STR r3, [r1], #4 ; store it to the destination<br />

SUBS r2, r2, #1 ; decrement the counter<br />

BNE wordcopy ; ... copy more<br />

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

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

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

AREA BlockData, DATA, READWRITE<br />

src DCD 1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,1,2,3,4<br />

dst DCD 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0<br />

END<br />

通 过 使 用 LDM 和 STM 来 尽 可 能 多 的 复 制 , 可 以 使 这 个 模 块 的 效 率 更 高 。 在 已 知<br />

<strong>ARM</strong> 拥 有 的 寄 存 器 数 目 后 , 一 次 传 送 8 个 字 最 合 理 。 利 用 下 列 指 令 , 可 以 找 出<br />

要 复 制 的 块 所 包 含 的 8 个 字 的 倍 数 ( 如 果 r2 = 要 复 制 的 字 数 ):<br />

MOVS r3, r2, LSR #3 ; number of eight word multiples<br />

此 值 可 用 于 控 制 通 过 循 环 的 重 复 次 数 , 循 环 中 的 每 次 操 作 拷 贝 八 个 字 。 当 只 剩 下<br />

不 足 八 个 字 时 , 可 以 用 以 下 指 令 找 出 剩 余 的 字 数 ( 假 定 r2 还 未 被 破 坏 ):<br />

ANDS r2, r2, #7<br />

第 2-47 页 的 示 例 2-12 列 出 了 重 新 编 写 的 使 用 LDM 和 STM 进 行 复 制 的 块 复 制 模 块 。<br />

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