| |||
| Home > Introduction > Instruction set summary > ARM instruction summary | |||
The ARM instruction set summary is listed in Table 1.2.
Table 1.2. ARM instruction summary
Operation | Assembly syntax | |
|---|---|---|
Move | Move |
|
Move NOT |
| |
Move SPSR to register |
| |
Move CPSR to register |
| |
Move register to SPSR |
| |
Move register to CPSR |
| |
Move immediate to SPSR flags |
| |
Move immediate to CPSR flags |
| |
Arithmetic | Add |
|
Add with carry |
| |
Subtract |
| |
Subtract with carry |
| |
Subtract reverse subtract |
| |
Subtract reverse subtract with carry |
| |
Multiply |
| |
Multiply accumulate |
| |
Multiply unsigned long |
| |
Multiply unsigned accumulate long |
| |
Multiply signed long |
| |
Multiply signed accumulate long |
| |
Compare |
| |
Compare negative |
| |
Logical | Test |
|
Test equivalence |
| |
AND |
| |
EOR |
| |
ORR |
| |
Bit clear |
| |
Branch | Branch |
|
Branch with link |
| |
Branch and exchange instruction set |
| |
Load | Word |
|
Word with user-mode privilege |
| |
Byte |
| |
Byte with user-mode privilege |
| |
Byte signed |
| |
Halfword |
| |
Halfword signed |
| |
Multiple block data operations | - | |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
Store | Word |
|
Word with user-mode privilege |
| |
Byte |
| |
Byte with user-mode privilege |
| |
Halfword |
| |
Multiple block data operations | - | |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
Swap | Word |
|
Byte |
| |
Coprocessors | Data operation |
|
Move to ARM register from coprocessor |
| |
Move to coprocessor from ARM register |
| |
Load |
| |
Store |
| |
Software interrupt |
|
The addressing modes are procedures shared by different instructions for generating values used by the instructions. The five addressing modes used by the ARM7TDMI processor are:
Shifter operands for data processing instructions.
Load and store word or unsigned byte.
Load and store halfword or load signed byte.
Load and store multiple.
Load and store coprocessor.
The addressing modes are listed with their types and mnemonics Table 1.3.
Table 1.3. Addressing modes
| Addressing mode | Type or addressing mode | Mnemonic or stack type |
|---|---|---|
| Mode 2 <a_mode2> | Immediate offset | [Rn, #+/-12bit_Offset] |
Register offset | [Rn, +/-Rm] | |
Scaled register offset | [Rn, +/-Rm, LSL #5bit_shift_imm] | |
[Rn, +/-Rm, LSR #5bit_shift_imm] | ||
[Rn, +/-Rm, ASR #5bit_shift_imm] | ||
[Rn, +/-Rm, ROR #5bit_shift_imm] | ||
[Rn, +/-Rm, RRX] | ||
Pre-indexed offset | - | |
Immediate | [Rn, #+/-12bit_Offset]! | |
Register | [Rn, +/-Rm]! | |
Scaled register | [Rn, +/-Rm, LSL #5bit_shift_imm]! | |
[Rn, +/-Rm, LSR #5bit_shift_imm]! | ||
[Rn, +/-Rm, ASR #5bit_shift_imm]! | ||
[Rn, +/-Rm, ROR #5bit_shift_imm]! | ||
[Rn, +/-Rm, RRX]! | ||
Post-indexed offset | - | |
Immediate | [Rn], #+/-12bit_Offset | |
Register | [Rn], +/-Rm | |
Scaled register | [Rn], +/-Rm, LSL #5bit_shift_imm | |
[Rn], +/-Rm, LSR #5bit_shift_imm | ||
[Rn], +/-Rm, ASR #5bit_shift_imm | ||
[Rn], +/-Rm, ROR #5bit_shift_imm | ||
[Rn, +/-Rm, RRX] | ||
| Mode 2, privileged <a_mode2P> | Immediate offset | [Rn, #+/-12bit_Offset] |
Register offset | [Rn, +/-Rm] | |
Scaled register offset | [Rn, +/-Rm, LSL #5bit_shift_imm] | |
[Rn, +/-Rm, LSR #5bit_shift_imm] | ||
[Rn, +/-Rm, ASR #5bit_shift_imm] | ||
[Rn, +/-Rm, ROR #5bit_shift_imm] | ||
[Rn, +/-Rm, RRX] | ||
Post-indexed offset | - | |
Immediate | [Rn], #+/-12bit_Offset | |
Register | [Rn], +/-Rm | |
Scaled register | [Rn], +/-Rm, LSL #5bit_shift_imm | |
[Rn], +/-Rm, LSR #5bit_shift_imm | ||
[Rn], +/-Rm, ASR #5bit_shift_imm | ||
[Rn], +/-Rm, ROR #5bit_shift_imm | ||
[Rn, +/-Rm, RRX] | ||
| Mode 3, <a_mode3> | Immediate offset | [Rn, #+/-8bit_Offset] |
Pre-indexed | [Rn, #+/-8bit_Offset]! | |
Post-indexed | [Rn], #+/-8bit_Offset | |
Register | [Rn, +/-Rm] | |
Pre-indexed | [Rn, +/-Rm]! | |
Post-indexed | [Rn], +/-Rm | |
Mode 4, load <a_mode4L> | IA, increment after | FD, full descending |
IB, increment before | ED, empty descending | |
DA, decrement after | FA, full ascending | |
DB decrement before | EA, empty ascending | |
Mode 4, store <a_mode4S> | IA, increment after | FD, full descending |
IB, increment before | ED, empty descending | |
DA, decrement after | FA, full ascending | |
DB decrement before | EA, empty ascending | |
| Mode 5, coprocessor data transfer <a_mode5> | Immediate offset | [Rn, #+/-(8bit_Offset*4)] |
Pre-indexed | [Rn, #+/-(8bit_Offset*4)]! | |
Post-indexed | [Rn], #+/-(8bit_Offset*4) |
An operand is the part of the instruction that references data or a peripheral device. Operand 2 is listed in Table 1.4.
Table 1.4. Operand 2
| Operand | Type | Mnemonic |
|---|---|---|
| Operand 2 <Oprnd2> | Immediate value | #32bit_Imm |
Logical shift left | Rm LSL #5bit_Imm | |
Logical shift right | Rm LSR #5bit_Imm | |
Arithmetic shift right | Rm ASR #5bit_Imm | |
Rotate right | Rm ROR #5bit_Imm | |
Register | Rm | |
Logical shift left | Rm LSL Rs | |
Logical shift right | Rm LSR Rs | |
Arithmetic shift right | Rm ASR Rs | |
Rotate right | Rm ROR Rs | |
Rotate right extended | Rm RRX |
Fields are listed in Table 1.5.
Condition fields are listed in Table 1.6.
Table 1.6. Condition fields
| Field type | Suffix | Description | Condition |
|---|---|---|---|
Condition {cond} | EQ | Equal | Z set |
NE | Not equal | Z clear | |
CS | Unsigned higher, or same | C set | |
CC | Unsigned lower | C clear | |
MI | Negative | N set | |
PL | Positive, or zero | N clear | |
VS | Overflow | V set | |
VC | No overflow | V clear | |
HI | Unsigned higher | C set, Z clear | |
LS | Unsigned lower, or same | C clear, Z set | |
GE | Greater, or equal | N=V (N and V set or N and V clear) | |
LT | Less than | N<>V (N set and V clear) or (N clear and V set) | |
GT | Greater than | Z clear, N=V (N and V set or N and V clear) | |
LE | Less than, or equal | Z set or N<>V (N set and V clear) or (N clear and V set) | |
AL | Always | Flag ignored |