IT

IT(If-Then)命令は、後続の 1 つの命令(IT ブロック)を条件付き命令にします。条件付き命令は、16 ビット命令の制限されたセットからのものでなければなりません。

IT ブロックには 2 ~ 4 個の条件付き命令を含めることができます。条件はすべて同じにすることも、論理的に逆の条件を混在させることも可能ですが、これは非推奨です。

Show/hide構文

IT cond

各項目には以下の意味があります。

cond

次の命令の条件を指定します。

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 命令を除く)では、構文の {cond} の部分の条件を指定する必要があります。

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

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

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

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

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

Note

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

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

Show/hide制約条件

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

  • IT

  • CBZ および CBNZ

  • TBB および TBH

  • CPSCPSID、および CPSIE

  • SETEND

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

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

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

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

Note

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

IT ブロックでのTable 9 にリストされていない命令の使用は非推奨です。また、IT ブロックでの R15(PC)への明示的な参照も非推奨です。

Table 9. IT ブロック内で使用できる命令

16 ビット命令非推奨
MOVMVNRm または Rd が PC である場合
LDRLDRBLDRHLDRSBLDRSHPC 相対形式の場合
STRSTRBSTRH-
ADDADCRSBSBCSUBADD SP, SP, #imm または SUB SP, SP, #imm、あるいは RmRdnRdm のいずれかが PC である場合
CMPCMNRm または Rn が PC である場合
MUL-
ASRLSLLSRROR-
ANDBICEORORRTST-
BXBLXRm が PC である場合

Show/hide条件フラグ

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

Show/hide例外

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

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

Show/hide可用性

この 16 ビット命令は、T32 でのみ使用できます。

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

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

Show/hide

    IT     GT
    LDRGT  r0, [r1,#4]

    IT     EQ
    ADDEQ  r0, r1, r2

Show/hide誤用例

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

    ITT    EQ
    MOVEQ  r0,r1
    ADDEQ  r0,r0,#1  ; 複数の命令を含む IT ブロックは非推奨

    IT     GT
    LDRGT  r0,label  ; LDR(PC 相対)は IT ブロックで非推奨

    IT     EQ
    ADDEQ  PC,r0     ; Rdn が PC の場合、ADD は非推奨
Copyright © 2014 ARM. All rights reserved.ARM DUI 0802AJ
Non-ConfidentialID061814