我很难理解IT
指令的功能(如果是的话)。快速参考卡上有:
操作:如果然后
汇编程序:IT{pattern} {cond}
动作:根据模式,使以下四条指令成为有条件的。图案是由三个字母组成的字符串。每个字母可以是T(Then)或E(Else)。IT之后的第一条指令具有条件cond。如果对应的字母是T,则以下指令具有条件cond;如果对应的单词是E,则条件cond的倒数。
事实上,这个概要有点道理。架构手册条目并没有让我在理解的过程中取得任何进展
If Then条件指令
语法第二个
其中:
x
为IT块中的第二条指令指定条件开关y
指定IT块中第三条指令的条件开关z
指定IT块中第四条指令的条件开关cond
指定IT块中第一条指令的条件。IT块中第二条、第三条和第四条指令的条件开关可以是:
T
然后将条件cond应用于指令E
其他的将cond的反条件应用于指令。票据
在It指令中,可以使用AL(始终条件)表示cond。如果这样做,IT块中的所有指令都必须是无条件的,并且x、y和z中的每一个都必须是T或省略,而不是E。操作
IT指令包含以下四条条件指令。条件可以完全相同,或者其中一些条件可以是其他条件的逻辑逆。IT指令后面的条件指令形成IT块。
IT块中的指令,包括任何分支,必须在其语法的{cond}部分指定条件。
既然(大多数)每条指令都可以很容易地指定一个条件,那么IT
指令有什么好处?
首先注意,大多数指令可以在ARM指令中指定条件代码,而不是在Thumb中。
使用IT
指令,您最多可以为4条指令指定条件代码。对于每条指令,指定它是if(T)还是Else(E)的一部分。
例如:
ITTET EQ
ADD r0,r0,r0
ADD r1,r0,r0
ADD r2,r0,r0
ADD r3,r0,r0
实际翻译为:
ADDEQ r0,r0,r0 (Always if for 1st one)
ADDEQ r1,r0,r0 (T for 2nd one)
ADDNE r2,r0,r0 (E for 3rd one)
ADDEQ r3,r0,r0 (T for 4th one)
IT
实际上所做的是非常巧妙地将8位信息编码到CPSR的ITSTATE
字段中。最初的Thumb指令集除了分支之外没有条件指令,因为在足够有用的操作码和操作数之上,16位根本没有空间容纳4位条件代码。Thumb-2扩展所做的是对现有的16位编码以及新的32位编码进行条件执行。
如果你查看ARM条件代码,你会注意到3个最高有效位代表一个特定的标志测试,lsb表示一种解释或其完全相反的解释——最初甚至0xF是0xE的"始终"的"从不"对应物——所以你可以用3个位来编码基本条件,并使用另一个5来编码下一条指令的测试评估方式加上一个停止位,以指示剩余的条件化指令的数量。因此,在完全消耗之前,ITSTATE值可以被解压缩为ARM条件代码,并与Thumb指令编码一起被馈送到管道中,Thumb指令代码被解压缩为其等效的ARM指令。
从体系结构的角度来看,这是一个非常酷的功能,尽管编译器工程师和CPU设计师可能不同意;)