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.4 一 个 Thumb 汇 编 语 言 模 块 示 例<br />
示 例 2-3 说 明 了 Thumb 汇 编 语 言 模 块 的 一 些 核 心 成 分 。 此 示 例 基 于 subrout.s 文<br />
件 。 该 示 例 的 代 码 在 RVCT 的 examples\asm 子 目 录 下 的 thumbsub.s 文 件 中 。 有 关<br />
如 何 汇 编 、 链 接 和 执 行 该 示 例 的 操 作 说 明 , 请 参 阅 第 2-2 页 的 代 码 示 例 。<br />
示 例 2-3<br />
AREA ThumbSub, CODE, READONLY ; Name this block of code<br />
ENTRY<br />
; Mark first instruction to execute<br />
CODE32<br />
; Subsequent instructions are <strong>ARM</strong><br />
header ADR r0, start + 1 ; Processor starts in <strong>ARM</strong> state,<br />
BX r0 ; so small <strong>ARM</strong> code header used<br />
; to call Thumb main program<br />
CODE16<br />
; Subsequent instructions are Thumb<br />
start<br />
MOV r0, #10 ; Set up parameters<br />
MOV r1, #3<br />
BL doadd ; Call subroutine<br />
stop<br />
MOV r0, #0x18 ; angel_SWIreason_ReportException<br />
LDR r1, =0x20026 ; ADP_Stopped_ApplicationExit<br />
SWI 0xAB ; Thumb semihosting SWI<br />
doadd<br />
ADD r0, r0, r1 ; Subroutine code<br />
MOV pc, lr ; Return from subroutine<br />
END<br />
; Mark end of file<br />
CODE32 和 CODE16 命 令<br />
这 些 命 令 指 示 汇 编 程 序 将 随 后 的 指 令 汇 编 为 <strong>ARM</strong> (CODE32) 或 Thumb (CODE16)<br />
指 令 。 它 们 不 能 汇 编 成 运 行 时 改 变 处 理 器 状 态 的 指 令 。 它 们 只 能 改 变 汇 编 程 序<br />
状 态 。<br />
默 认 情 况 下 , <strong>ARM</strong> 汇 编 程 序 armasm 启 动 在 <strong>ARM</strong> 模 式 下 。 如 果 想 让 其 启 动 在<br />
Thumb 模 式 下 , 可 以 在 命 令 行 中 使 用 -16 选 项 。<br />
BX 指 令<br />
这 是 一 条 可 在 运 行 时 改 变 处 理 器 状 态 的 跳 转 指 令 。 目 的 地 址 的 最 低 有 效 位 指 定<br />
其 是 一 条 <strong>ARM</strong> 指 令 ( 清 除 ) 还 是 Thumb 指 令 ( 设 置 )。 在 此 例 中 , 该 位 是 在<br />
ADR 伪 指 令 中 设 置 的 。<br />
2-20 © 2002、 2003 <strong>ARM</strong> Limited 版 权 所 有 。 保 留 所 有 权 利 。 <strong>ARM</strong> DUI 0204BSC