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

备 注<br />

用 于 ADR 或 ADRL 的 标 号 必 须 位 于 相 同 的 代 码 段 内 。 对 于 在 相 同 段 中 对 超 出 范 围 的<br />

标 号 的 引 用 , 汇 编 程 序 将 做 出 错 处 理 。 对 于 在 其 它 代 码 段 中 对 超 出 范 围 的 标 号 的<br />

引 用 , 链 接 程 序 将 做 出 错 处 理 。<br />

在 Thumb 状 态 下 , ADR 只 能 产 生 字 对 齐 的 地 址 。<br />

ADRL 不 能 用 于 Thumb 代 码 。 只 能 在 <strong>ARM</strong> 代 码 内 使 用 它 。<br />

示 例 2-6 说 明 了 在 汇 编 ADR 和 ADRL 伪 指 令 时 , 由 汇 编 程 序 产 生 的 代 码 类 型 。 该 实<br />

例 的 代 码 在 RVCT 的 examples\asm 子 目 录 下 的 adrlabel.s 文 件 中 。 有 关 如 何 汇<br />

编 、 链 接 和 执 行 该 实 例 的 操 作 说 明 , 请 参 阅 第 2-2 页 的 代 码 示 例 。<br />

注 释 中 列 出 的 指 令 是 由 汇 编 程 序 生 成 的 <strong>ARM</strong> 指 令 。<br />

示 例 2-6<br />

AREA adrlabel, CODE,READONLY<br />

ENTRY<br />

; Mark first instruction to execute<br />

Start<br />

BL func ; Branch to 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 />

LTORG<br />

; Create a literal pool<br />

func ADR r0, Start ; => SUB r0, PC, #offset to Start<br />

ADR r1, DataArea ; => ADD r1, PC, #offset to DataArea<br />

; ADR r2, DataArea+4300 ; This would fail because the offset<br />

; cannot be expressed by operand2<br />

; of an ADD<br />

ADRL r2, DataArea+4300 ; => ADD r2, PC, #offset1<br />

; ADD r2, r2, #offset2<br />

MOV pc, lr ; Return<br />

DataArea SPACE 8000 ; Starting at the current location,<br />

; clears a 8000 byte area of memory<br />

; to zero<br />

END<br />

<strong>ARM</strong> DUI 0204BSC © 2002、 2003 <strong>ARM</strong> Limited 版 权 所 有 。 保 留 所 有 权 利 。 2-33

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

Saved successfully!

Ooh no, something went wrong!