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 的相反条件应用于指令。

用法

除了 CMPCMN,TST 之外,通常会影响条件代码标记的 16 位指令在用于 IT 块内时,不会影响这些标记。

IT 块中 BKPT 指令总会得到执行,即使无法满足其条件也如此。

Note

可以通过 AL 条件将 IT 块用于无条件执行指令。

IT 块内条件跳转的跳转范围比 IT 块外部的跳转的范围大。

限制

不允许在 IT 块中使用下面的指令:

  • IT

  • CBZCBNZ

  • TBBTBH

  • CPSCPSIDCPSIE

  • 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 块中有不可预知结果的指令(例如 BBLCPS),汇编器会发出警告。 另外,如果有 pc 更改指令(例如 BXCBZRFE),也会发出警告。

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