4.8.2. IT

IT (If-Then) 명령어는 다음 명령어 (IT 블록) 를 최대 네 개까지 조건 명령어로 만듭니다. 조건은 모두 동일할 수도 있고 일부 명령어의 조건이 다른 명령어의 조건과 논리적으로 반대일 수도 있습니다.

IT 블록의 명령어 (분기 포함) 는 구문의 {cond} 부분에서 조건도 지정해야 합니다.

어셈블러가 다음 명령어에 지정되어 있는 조건에 따라 IT 명령어를 자동으로 생성하므로, 코드에서 해당 명령어를 작성할 필요가 없습니다. 그러나 IT 명령어를 작성하는 경우에는 어셈블러가 IT 명령어에 지정되어 있는 조건을 다음 명령어에 지정되어 있는 조건에 대해 확인합니다.

IT 명령어를 작성하면 코드 디자인에서 조건 명령어 배치와 조건 선택을 고려할 수 있습니다.

ARM 코드로 어셈블할 때도 어셈블러는 동일한 확인을 수행하지만, 이 경우에는 IT 명령어를 생성하지 않습니다.

구문

IT{x{y{z}}} {cond}

인수 설명:

x

IT 블록의 두 번째 명령어에 대한 조건 스위치를 지정합니다.

y

IT 블록의 세 번째 명령어에 대한 조건 스위치를 지정합니다.

z

IT 블록의 네 번째 명령어에 대한 조건 스위치를 지정합니다.

cond

IT 블록의 첫 번째 명령어에 대한 조건을 지정합니다.

IT 블록의 두 번째, 세 번째 및 네 번째 명령어에 대한 조건 스위치는 다음 중 하나일 수 있습니다.

T

Then. cond 조건을 명령어에 적용합니다.

E

Else. cond의 반대 조건을 명령어에 적용합니다.

사용법

CMP, CMN,TST를 제외하면, 일반적으로는 조건 코드 플래그에 영향을 주는 16비트 명령어는 IT 블록 내에서 사용될 때 해당 플래그에 영향을 주지 않습니다.

IT 블록의 BKPT 명령어는 조건이 실패한 경우에도 항상 실행됩니다.

Note

AL을 사용하여 무조건 명령어에 대해 IT 블록을 사용할 수 있습니다.

IT 블록 내의 조건 분기는 IT 블록 외부의 조건 분기에 비해 분기 범위가 더 깁니다.

제한

다음 명령어는 IT 블록에서 사용할 수 없습니다.

  • IT

  • CBZCBNZ

  • TBBTBH

  • CPS, CPSIDCPSIE

  • SETEND

IT 블록을 사용할 때 적용되는 기타 제한은 다음과 같습니다.

  • pc를 수정하는 분기 또는 명령어는 블록의 마지막 명령어인 경우에만 IT 블록에서 사용할 수 있습니다.

  • 예외 처리기에서 복귀하는 경우가 아니면 IT 블록의 명령어로 분기할 수 없습니다.

  • IT 블록에는 어셈블러 지시어를 사용할 수 없습니다.

조건 플래그

이 명령어는 플래그를 변경하지 않습니다.

예외

IT 명령어와 해당 IT 블록 사이 또는 IT 블록 내에서는 예외가 발생할 수 있습니다. 이러한 예외가 발생하면 lr 및 SPSR에 적합한 반환 정보가 포함된 적절한 예외 처리기가 시작됩니다.

예외 반환에 사용되도록 설계된 명령어는 예외에서 복귀하고 IT 블록의 실행을 올바로 다시 시작하는 기본 방법으로 사용될 수 있습니다. 이것은 pc 수정 명령어를 IT 블록의 명령어로 분기할 수 있는 유일한 방법입니다.

아키텍처

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

예제

    ITTE   NE        ; IT can be omitted
    ANDNE  r0,r0,r1  ; 16-bit AND, not ANDS
    ADDSNE r2,r2,#1  ; 32-bit ADDS (16-bit ADDS does not set flags in IT block) 
    MOVEQ  r2,r3     ; 16-bit MOV
    ITT    AL        ; emit 2 non-flag setting 16-bit instructions
    ADDAL  r0,r0,r1  ; 16-bit ADD, not ADDS
    SUBAL  r2,r2,#1  ; 16-bit SUB, not SUB
    ADD    r0,r0,r1  ; expands into 32-bit ADD
    IT     NE
    ADD    r0,r0,r1  ; syntax error: no condition code used in IT block
    ITT    EQ        
    MOVEQ  r0,r1
    BEQ    dloop     

메모

IT 블록의 예상할 수 없는 명령어

어셈블러에서는 IT 블록에 예상할 수 없는 명령어 (예: B, BLCPS) 에 대해 경고를 표시합니다. 또한 pc를 변경하는 명령어 (예: BX, CBZRFE) 에 대해서도 경고를 표시합니다.

Copyright © 2002-2008 ARM Limited. All rights reserved.ARM DUI 0204IK
Non-Confidential