| |||
| Home > Writing ARM Assembly Language > Overview of the ARM architecture > Instruction capabilities | |||
This section contains the following subsections:
Almost all ARM instructions can be executed conditionally on the value of the ALU status flags in the CPSR. You do not have to use branches to skip conditional instructions, although it can be better to do so when a series of instructions depend on the same condition.
In Thumb state on processors without Thumb-2, the only mechanism for conditional execution is a conditional branch. Most data processing instructions update the ALU flags. You cannot generally specify whether instructions update the state of the ALU flags or not.
Thumb-2 provides an alternative mechanism for conditional
execution, using the IT (If-Then) instruction and the
same ALU flags. IT is a 16-bit instruction that provides conditional
execution of up to four following instructions. There are also several
other instructions providing additional mechanisms for conditional
execution.
In ARM and Thumb-2 code, you can specify whether a data processing instruction updates the ALU flags or not. You can use the flags set by one instruction to control execution of other instructions even if there are many instructions in between.
See Conditional execution for a detailed description.
In ARM state, all instructions can access r0 to r14, and most
can also access r15 (pc). The MRS and MSR instructions
can move the contents of the CPSR and SPSRs to a general-purpose
register, where they can be manipulated by normal data processing operations.
See MRS and MSR for more information.
Thumb state on Thumb-2 processors provides the same facilities, except that some of the less useful accesses to r15 are not permitted.
In Thumb state on processors without Thumb-2, most instructions can only access r0 to r7. Only a small number of instructions can access r8 to r15. Registers r0-r7 are called Lo registers. Registers r8-r15 are called Hi registers.
The ARM arithmetic logic unit has a 32-bit barrel shifter that is capable of shift and rotate operations. The second operand to all ARM and Thumb-2 data-processing and single register data-transfer instructions can be shifted, before the data-processing or data-transfer is executed, as part of the instruction. This supports, but is not limited to:
scaled addressing
multiplication by a constant
constructing constants.
See Loading constants into registers for more information on using the barrel shifter to generate constants.
Thumb-2 instructions give almost the same access to the barrel shifter as ARM instructions.
The Thumb instruction set available on processors without Thumb-2 only allows access to the barrel shifter using separate instructions.