08.11.2014 Views

RealView Compilation Tools アセンブラガイド - ARM Information Center

RealView Compilation Tools アセンブラガイド - ARM Information Center

RealView Compilation Tools アセンブラガイド - ARM Information Center

SHOW MORE
SHOW LESS

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> アセン ブ リ 言 語 の 記 述<br />

注<br />

<strong>ARM</strong> アーキテクチャ 向 けプロシージャ コール 標 準 (AAPCS)、 および <strong>ARM</strong><br />

と Thumb の C/C++ コンパイラでは、 常 にフル 下 降 スタックを 使 用 します。<br />

PUSH 命 令 と POP 命 令 では、 フル 下 降 ス タ ッ ク が 使 用 さ れる こ と が 想 定 さ れま<br />

す。 これらは、 ライ トバッ クを 使 用 する STMDB 命 令 と LDM に 適 し た 同 義 語 です。<br />

ネス ト されたサブルーチンのレジスタのスタ ッ ク<br />

ス タ ッ ク 操 作 は、 サブルーチンのエン ト リ と 終 了 時 で 行 う と 効 果 的 です。 サ<br />

ブルーチンのエン ト リ で 必 要 なすべての 作 業 レ ジ ス タ を ス タ ッ ク にス ト ア し、<br />

終 了 時 にス タ ッ ク か ら ポ ッ プする こ と がで き ます。<br />

また、 サブルーチンのエン ト リでリ ンクレジスタをスタッ クにプッシュして<br />

おけば、 復 帰 ア ド レスを 失 わずに 別 のサブルーチンコールを 安 全 に 実 行 でき<br />

ます。 この 場 合 は、 lr をポップして、 その 値 を pc に 移 動 する 代 わ り に、 サブ<br />

ルーチンの 終 了 時 にス タ ッ ク か ら pc をポップするこ とによってサブルーチン<br />

から 戻 るこ とができます。 例 :<br />

subroutine PUSH<br />

; code<br />

BL<br />

; code<br />

POP<br />

{r5-r7,lr} ; Push work registers and lr<br />

somewhere_else<br />

{r5-r7,pc} ; Pop work registers and pc<br />

注<br />

<strong>ARM</strong>/Thumb 混 合 シ ス テムで こ の 方 法 を 使 用 する 場 合 は 注 意 する 必 要 があ り<br />

ます。 <strong>ARM</strong>v4T システムでは、 プログラムカウンタを 直 接 ポップしても 状 態<br />

を 変 更 する こ とはできません。 このよ うな 場 合 は、 アドレスを 一 時 レジスタ<br />

にポップして、 BX 命 令 を 使 用 する 必 要 があ り ます。<br />

<strong>ARM</strong>v5T 以 上 では、 この 方 法 で 状 態 を 変 更 でき ます。<br />

<strong>ARM</strong> と Thumb の 混 合 の 詳 細 については、『デベロ ッパガイ ド』 の 第 5 章 <strong>ARM</strong><br />

と Thumb のインターワークを 参 照 して 下 さい。<br />

<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 2-47<br />

Non-Confidential

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

Saved successfully!

Ooh no, something went wrong!