4.3.6. CMP 및 CMN

비교 및 음수 비교

구문

CMP{cond} Rn, Operand2
CMN{cond} Rn, Operand2

인수 설명:

cond

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

Rn

첫 번째 피연산자가 들어 있는 ARM 레지스터입니다.

Operand2

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

사용법

이러한 명령어는 레지스터 값을 Operand2와 비교하며 결과에서 조건 플래그를 업데이트하지만 레지스터에 결과를 배치하지 않습니다.

CMP 명령어는 Rn의 값에서 Operand2의 값을 뺍니다. 이 명령어는 결과가 버려진다는 점을 제외하고 SUBS 명령어와 동일합니다.

CMN 명령어는 Rn의 값에 Operand2의 값을 더합니다. 이 명령어는 결과가 버려진다는 점을 제외하고 ADDS 명령어와 동일합니다.

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

ARM 명령어에서 pc 사용

Note

이러한 ARM 명령어에서 pc (r15) 를 향후 사용할 수 없습니다.

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

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

Thumb-2 명령어에서 pc 사용

이러한 명령어의 피연산자에 pc (r15) 를 사용할 수 없습니다.

조건 플래그

이러한 명령어는 결과에 따라 N, Z, C 및 V 플래그를 업데이트합니다.

16비트 명령어

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

CMP Rn, Rm

CMN Rn, Rm

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

CMP Rn, #imm

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

예제

    CMP     r2, r9
    CMN     r0, #6400
    CMPGT   r13, r7, LSL #2

올바르지 않은 예제

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