表の右側が隠れてしまう場合は、以下のページを御利用ください。
http://tagiyasoft.blog.jp/armasm.htm
※Rd3とRd2-0の4bitでRdを指定する、Rd=PCの時3cycles
※Rd3とRd2-0の4bitでRdを指定する、Rd=PCの時3cycles
※CMPHは、RdがR8-R15の場合に使用(正規のニモニックではありません)
※条件コードのうち、GE,LT,GT,LEは符号付き
※GOTOに指定する値(n8/n11)は飛び先との命令数差分から-2した数を指定、分岐するとき3cycles
※N:指定したレジスタの数、例)PUSH {R5,R4,R3}
※bic:ビットクリア、asr:符号付き右シフト、ror:右ローテート
※rev:byteオーダー反転、rev16:byteオーダー反転(2byteずつ)、revSH:符号付き16bitを反転32bit化
※abc:キャリー付き足し算、sbc:キャリー付き引き算
※CPSID:割込禁止、CPSIE:割込許可、WIF:割込待ち、NOP:なにもしない(no operation) R0=R0<<0
※flag列は、命令の実行結果に基づいて条件コードフラグの更新の有無を表します。
Cortex-M0 ARMマシン語表(抜粋)
http://tagiyasoft.blog.jp/armasm.htm
代入 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | cycles | flag |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Rd = u8 | 0 | 0 | 1 | 0 | 0 | Rd | u8 | 1 | ||||||||||
Rd = Rm | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | Rm | Rd | 1 | |||||
Rd = Rm | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | Rd3 | Rm | Rd2-0 | 1 or 3 |
演算 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | cycles |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Rd = Rd + u8 | 0 | 0 | 1 | 1 | 0 | Rd | u8 | 1 | |||||||||
Rd = Rd - u8 | 0 | 0 | 1 | 1 | 1 | Rd | u8 | 1 | |||||||||
Rd = Rm << u5 | 0 | 0 | 0 | 0 | 0 | u5 | Rm | Rd | 1 | ||||||||
Rd = Rm >> u5 | 0 | 0 | 0 | 0 | 1 | u5 | Rm | Rd | 1 | ||||||||
Rd = Rn + Rm | 0 | 0 | 0 | 1 | 1 | 0 | 0 | Rm | Rn | Rd | 1 | ||||||
Rd = Rd + Rm | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | Rd3 | Rm | Rd2-0 | 1 or 3 | |||||
Rd = Rn - Rm | 0 | 0 | 0 | 1 | 1 | 0 | 1 | Rm | Rn | Rd | 1 | ||||||
Rd = Rn + u3 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | u3 | Rn | Rd | 1 | ||||||
Rd = Rn - u3 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | u3 | Rn | Rd | 1 | ||||||
Rd = Rd & Rm | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | Rm | Rd | 1 | ||||
Rd = Rd ^ Rm | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | Rm | Rd | 1 | ||||
Rd = Rd << Rm | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | Rm | Rd | 1 | ||||
Rd = Rd >> Rm | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | Rm | Rd | 1 | ||||
Rd = -Rm | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | Rm | Rd | 1 | ||||
Rd = Rd | Rm | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0 | Rm | Rd | 1 | ||||
Rd = Rd * Rm | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | Rm | Rd | 1 | ||||
Rd = ~Rm | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | Rm | Rd | 1 |
メモリアクセス | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | cycles |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Rd = [Rn + u5] | 0 | 1 | 1 | 1 | 1 | u5 | Rn | Rd | 2 | ||||||||
Rd = [Rn + u5]2 | 1 | 0 | 0 | 0 | 1 | u5/2 | Rn | Rd | 2 | ||||||||
Rd = [Rn + u5]4 | 0 | 1 | 1 | 0 | 1 | u5/4 | Rn | Rd | 2 | ||||||||
[Rn + u5] = Rd | 0 | 1 | 1 | 1 | 0 | u5 | Rn | Rd | 2 | ||||||||
[Rn + u5]2 = Rd | 1 | 0 | 0 | 0 | 0 | u5/2 | Rn | Rd | 2 | ||||||||
[Rn + u5]4 = Rd | 0 | 1 | 1 | 0 | 0 | u5/4 | Rn | Rd | 2 | ||||||||
Rd = [Rn + Rm] | 0 | 1 | 0 | 1 | 1 | 1 | 0 | Rm | Rn | Rd | 2 | ||||||
Rd = [Rn + Rm]2 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | Rm | Rn | Rd | 2 | ||||||
Rd = [Rn + Rm]4 | 0 | 1 | 0 | 1 | 1 | 0 | 0 | Rm | Rn | Rd | 2 | ||||||
[Rn + Rm] = Rd | 0 | 1 | 0 | 1 | 0 | 1 | 0 | Rm | Rn | Rd | 2 | ||||||
[Rn + Rm]2 = Rd | 0 | 1 | 0 | 1 | 0 | 0 | 1 | Rm | Rn | Rd | 2 | ||||||
[Rn + Rm]4 = Rd | 0 | 1 | 0 | 1 | 0 | 0 | 0 | Rm | Rn | Rd | 2 |
条件判断 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | cycles |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Rn - u8 | 0 | 0 | 1 | 0 | 1 | Rn | u8 | 1 | |||||||||
Rn - Rm | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 0 | Rm | Rn | 1 | ||||
Rn - Rm | 0 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | Rn3 | Rm | Rn2-0 | 1 | |||||
Rn + Rm | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | Rm | Rn | 1 | ||||
Rn & Rm | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | Rm | Rn | 1 |
分岐 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | cycles |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
IF 0 GOTO n8 << 1 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 | n8 | 1 or 3 | |||||||
IF !0 GOTO n8 << 1 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 1 | n8 | 1 or 3 | |||||||
GOTO n11 << 1 | 1 | 1 | 1 | 0 | 0 | n11 | 3 | ||||||||||
GOTO Rm | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | Rm | 0 | 0 | 0 | 3 | |||
RET (=#4770) | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 3 |
CALL Rm | 0 | 1 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | Rm | 0 | 0 | 0 | 3 |
※GOTOに指定する値(n8/n11)は飛び先との命令数差分から-2した数を指定、分岐するとき3cycles
スタック | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | cycles |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
PUSH regs | 1 | 0 | 1 | 1 | 0 | 1 | 0 | LR | R7 | R6 | R5 | R4 | R3 | R2 | R1 | R0 | 1+N |
POP regs | 1 | 0 | 1 | 1 | 1 | 1 | 0 | PC | R7 | R6 | R5 | R4 | R3 | R2 | R1 | R0 | 1+N |
特殊演算 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | cycles |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Rd = bic(Rd, Rm) | 0 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | 0 | Rm | Rd | 1 | ||||
Rd = asr(Rm, u5) | 0 | 0 | 0 | 1 | 0 | u5 | Rm | Rd | 1 | ||||||||
Rd = asr(Rd, Rm) | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | Rm | Rd | 1 | ||||
Rd = ror(Rd, Rm) | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 | Rm | Rd | 1 | ||||
Rd = rev(Rm) | 1 | 0 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | Rm | Rd | 1 | ||||
Rd = rev16(Rm) | 1 | 0 | 1 | 1 | 1 | 0 | 1 | 0 | 0 | 1 | Rm | Rd | 1 | ||||
Rd = revSH(Rm) | 1 | 0 | 1 | 1 | 1 | 0 | 1 | 0 | 1 | 1 | Rm | Rd | 1 | ||||
Rd = adc(Rd, Rm) | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 1 | Rm | Rd | 1 | ||||
Rd = sbc(Rd, Rm) | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | Rm | Rd | 1 |
※rev:byteオーダー反転、rev16:byteオーダー反転(2byteずつ)、revSH:符号付き16bitを反転32bit化
※abc:キャリー付き足し算、sbc:キャリー付き引き算
その他 | 15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | cycles |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
CPSID (=#B672) | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 0 | 1 |
CPSIE (=#B662) | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 1 | 0 | 1 |
WFI (=#BF30) | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 2 |
NOP (=0) | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 |
- 連載、IchigoJamではじめる、ARMマシン語入門
1. はじめてのマシン語
2. ハンドアセンブルで超速計算!
3. マシン語メモリアクセスで画面超速表示!
4. マシン語でLEDを光らせよう!
5. 楽しさ広がるマルチバイトメモリアクセスとスタック
6. マシン語使いこなしTIPS
7. カジュアルに使うインラインマシン語
DATA: Cortex-M0プロセッサ - ARM
Text: CC BY ichigojam.net
Cortex-M0 ARMマシン語表(抜粋)
コメント