A32 Instruction Set

A32 instructions, known as Arm instructions in pre-Armv8 architectures, are 32 bits wide, and are aligned on 4-byte boundaries. A32 instructions are supported by both A-profile and R-profile architectures. 

A32 was traditionally used in applications requiring the highest performance, or for handling hardware exceptions such as interrupts and processor start-up. Much of its functionality was subsumed into T32 with the introduction of Thumb-2 technology. 

Most A32 instructions only execute when previous instructions have set a particular condition code. This means that instructions only have their normal effect on the programmers’ model operation, memory and coprocessors if the N, Z, C and V flags satisfy a condition specified in the instruction. If the flags do not satisfy this condition, the instruction acts as a NOP. This means that execution advances to the next instruction as normal, including any relevant checks for exceptions being taken, but has no other effect. This conditional execution of instructions allows small sections of if- and while-statements to be encoded without the use of branch instructions.

The condition codes are:

 Condition Code Meaning 
 N  Negative condition code. Set to 1 if  result is negative.
 Z  Zero condition code. Set to 1 if the result of the instruction is 0.
 C  Carry condition code. Set to 1 if the instruction results in a carry condition.
 V  Overflow condition code. Set to 1 if the instruction results in an overflow condition.