| ビット数 | 名称 | データ記述 | メモリ確保記述 |
|---|---|---|---|
| 8 | byte | .byte | .ds.b |
| 16 | halfword | .hword | .ds.w |
| 32 | word | .word | .ds.l |
| モード | 略称 | モードビット | 説明 |
|---|---|---|---|
| User | usr | 10000 | 通常モード |
| FIQ | fiq | 10001 | データ転送用高速割り込み |
| IRQ | irq | 10010 | 汎用割り込み |
| Supervisor | svc | 10011 | OS 用プロテクトモード |
| Abort mode | abt | 10111 | データ/命令フェッチ失敗時 |
| Undefined | und | 11011 | 未定義命令実行時 |
| System | sys | 11111 | OS 用特権モード |
| usr,sys | fiq | irq | svc | abt | und |
|---|---|---|---|---|---|
| R0 | R0 | R0 | R0 | R0 | R0 |
| R1 | R1 | R1 | R1 | R1 | R1 |
| R2 | R2 | R2 | R2 | R2 | R2 |
| R3 | R3 | R3 | R3 | R3 | R3 |
| R4 | R4 | R4 | R4 | R4 | R4 |
| R5 | R5 | R5 | R5 | R5 | R5 |
| R6 | R6 | R6 | R6 | R6 | R6 |
| R7 | R7 | R7 | R7 | R7 | R7 |
| R8 | R8_fiq | R8 | R8 | R8 | R8 |
| R9 | R9_fiq | R9 | R9 | R9 | R9 |
| R10 | R10_fiq | R10 | R10 | R10 | R10 |
| R11 | R11_fiq | R11 | R11 | R11 | R11 |
| R12 | R12_fiq | R12 | R12 | R12 | R12 |
| R13 | R13_fiq | R13_irq | R13_svc | R13_abt | R13_und |
| R14 | R14_fiq | R14_irq | R14_svc | R14_abt | R14_und |
| R15(PC) | R15(PC) | R15(PC) | R15(PC) | R15(PC) | R15(PC) |
| CPSR | CPSR | CPSR | CPSR | CPSR | CPSR |
| SPSR_fiq | SPSR_irq | SPSR_svc | SPSR_abt | SPSR_und |
| usr,sys | fiq | irq | svc | abt | und |
|---|---|---|---|---|---|
| R0 | R0 | R0 | R0 | R0 | R0 |
| R1 | R1 | R1 | R1 | R1 | R1 |
| R2 | R2 | R2 | R2 | R2 | R2 |
| R3 | R3 | R3 | R3 | R3 | R3 |
| R4 | R4 | R4 | R4 | R4 | R4 |
| R5 | R5 | R5 | R5 | R5 | R5 |
| R6 | R6 | R6 | R6 | R6 | R6 |
| R7 | R7 | R7 | R7 | R7 | R7 |
| SP | SP_fiq | SP_irq | SP_svc | SP_abt | SP_und |
| LR | LR_fiq | LR_irq | LR_svc | LR_abt | LR_und |
| PC | PC | PC | PC | PC | PC |
| CPSR | CPSR | CPSR | CPSR | CPSR | CPSR |
| SPSR_fiq | SPSR_irq | SPSR_svc | SPSR_abt | SPSR_und |
| レジスタ | 別名 |
|---|---|
| R10 | SL |
| R11 | FP |
| R12 | IP |
| R13 | SP |
| R14 | LR |
| R15 | PC |
3322
1098 76543210
NZCV... ...IFTMMMMM
N : Negative/Less Than
Z : Zero
C : Carry/Borrow/Extend
減算時、Z80 や 68000 などとは値が逆なので注意。
たとえば a-b を計算した場合、a<b だと 0 になる。
V : Overflow
I : IRQ disable
F : FIQ disable
T : State bit
0 で ARM ステート、1 で THUMB ステート。
CPSR 操作命令で書き換えてはいけない。必ず bx 命令を使う。
M : Mode bits
10000 User
10001 FIQ(Fast Interrupt reQuest)
10010 IRQ(Interrupt ReQuest)
10011 Supervisor
10111 Abort
11011 Undefined
11111 System
| ベクタ | 割り込み種類 | モード |
|---|---|---|
0x00000000 | Reset | Supervisor |
0x00000004 | Undefined instruction | Undefined |
0x00000008 | Software interrupt | Supervisor |
0x0000000c | Abort(prefetch) | Abort |
0x00000010 | Abort(data) | Abort |
0x00000014 | reserved | - |
0x00000018 | IRQ | IRQ |
0x0000001c | FIQ | FIQ |
| 高 ↑ ↓ 低 |
Reset |
| Data abort | |
| FIQ | |
| IRQ | |
| Prefetch abort | |
| Data abort | |
| Undefined instruction, Software interrupt |
| コード | Cond | 条件 | 意味 |
|---|---|---|---|
| 0000 | eq | Z=1 | equal |
| 0001 | ne | Z=0 | not equal |
| 0010 | cs | C=1 | unsigned higher or same |
| 0011 | cc | C=0 | unsigned lower |
| 0100 | mi | N=1 | negative |
| 0101 | pl | N=0 | positive or zero |
| 0110 | vs | V=1 | overflow |
| 0111 | vc | V=0 | no overflow |
| 1000 | hi | C=1 and Z=0 | unsigned higher |
| 1001 | ls | C=0 or Z=1 | unsigned lower or same |
| 1010 | ge | N=1 and V=1, or N=0 and V=0 |
greater or equal |
| 1011 | lt | N=1 and V=0, or N=0 and V=1 |
less than |
| 1100 | gt | Z=0, and (N=1 and V=1, or N=0 and V=0) |
greater than |
| 1101 | le | Z=1, or N=1 and V=0, or N=0 and V=1 |
less than or equal |
| 1110 | al | 常に真 | always |
| 1111 | - | - | 使用禁止 |
| {r0,r2} | r0 と r2 |
| {r0-r3} | {r0,r1,r2,r3} と同じ |
| {r8-r10,r1-r3,pc} | {r1,r2,r3,r8,r9,r10,pc} と同じ |
| 領域 | アドレス | バス幅 (bit) |
クロック数 (8/16/32bit) |
|---|---|---|---|
| BIOS ROM | 0x00000000-0x00003fff |
32 | 1/1/1 |
| 外部 RAM | 0x02000000-0x0203ffff |
16 | 3/3/6 |
| 内部 RAM | 0x03000000-0x03007fff |
32 | 1/1/1 |
| I/O レジスタ | 0x04000000-0x040003ff |
32 | 1/1/1 |
| パレット RAM | 0x05000000-0x050003ff |
16 | 1/1/2 |
| ビデオ RAM | 0x06000000-0x06017fff |
16 | 1/1/2 |
| OAM RAM | 0x07000000-0x070003ff |
32 | 1/1/1 |
| lsl | 左論理シフト |
| lsr | 右論理シフト |
| asl | 左算術シフト |
| asr | 右算術シフト |
| ror | 右ローテート |
| 動作 | スタック | その他 |
|---|---|---|
| pre-increment | ED (Empty, Descending) |
IB (Increment Before) |
| post-increment | FD (Full, Descending) |
IA (Increment After) |
| pre-decrement | EA (Empty, Ascending) |
DB (Decrement Before) |
| post-decrement | FA (Full, Ascending) |
DA (Decrement After) |
| 動作 | スタック | その他 |
|---|---|---|
| pre-increment | FA (Full, Ascending) |
IB (Increment Before) |
| post-increment | EA (Empty, Ascending) |
IA (Increment After) |
| pre-decrement | FD (Full, Descending) |
DB (Decrement Before) |
| post-decrement | ED (Empty, Descending) |
DA (Decrement After) |
| 1 | ビット 31〜 8 が全て 0 か全て 1 |
| 2 | ビット 31〜16 が全て 0 か全て 1 |
| 3 | ビット 31〜24 が全て 0 か全て 1 |
| 4 | その他 |
| 1 | ビット 31〜 8 が全て 0 |
| 2 | ビット 31〜16 が全て 0 |
| 3 | ビット 31〜24 が全て 0 |
| 4 | その他 |
| 1 | ビット 31〜 8 が全て 0 か全て 1 |
| 2 | ビット 31〜16 が全て 0 か全て 1 |
| 3 | ビット 31〜24 が全て 0 か全て 1 |
| 4 | その他 |
| THUMB 命令 | 対応する ARM 命令 | 備考 |
|---|---|---|
| mov Rd,#Offset8 | movs Rd,#Offset8 | |
| mov Rd,Hs | mov Rd,Hs | |
| mov Hd,Rs | mov Hd,Rs | |
| mov Hd,Hs | mov Hd,Hs | |
| mvn Rd,Rs | mvns Rd,Rs | |
| lsl Rd,Rs,#Offset5 | movs Rd,Rs,lsl #Offset5 | |
| lsl Rd,Rs | movs Rd,Rd,lsl Rs | |
| lsr Rd,Rs,#Offset5 | movs Rd,Rs,lsr #Offset5 | |
| lsr Rd,Rs | movs Rd,Rd,lsr Rs | |
| asr Rd,Rs,#Offset5 | movs Rd,Rs,asr #Offset5 | |
| asr Rd,Rs | movs Rd,Rd,asr Rs | |
| ror Rd,Rs | movs Rd,Rd,ror Rs | |
| ldr Rd,[pc,#Imm] | ldr Rd,[r15,#Imm] | Imm は 4 の倍数で、0〜1020 まで |
| ldr Rd,[Rb,Ro] | ldr Rd,[Rb,Ro] | |
| ldr Rd,[Rb,#Imm] | ldr Rd,[Rb,#Imm] | Imm は 4 の倍数で、0〜124 まで |
| ldr Rd,[sp,#Imm] | ldr Rd,[r13,#Imm] | Imm は 4 の倍数で、0〜1020 まで |
| ldrb Rd,[Rb,Ro] | ldrb Rd,[Rb,Ro] | |
| ldrb Rd,[Rb,#Offset5] | ldrb Rd,[Rb,#Offset5] | |
| ldrh Rd,[Rb,Ro] | ldrh Rd,[Rb,Ro] | |
| ldrh Rd,[Rb,#Imm] | ldrh Rd,[Rb,#Imm] | Imm は 2 の倍数で、0〜62 まで |
| ldsb Rd,[Rb,Ro] | ldrsb Rd,[Rb,Ro] | ldrsb と記述してもいい |
| ldsh Rd,[Rb,Ro] | ldrsh Rd,[Rb,Ro] | ldrsh と記述してもいい |
| str Rd,[Rb,Ro] | str Rd,[Rb,Ro] | |
| str Rd,[Rb,#Imm] | str Rd,[Rb,#Imm] | Imm は 4 の倍数で、0〜124 まで |
| str Rd,[sp,#Imm] | str Rd,[r13,#Imm] | Imm は 4 の倍数で、0〜1020 まで |
| strb Rd,[Rb,Ro] | strb Rd,[Rb,Ro] | |
| strb Rd,[Rb,#Offset5] | strb Rd,[Rb,#Offset5] | |
| strh Rd,[Rb,#Imm] | strh Rd,[Rb,#Imm] | Imm は 2 の倍数で、0〜62 まで |
| push <Rlist> | stmdb r13!,<Rlist> | r0〜r7、lr が指定可能 |
| pop <Rlist> | ldmia r13!,<Rlist> | r0〜r7、pc が指定可能 |
| ldmia Rb!,<Rlist> | ldmia Rb!,<Rlist> | r0〜r7 が指定可能 |
| stmia Rb!,<Rlist> | stmia Rb!,<Rlist> | r0〜r7 が指定可能 |
| b <Raddr> | b <Raddr> | Raddr は PC+4 から符号付き 12 ビットで表せる範囲 |
| b<Cond> <Raddr> | b<Cond> <Raddr> | Raddr は PC+4 から符号付き 9 ビットで表せる範囲 bal は存在しない |
| bl <Raddr> | bl <Raddr> | Raddr は PC+4 から符号付き 23 ビットで表せる範囲 2 ハーフワード命令 サイクルタイムは 3S+1N |
| bx Rs | bx Rs | |
| bx Hs | bx Hs | PC を指定する場合、命令の置かれている位置は、 ワードアラインメントされていなければならない |
| add Rd,Rs,Rn | adds Rd,Rs,Rn | |
| add Rd,Rs,#Offset3 | adds Rd,Rs,#Offset3 | |
| add Rd,#Offset8 | adds Rd,Rd,#Offset8 | |
| add Rd,Hs | add Rd,Rd,Hs | |
| add Hd,Rs | add Hd,Hd,Rs | |
| add Hd,Hs | add Hd,Hd,Hs | |
| add Rd,sp,#Imm | add Rd,r13,#Imm | Imm は 4 の倍数で、0〜1020 まで |
| add Rd,pc,#Imm | add Rd,r15,#Imm | PC のビット 1 は 0 として扱われる Imm は 4 の倍数で、0〜1020 まで |
| add sp,#Imm add sp,#-Imm |
add r13,r13,#Imm sub r13,r13,#Imm |
sub で記述してもいい Imm は 4 の倍数で、0〜508 まで |
| adc Rd,Rs | adcs Rd,Rd,Rs | |
| sub Rd,Rs,Rn | subs Rd,Rs,Rn | |
| sub Rd,Rs,#Offset3 | subs Rd,Rs,#Offset3 | |
| sub Rd,#Offset8 | subs Rd,Rd,#Offset8 | |
| sbc Rd,Rs | sbcs Rd,Rd,Rs | |
| neg Rd,Rs | rsbs Rd,Rs,#0 | |
| cmn Rd,Rs | cmn Rd,Rs | |
| cmp Rd,#Offset8 | cmp Rd,#Offset8 | |
| cmp Rd,Rs | cmp Rd,Rs | |
| cmp Rd,Hs | cmp Rd,Hs | |
| cmp Hd,Rs | cmp Hd,Rs | |
| cmp Hd,Hs | cmp Hd,Hs | |
| mul Rd,Rs | muls Rd,Rs,Rd | |
| and Rd,Rs | ands Rd,Rd,Rs | |
| bic Rd,Rs | bics Rd,Rd,Rs | |
| orr Rd,Rs | orrs Rd,Rd,Rs | |
| eor Rd,Rs | eors Rd,Rd,Rs | |
| tst Rd,Rs | tst Rd,Rs | |
| swi <Offset8> | swi <Offset8> | |
| adr Rd,<Raddr> | adr Rd,<Raddr> | 疑似命令 |
| nop | nop | 疑似命令 mov r8,r8 に置き換えられる |