XINU
|
ARM (32bit)の基本情報
レジスタ | 別名 | 役割 |
---|---|---|
r0 | a1 | 汎用レジスタ(引数の受け渡し、関数の返り値に使用) |
r1 | a2 | 汎用レジスタ(引数の受け渡し、関数の返り値に使用) |
r2 | a3 | 汎用レジスタ(引数の受け渡し、関数の返り値に使用) |
r3 | a4 | 汎用レジスタ(引数の受け渡し、関数の返り値に使用) |
r4 | v1 | 汎用レジスタ |
r5 | v2 | 汎用レジスタ |
r6 | v3 | 汎用レジスタ |
r7 | v4 | 汎用レジスタ |
r8 | v5 | 汎用レジスタ |
r9 | sb | 汎用レジスタ(静的データセグメントのベースアドレス) |
r10 | sl | 汎用レジスタ (スタックリミット) |
r11 | fp | 汎用レジスタ(フレームポインタ) |
r12 | ip | プロシージャ内呼び出しスクラッチレジスタ |
r13 | sp | スタックポインタ |
r14 | lr | リンクレジスタ(リターンアドレス) |
r15 | pc | プログラムカウンタ |
cpsr | - | カレントプログラムステータスレジスタ |
cpsr は、プロセッサの演算結果や動作モード・割り込み設定状態を保持するレジスタである。
Bit | 名称 | 役割 |
---|---|---|
31 | N | 演算結果が負の場合に設定される |
30 | Z | 演算結果が 0 の場合に設定される |
29 | C | 演算結果がキャリーアウトの場合に設定される |
28 | V | 演算結果がオーバフローの場合に設定される |
27 | Q | 飽和が発生した事を示す(自動クリアされない) |
26〜25 | IT | Thumb IT (If-Then)命令用のステータスを示す |
24 | J | プロセッサが Jazelle(※1) 状態かどうかを示す |
23〜20 | 予約 | 予約された Bit。 |
19〜16 | GE[3:0] | 演算結果が〇〇以上の場合に設定される(SIMD 命令で使用される) |
15〜10 | IT[7:2] | Thumb IT (If-Then)命令の状態を示す |
9 | E | ロード/ストア命令のエンディアン形式を設定する (0:リトルエンディアン、1:ビックエンディアン) |
8 | A | 非同期アボートマスクする場合に設定される |
7 | I | IRQ をマスクする場合に設定される |
6 | F | FIQ をマスクする場合に設定される |
5 | T | Thumb 命令の状態を示す |
4〜0 | M | モード領域 |
※1 Java 仮想マシンによるバイトコード実行時にハードウェアアクセラレーションの
アーキテクチャサポートを提供する。Jazelle-DBX と Jazelle-RCT がある。
プロセッサキャッシュや MMU の操作などでは、コプロセッサとコプロセッサ用レジスタを使用する。
コプロセッサは 16 個存在する。CP0〜9、CP12、CP13 はシステム独自の外部コプロセッサとして使用できる。
その他のコプロセッサは、下表に示す通り、予め役割を定められている。
コプロセッサ | 役割 |
---|---|
CP10 | VFP(Vector Floating Point、単精度の浮動小数点)制御 |
CP11 | VFP(Vector Floating Point、倍精度の浮動小数点)制御 |
CP14 | デバッグおよび ETM(Embedded Trace Macrocell、実行命令履歴)制御 |
CP15 | システム制御 |
命令 | 役割 |
---|---|
and | 論理積を取る |
orr | 論理和を取る。 |
bic | ビットをクリアする。 |
push | レジスタ値をメモリに保存する |
pop | レジスタ値をメモリから復元する |
mrs | ステータスレジスタから汎用レジスタに値を移す |
msr | 汎用レジスタからステータスレジスタに値を移す |
mrc | コプロセッサから汎用レジスタに値を移す |
mcr | 汎用レジスタからコプロセッサに値を移す |
mov | レジスタからレジスタに値を移動する |
str | レジスタからメモリに値を移動する |
ldr | レジスタからレジスタに値を読み込む |
b | PC 値にオフセットを加えたメモリアドレス(ラベル先)に分岐する。 |
bl | ラベル先へ分岐し、次の命令アドレスを r14(lr)にコピーする(※2) |
cpsie | I:IRQ 割り込みを許可、F:FIQ 割り込みを許可 |
cpsid | I:IRQ 割り込みを禁止、F:FIQ 割り込みを禁止 |
※2 指定の番地へ分岐する前に戻りアドレスを R14=LR に保存するため、
lr の内容を pc に書き込むと(MOV PC,LR)、元に戻る。
FIQは高い優先度の高速割り込みであり、IRQ は通常優先度の割り込みである。
FIQは、プロセッサが状態を保存しなくて良いハードウェアのために存在し、 割り込み要求の処理中に「IRQ」および「その他の FIQ ハンドラ」を無効にする事によって
優先順位を付けている。FIQ ハンドラ処理中に他の割り込みは発生しない。
cpsr の I ビットが 0 および IRQ 端子が有効になった場合、IRQ 割り込み例外が発生する。
cpsr の F ビットが 0 および FIQ 端子が有効になった場合、FIQ 割り込み例外が発生する。
C 言語コード中でアセンブラを使用でき、インラインアセンブラ使用時に用いる命令は下表の通りである。
命令 | 役割 |
---|---|
asm | インラインアセンブラの仕様を意味する(※3) |
volatile | コードの最適化を抑制する。 |
構文は、asm(アセンブラコード :出力オペランド :入力オペランド :上書きされるレジスタリスト)という形式で、
":"以降の指定は全てオプションである。記載例は以下の通りである。