4.3.7. MOV 및 MVN

이동 및 이동하지 않음

구문

MOV{S}{cond} Rd, Operand2
MOV{cond} Rd, #imm16
MVN{S}{cond} Rd, Operand2

인수 설명:

S

선택적 접미사입니다. S를 지정하면 연산 결과의 조건 코드 플래그가 업데이트됩니다 (조건부 실행 참조).

cond

선택적 조건 코드입니다 (조건부 실행 참조).

Rd

대상 레지스터입니다.

Operand2

유연한 두 번째 피연산자입니다. 옵션에 대한 자세한 내용은 유연한 두 번째 피연산자를 참조하십시오.

imm16

0 ~ 65535 범위에 있는 값입니다.

사용법

MOV 명령어는 Operand2의 값을 Rd로 복사합니다.

MVN 명령어는 Operand2 값을 가지고 값에 대해 비트 단위 논리 NOT 연산을 수행한 후 결과를 Rd에 배치합니다.

경우에 따라 어셈블러에서 MVNMOV로 또는 MOVMVN으로 대체할 수 있습니다. 디스어셈블리 목록을 읽을 때는 이러한 사항에 주의해야 합니다. 자세한 내용은 명령어 대체를 참조하십시오.

Thumb-2 MOV 및 MVN에서 pc 사용

Thumb-2 MOV 또는 MVN 명령어에서는 Rd 또는 Operand2에 pc (r15) 를 사용할 수 없습니다.

ARM MOV 및 MVN에서 pc 사용

Note

MOV Rd,Rm 구문은 Rd 또는 Rn = pc와 함께 사용할 수 있지만 둘 모두와 함께 사용할 수는 없습니다. 다른 모든 경우는 향후 제공되지 않을 예정입니다.

pc를 Rd로 사용하면 명령어 주소에 8을 더한 값이 사용됩니다.

pc를 Rd로 사용할 경우 다음 사항이 적용됩니다.

  • 실행이 결과에 해당하는 주소로 분기됩니다.

  • S 접미사를 사용하면 현재 모드의 SPSR이 CPSR로 복사됩니다. 이 접미사를 사용하여 예외에서 복귀할 수 있습니다 (개발자 설명서의 6장 프로세서 예외 처리 참조).

Caution

사용자 모드 또는 시스템 모드에서 pc를 Rd로 사용할 경우 S 접미사를 사용하면 안 됩니다. 이러한 명령어를 실행하면 예상할 수 없는 결과가 발생하지만 어셈블러에서 어셈블리 타임에 경고를 표시할 수 없습니다.

레지스터에 의해 제어된 시프트가 있는 데이터 처리 명령어에서는 Rd 또는 피연산자에 pc를 사용할 수 없습니다 (유연한 두 번째 피연산자 참조).

조건 플래그

S를 지정하면 이러한 명령어는 다음을 수행합니다.

  • 결과에 따라 N 및 Z 플래그를 업데이트합니다.

  • Operand2를 계산하는 동안 C 플래그를 업데이트할 수 있습니다 (유연한 두 번째 피연산자 참조).

  • V 플래그를 변경하지 않습니다.

16비트 명령어

이러한 명령어의 다음 형식은 Thumb-2 이전 Thumb 코드에서 사용할 수 있으며, Thumb-2 코드에서 사용될 경우 16비트 명령어입니다.

MOVS Rd, #imm

Rd가 Lo 레지스터여야 합니다. imm 범위 0 ~ 255

MOVS Rd, Rm

RdRm은 모두 Lo 레지스터여야 합니다.

MOV Rd, Rm

ARMv6 이하의 경우 Rd 또는 Rm이나 둘 다가 Hi 레지스터여야 합니다. ARMv6 이상에서는 이 제한이 적용되지 않습니다.

아키텍처

#imm16 형식의 ARM 명령어는 ARMv6T2 이상에서 사용할 수 있습니다. ARM 명령어의 다른 형식은 모든 버전의 ARM 아키텍처에서 사용할 수 있습니다.

이러한 32비트 Thumb 명령어는 ARMv6T2 이상에서 사용할 수 있습니다.

이러한 16비트 Thumb 명령어는 ARM 아키텍처의 모든 T 변형에서 사용할 수 있습니다.

예제

    MVNNE   r11, #0xF000000B ; ARM only. This constant is not available in T2.

올바르지 않은 예제

    MVN     pc,r3,ASR r0     ; pc not permitted with register controlled shift
Copyright © 2002-2008 ARM Limited. All rights reserved.ARM DUI 0204IK
Non-Confidential