All instructions are conditionally executed. If the condition in the top four bits of the instruction is not met, then even illegal instructions will have no effect...
Condition field Execute IF
0000 EQ : Z (equal)
0001 NE : ~Z (not equal)
0010 CS/HS : C (unsigned higher or same)
0011 CC/LO : ~C (unsigned lower)
0100 MI : N (negative)
0101 PL : ~N (positive or zero)
0110 VS : V (overflow)
0111 VC : ~V (no overflow)
1000 HI : C and ~Z (unsigned higher)
1001 LS : ~C or Z (unsigned lower or same)
1010 GE : N = V (signed higher or same)
1011 LT : N <> V (signed lower)
1100 GT : ~Z and (N = V) (signed higher)
1101 LE : Z or (N <> V) (signed lower or same)
1110 AL : 1 (always)
1111 NV : 0 (see notes)
Where 1 is true, 0 is false, ~ is NOT
Notes:
Prior to ARM architecture 3, a condition code of 1111 would be executed "never".
In ARM architecture 3 and 4 the result of such an opcode was unpredictable.
In ARM architecture 5 and above, it has allowed an extension to the instruction set by using it as a marker for additional instructions which are executed unconditionally.
If you still want a no-op, you should use something like MOV R0,R0.
|
|
|