ビット数 | 名称 | データ記述 | メモリ確保記述 |
---|---|---|---|
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 に置き換えられる |