ARM7IT(if-then)指令的真正作用是什么



我很难理解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设计师可能不同意;)

相关内容

  • 没有找到相关文章

最新更新