You copied the Doc URL to your clipboard.

3.5.5. MOV and MVN

Move and Move NOT.


MOV{S} Rd, Rm
MOVSRd, #imm



Is an optional suffix. If S is specified, the condition code flags are updated on the result of the operation, see Conditional execution.


Is the destination register.


Is a register.


Is any value in the range 0-255.


The MOV instruction copies the value of Rm into Rd.

The MOVS instruction performs the same operation as the MOV instruction, but also updates the N and Z flags.

The MVNS instruction takes the value of Rm, performs a bitwise logical negate operation on the value, and places the result into Rd.


In these instructions, Rd, and Rm must only specify R0-R7.

When Rd is the PC in a MOV instruction:

  • Bit[0] of the result is discarded.

  • A branch occurs to the address created by forcing bit[0] of the result to 0. The T-bit remains unmodified.


Though it is possible to use MOV as a branch instruction, ARM strongly recommends the use of a BX or BLX instruction to branch for software portability.

Condition flags

If S is specified, these instructions:

  • Update the N and Z flags according to the result.

  • Do not affect the C or V flags.


    MOVS  R0, #0x000B     ; Write value of 0x000B to R0, flags get updated
    MOVS  R1, #0x0        ; Write value of zero to R1, flags are updated
    MOV   R10, R12        ; Write value in R12 to R10, flags are not updated
    MOVS  R3, #23         ; Write value of 23 to R3
    MOV   R8, SP          ; Write value of stack pointer to R8
    MVNS  R2, R0          ; Write inverse of R0 to the R2 and update flags
Was this page helpful? Yes No