ARM - IT
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操作。
1 | ITETT EQ |
这是刚刚一个程序的代码
1 | LSLS R2,R1,#1 ;R1 << 1,差不多就是R1*2,结果放在R2 |
限制
不允许 在 IT 块中使用下面的指令:
1 | IT |
使用 IT 块时的其他限制有:
跳转指令或修改 pc 的任何指令只能是 IT 块中的最后一个指令。
无法跳转到 IT 块中的任何指令,除非在从异常处理程序返回时。
不能在 IT 块中使用任何汇编器指令。
体系结构
此 16 位 Thumb 指令可用于 ARMv6T2 及更高版本