我很难理解IT指令的功能(如果是那样的话)。快速参考卡有以下内容:
操作:如果-然后 汇编程序:
IT{pattern} {cond}动作:根据模式,有条件地组成以下四个指令。模式是最多由三个字母组成的字符串。每个字母可以是T(然后)或E(其他)。IT后的第一条指令具有条件一致性。下面的指令如果对应的字母为T,则为cond条件;如果对应的字母为E,则为cond的逆条件。
实际上,这个大纲有点道理。架构人工录入并没有让我在理解的过程中取得任何进展:
如果-那么条件指令。 语法 {y{z}} 其中:
x为IT块中的第二条指令指定条件开关。y为IT块中的第三条指令指定条件开关。z为IT块中的第四条指令指定条件开关。cond指定IT块中第一条指令的条件。 IT块中第二、第三和第四条指令的条件开关可以是: 然后是T。将条件cond应用于指令。 其他的E。将cond的逆条件应用于指令。注意,可以在It指令中对cond使用AL (总是条件)。如果这样做了,IT块中的所有指令都必须是无条件的,x、y和z中的每一个都必须是T或省略,而不是E。 IT指令构成以下四个指令的条件。条件可以是相同的,也可以是其他条件的逻辑逆条件。IT指令后面的条件指令构成IT块。 IT块中的指令(包括任何分支)必须在其语法的{cond}部分中指定条件。
既然(大多数)每个指令都可以很容易地指定一个条件,那么IT指令有什么好处呢?
发布于 2016-04-11 21:05:58
首先要注意的是,大多数指令都可以在ARM指令中指定条件代码,而不是拇指指令。
使用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)发布于 2016-04-11 21:29:15
IT实际上所做的是非常聪明的CPSR领域。原来的拇指指令集除了分支没有附加条件的指令,因为在足够的操作码和操作数的基础上,根本没有16位的空间来容纳一个4位的条件代码。拇指-2扩展所做的是将条件执行改造为那些现有的16位编码,以及新的32位编码。
如果您查看ARM条件代码,您会注意到3个最重要的位表示一个特定的标志测试,lsb表示一种解释或与其完全相反的一种解释--甚至0xF最初也是0XE的“始终”的“从不”对应,因此您可以将基本条件编码为3位,并使用其他5位来编码测试应该以哪种方式对下一条指令进行求值,并使用一个停止位来指示需要附加条件的指令数量。因此,在完全消耗ITSTATE值之前,可以将ITSTATE值解压到ARM条件代码中,并与拇指指令编码一起被解压到其等效的ARM指令中,并直接输入管道。
从架构的角度来看,这是一个非常酷的特性,尽管编译器工程师和CPU设计人员可能不同意;)
https://stackoverflow.com/questions/36558926
复制相似问题