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

转 换 为 Thumb<br />

示 例 2-8 说 明 了 转 换 为 Thumb 代 码 的 跳 转 表 的 实 现 。<br />

大 多 数 Thumb 代 码 版 本 与 <strong>ARM</strong> 代 码 相 同 。 两 者 的 差 别 在 Thumb 版 本 中 做 出 了<br />

注 释 。<br />

在 Thumb 状 态 中 , 不 能 :<br />

• 在 LDR 和 STR 指 令 中 增 加 基 址 寄 存 器 ;<br />

• 使 用 LDR 指 令 将 一 个 值 装 载 到 pc 中 ;<br />

• 对 寄 存 器 中 存 放 的 值 执 行 内 联 移 位 。<br />

示 例 2-8 Thumb 代 码 跳 转 表<br />

AREA Jump, CODE, READONLY<br />

CODE16<br />

; Following code is Thumb code<br />

num EQU 2<br />

ENTRY<br />

start<br />

MOV r0, #0<br />

MOV r1, #3<br />

MOV r2, #2<br />

BL arithfunc<br />

stop MOV r0, #0x18<br />

LDR r1, =0x20026<br />

SWI 0xAB ; Thumb semihosting SWI<br />

arithfunc<br />

CMP r0, #num<br />

BHS exit ; MOV pc, lr cannot be conditional<br />

ADR r3, JumpTable<br />

LSL r0, r0, #2 ; 3 instructions needed to replace<br />

LDR r0, [r3,r0] ; LDR pc, [r3,r0,LSL#2]<br />

MOV pc, r0<br />

ALIGN<br />

; Ensure that the table is aligned on a<br />

; 4-byte boundary<br />

JumpTable<br />

DCD DoAdd<br />

DCD DoSub<br />

DoAdd ADD r0, r1, r2<br />

exit MOV pc, lr<br />

DoSub SUB r0, r1, r2<br />

MOV pc, lr<br />

END<br />

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