ARM 指令 IT

3,779 阅读3分钟

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 指令总会得到执行,即使无法满足其条件也如此。


条件后缀 标志寄存器 含义
EQ Z == 1 等于
NE Z == 0 不等于
CS/HS C == 1 无符号大于或相同
CC/LO C == 0 无符号小于
MI N == 1 负数
PL N == 0 整数或零
VS V == 1 溢出
VC V == 0 无溢出
HI C == 1 && Z == 0 无符号大于
LS C == 1 or Z == 0 无符号小于或相同
GE N == V 有符号大于或等于
LT N != V 有符号小于
GT Z == 0 && N == V 有符号大于
LE Z == 1 or N != V 有符号小于或等于
AL 任何 始终。不可用于B{cond}中

下面这个例子,意思是,当条件“EQ”符合时,执行指令1、3、4的mov操作,否则执行指令2的mov操作。

ITETT EQ
MOVEQ R0, #1 ;//指令1
MOVNE R0, #0 ;//指令2
MOVEQ R1, #0 ;//指令3
MOVEQ R2, #0 ;//指令4

这是刚刚一个程序的代码

LSLS    R2,R1,#1    ;R1 << 1,差不多就是R1*2,结果放在R2
CMP     R4,R2       ;R4 - R2,判断R4 > R2
IT CC               ;如果R4 < R2,就执行MOVCC,否则跳过MOVCC
MOVCC   R4,R2       ;这里是将R1*2的值R2给R4

限制

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

IT
CBZ 和 CBNZ
TBB 和 TBH
CPS、CPSID 和 CPSIE
SETEND

使用 IT 块时的其他限制有:

跳转指令或修改 pc 的任何指令只能是 IT 块中的最后一个指令。 无法跳转到 IT 块中的任何指令,除非在从异常处理程序返回时。 不能在 IT 块中使用任何汇编器指令。

体系结构

此 16 位 Thumb 指令可用于 ARMv6T2 及更高版本

博客:2h0n9