IT

IT(If-Then)命令は、後続の最大 4 個の命令(IT ブロック)を条件付き命令にします。条件はすべて同じにすることも、論理的に逆の条件を混在させることも可能です。

Show/hide構文

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

各パラメータには以下の意味があります。

x

IT ブロックで 2 番目の命令の条件スイッチを指定します。

y

IT ブロックで 3 番目の命令の条件スイッチを指定します。

z

IT ブロックで 4 番目の命令の条件スイッチを指定します。

cond

IT ブロックで最初の命令の条件を指定します。

IT ブロックで 2 ~ 4 番目の命令の条件スイッチは、以下のいずれかにすることができます。

T

Then。条件 cond を命令に適用します。

E

Else。cond の逆条件を命令に適用します。

Show/hide使用法

BKPT 命令を除き、IT ブロック内の命令(分岐も含む)では、構文の {cond} の部分の条件を指定する必要があります。

コード内に IT 命令を記述する必要はありません。後続の命令に指定された条件に従って、アセンブラにより自動的に生成されるからです。ただし、IT 命令を記述すると、アセンブラは IT 命令に指定された条件を、後続の命令に指定された条件と突き合わせて検証します。

IT 命令を記述すると、コード設計における条件付き命令の配置および条件の選択を確実に検討することができるようになります。

ARM コードにアセンブルするときにも、アセンブラは同じチェックを行いますが、IT 命令は生成しません。

16 ビット命令は通常は条件コードフラグに影響を及ぼしますが、IT ブロック内で使用されるときには影響を及ぼしません。ただし、CMPCMN、および TST は例外です。

IT ブロック内の BKPT 命令は必ず実行されるため、構文の {cond} の部分で条件を指定する必要はありません。IT ブロックは次の命令から継続されます。

Note

AL 条件を使用することによって、無条件命令に対しても IT ブロックを使用することができます。

条件分岐の分岐の範囲は、IT ブロック内の方が IT ブロック外より長くなります。

Show/hide制約条件

IT ブロック内では、以下の命令を使用できません。

  • IT

  • CBZ および CBNZ

  • TBB および TBH

  • CPSCPSID、および CPSIE

  • SETEND

IT ブロック使用時のその他の制約条件は、以下のとおりです。

  • 分岐または PC を変更する命令が、ブロック内で最後の命令である場合、使用できるのは IT ブロック内に限られます。

  • 例外ハンドラから復帰する場合でない限り、IT ブロック内ではどの命令にも分岐できません。

  • IT ブロック内でアセンブラディレクティブを使用することはできません。

Note

これらの命令のいずれかが IT ブロック内で使用されている場合、診断メッセージが表示されます。

Show/hide条件フラグ

この命令によるフラグへの影響はありません。

Show/hide例外

IT 命令とそれに対応する IT ブロックの間、または IT ブロックの内部で例外が発生する場合があります。例外が発生すると、適切な例外ハンドラが始され、適切な復帰情報が LR と SPSR に格納されます。

例外からの復帰に使用する目的で設計された命令は、例外から復帰するために通常どおり使用可能であり、IT ブロックの実行は正常に再開されます。これは、プログラムカウンタを変更する命令が、IT ブロック内の命令に分岐する唯一の方法です。

Show/hideアーキテクチャ

この 16 ビット Thumb 命令は ARMv6T2 以降で使用できます。

ARM コードにおける IT は、コードを生成しない疑似命令です。

この命令の 32 ビットバージョンはありません。

Show/hide

    ITTE   NE        ; IT は省略可能
    ANDNE  r0,r0,r1  ; 16 ビット AND(ANDS ではない)
    ADDSNE r2,r2,#1  ; 32 ビット ADDS(16 ビット ADDS の場合は IT ブロックにフラグは設定されない)
    MOVEQ  r2,r3     ; 16 ビット MOV

    ITT    AL        ; フラグを設定しない 16 ビット命令を 2 つ生成する
    ADDAL  r0,r0,r1  ; 16 ビット ADD(ADDS ではない)
    SUBAL  r2,r2,#1  ; 16 ビット SUB(SUB ではない)
    ADD    r0,r0,r1  ; 32 ビット ADD に展開する。IT ブロックでは使用しない

    ITT    EQ        
    MOVEQ  r0,r1
    BEQ    dloop     ; IT ブロック末尾での分岐は可能

    ITT    EQ
    MOVEQ  r0,r1
    BKPT   #1        ; BKPT 命令は必ず実行される
    ADDEQ  r0,r0,#1     

Show/hide誤用例

    IT     NE
    ADD    r0,r0,r1  ; 構文エラー:IT ブロック内で条件コードが使用されていない

     
Copyright © 2010-2011 ARM. All rights reserved.ARM DUI 0489FJ
Non-ConfidentialID111211