Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
命 令 参 考<br />
7.5.1 FRAME ADDRESS<br />
FRAME ADDRESS 命 令 说 明 如 何 为 后 面 的 指 令 计 算 规 范 框 架 地 址 。 只 能 在 含 有<br />
FUNCTION 和 ENDFUNC 命 令 , 或 含 有 PROC 和 ENDP 命 令 的 函 数 内 使 用 它 。<br />
语 法<br />
FRAME ADDRESS reg[,offset]<br />
其 中 :<br />
reg<br />
是 规 范 框 架 地 址 所 基 于 的 寄 存 器 。 这 一 般 是 sp, 除 非 函 数 使 用 了 独<br />
立 的 框 架 指 针 。<br />
offset 是 规 范 框 架 地 址 从 reg 起 的 偏 移 量 。 如 果 offset 是 0, 可 以 省 略 它 。<br />
用 法<br />
如 果 代 码 改 变 了 规 范 框 架 地 址 的 基 址 寄 存 器 , 或 者 如 果 代 码 改 变 了 规 范 框 架 地<br />
址 对 该 寄 存 器 的 偏 移 量 , 就 可 使 用 FRAME ADDRESS。 必 须 在 改 变 规 范 框 架 地 址 的 计<br />
算 方 式 的 指 令 之 后 , 立 即 使 用 FRAME ADDRESS。<br />
备 注<br />
如 果 代 码 使 用 了 单 个 指 令 来 保 存 寄 存 器 和 改 变 栈 指 针 , 可 以 使 用 FRAME PUSH 来 代<br />
替 FRAME ADDRESS 和 FRAME SAVE ( 请 参 阅 第 7-37 页 的 FRAME PUSH)。<br />
如 果 代 码 使 用 了 单 个 指 令 来 装 载 寄 存 器 和 改 变 栈 指 针 , 可 以 使 用 FRAME POP 来 代<br />
替 FRAME ADDRESS 和 FRAME RESTORE ( 请 参 阅 第 7-36 页 的 FRAME POP)。<br />
示 例<br />
_fn FUNCTION ; CFA (Canonical Frame Address) is value<br />
; of sp on entry to function<br />
STMFD sp!, {r4,fp,ip,lr,pc}<br />
FRAME PUSH {r4,fp,ip,lr,pc}<br />
SUB sp,sp,#4 ; CFA offset now changed<br />
FRAME ADDRESS sp,24<br />
; - so we correct it<br />
ADD fp,sp,#20<br />
FRAME ADDRESS fp,4<br />
; New base register<br />
; code using fp to base call-frame on, instead of sp<br />
<strong>ARM</strong> DUI 0204BSC © 2002、 2003 <strong>ARM</strong> Limited 版 权 所 有 。 保 留 所 有 权 利 。 7-35