wal*_*lyk 7 arm cpu-architecture machine-instruction
我无法绕过IT指令的功能(如果那样).该快速参考卡有这样的:
操作:If-Then
汇编程序:IT{pattern} {cond}
操作:根据模式,最多可以有条件地执行以下四条指令.pattern是一个最多三个字母的字符串.每个字母可以是T(Then)或E(Else).IT之后的第一条指令条件为cond.如果相应的字母是T,则以下指令具有条件cond,或者如果相应的字母是E,则具有cond的反转.
实际上,这个概要有点意义.体系结构手册条目并没有让我在理解之旅的任何地方:
If-Then条件指令.
句法IT {x {y {z}}} cond
其中:
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指令有什么用处?
Dri*_*512 10
首先请注意,大多数指令可以在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
Run Code Online (Sandbox Code Playgroud)
实际上会转换为:
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)
Run Code Online (Sandbox Code Playgroud)
什么IT实际上确实是编码的8位信息到ITSTATE该CPSR的领域非常巧妙。原始的Thumb指令集除分支外没有任何条件指令,因为在足够的操作码和操作数之上,只有16位空间不足以容纳4位条件代码,因此操作数和操作数都没有用。什么Thumb-2的扩展做的是改造条件执行那些现有的16位编码,沿着新的32位的。
如果看一下ARM条件代码,您会注意到3个最高有效位代表一个特定的标志测试,而lsb则表明一种解释或其完全相反的含义-最初,即使0xF也不是0xE的“永远”的对应物。 '-因此您可以将基本条件编码为3位,并使用其他5位编码对下一条指令应评估测试的评估方式,再加上停止位以指示要进行条件化的指令数量。因此,在ITSTATE值被完全消耗之前,可以将其解压缩为ARM条件代码,并与将Thumb指令编码解压缩为等效的ARM指令一起,将其馈入管道。
从架构的角度来看,这是一个非常酷的功能,尽管编译器工程师和CPU设计人员可能不同意;)
| 归档时间: |
|
| 查看次数: |
2627 次 |
| 最近记录: |