ARM 命令セット一覧 †
ニーモニック | ARM ISA | 説明 |
ADC | v1 | 2つの32ビット値とキャリーの加算 |
ADD | v1 | 2つの32ビット値の加算 |
AND | v1 | 2つの32ビット値のビット単位の論理積 |
B | v1 | 相対分岐 +/- 32MB |
BIC | v1 | 2つの32ビット値の論理ビットクリア(AND NOT) |
BKPT | v5 | ブレークポイント命令 |
BL | v1 | リンク付き相対分岐 |
BLX | v5 | リンク付き分岐交換 |
BX | v4T | 分岐交換 |
CDP,CDP2 | v2,v5 | コプロセッサのデータ処理操作 |
CLZ | v5 | 先行ゼロカウント |
CMN | v1 | 2つの32ビット値の否定比較 |
CMP | v1 | 2つの32ビット値の比較 |
EOR | v1 | 2つの32ビット値の排他的論理和 |
LDC,LDC2 | v2,v5 | コプロセッサに単一または複数の32ビット値をロードする |
LDM | v1 | メモリからARMレジスタに複数の32ビット値をロードする |
LDR | v1,v4,v5E | メモリの仮想アドレスから単一の値をロードする |
MCR,MCR2,MCRR | v2,v5,v5E | ARMレジスタからコプロセッサへの移動 |
MLA | v2 | 32ビット値の積和 |
MOV | v1 | 32ビット値をレジスタに移動する |
MRC,MRC2,MRRC | v2,v5,v5E | コプロセッサからARMレジスタへの移動 |
MRS | v3 | ステータスレジスタ(cpsrまたはspsr)からARMレジスタへの移動 |
MSR | v3 | ARMレジスタからステータスレジスタ(cpsrまたはspsr)への移動 |
MUL | v2 | 2つの32ビット値の乗算 |
MVN | v1 | 32ビット値の論理NOTをレジスタに移動する |
ORR | v1 | 2つの32ビット値のビット単位の論理和 |
PLD | v5E | プリロードヒント命令 |
QADD | v5E | 符号付き32ビット飽和加算 |
QDADD | v5E | 符号付きダブルおよび32ビット飽和加算 |
QDSUB | v5E | 符号付きダブルおよび32ビット飽和減算 |
QSUB | v5E | 符号付き32ビット飽和減算 |
RSB | v1 | 2つの32ビット値の反転減算 |
RSC | v1 | 2つの32ビット値のキャリー付き反転減算 |
SBC | v1 | 2つの32ビット値のキャリー付き減算 |
SMLAxy | v5E | 符号付き積和命令 |
SMLAL | v3M | 符号付きロング積和 |
SMLALxy | v5E | 符号付きロング積和 |
SMLAWy | v5E | 符号付き積和命令 |
SMULL | v3M | 符号付きロング乗算 |
SMULxy | v5E | 符号付き乗算命令 |
SMULWy | v5E | 符号付き乗算命令 |
STC,STC2 | v2,v5 | コプロセッサから単一または複数の32ビット値をメモリにストアする |
STM | v1 | 複数の32ビットレジスタからメモリへのストア |
STR | v1,v4,v5E | メモリの仮想アドレスにレジスタをストアする |
SUB | v1 | 2つの32ビット値の減算 |
SWI | v1 | ソフトウェア割り込み |
SWP | v2a | メモリのワード・バイトをレジスタと交換、割り込みなし |
TEQ | v1 | 2つの32ビット値の等価テスト |
TST | v1 | 32ビット値のビットのテスト |
UMLAL | v3M | 符号無しロング積和 |
UMULL | v3M | 符号無しロング乗算 |
アセンブラの擬似命令 †
詳細画面で登場する記号の意味 †
・Rd = Destination Register (転送先レジスタ)
・Rn = Source Register (転送元レジスタ)
・Rm = Source Register 2 (転送元レジスタ 2)
・sp は r13 と同じ場所を指す
・lr は r14 と同じ場所を指す
・pc は r15 と同じ場所を指す
・中括弧 "{ }" で囲まれた範囲はオプション
・S が接尾文字として付いている命令は、cpsr (ステータスレジスタ) を更新する
・N の取り得る範囲 (バレルシフタ演算の構文)
説明 | 構文 |
即値 | #immediate (16進数の場合は #0x) |
レジスタ | Rm |
事前に指定した値だけ論理左シフト (即値) | Rm, LSL #shift |
事前に指定した値だけ論理左シフト (レジスタ) | Rm, LSL Rs |
事前に指定した値だけ論理右シフト (即値) | Rm, LSR #shift |
事前に指定した値だけ論理右シフト (レジスタ) | Rm, LSR Rs |
事前に指定した値だけ算術右シフト (即値) | Rm, ASR #shift |
事前に指定した値だけ算術右シフト (レジスタ) | Rm, ASR Rs |
事前に指定した値だけ右ローテート (即値) | Rm, ROR #shift |
事前に指定した値だけ右ローテート (レジスタ) | Rm, ROR Rs |
拡張付き右ローテート | Rm, RRX |
・<cond>の取り得る範囲 (条件ニーモニック)
<cond> | 命令が実行される条件 | cpsr の状態 |
{|AL} | 常時 | True |
EQ | 等しい (最後の結果が 0 である) | Z == 1 |
NE | 等しくない (最後の結果が 0 でない) | Z == 0 |
{CS|HS} | キャリーがセットされ、符号なしのより大きいか等しい (比較の後) | C == 1 |
{CC|LO} | キャリーがクリアで、符号なしのより小さい (比較の後) | C == 0 |
MI | マイナス (最後の結果が負) | N == 1 |
PL | プラス (最後の結果が 0 または 0 より大きい) | N == 0 |
VS | V フラグがセットされている (最後の結果が符号付きオーバーフロー) | V == 1 |
VC | V フラグがクリアされている (最後の結果が符号付きオーバーフローなし) | V == 0 |
HI | 符号なしのより大きい (比較の後) | C == 1 && Z == 0 |
LS | 符号なしのより小さいか等しい (比較の後) | C == 0 || Z == 1 |
GE | 符号付きのより大きいか等しい | N == V |
LT | 符号付きのより小さい | N != V |
GT | 符号付きのより大きい | N == V && Z == 0 |
LE | 符号付きのより小さいか等しい | N != V || Z == 1 |
NV | 常に否定−ARMv1 および ARMv2専用−使用してはいけない | False |