【问题标题】:What does the ARM7 IT (if then) instruction really do?ARM7 IT (if then) 指令的真正作用是什么?
【发布时间】:2016-04-11 20:46:10
【问题描述】:

我无法理解IT 指令的功能(如果有的话)。 quick reference card 有这个:

操作:如果-那么
汇编:IT{pattern} {cond}
行动:根据模式,最多制作四个有条件的以下指令。模式是最多三个字母的字符串。每个字母可以是 T(Then)或 E(Else)。 IT 之后的第一条指令有条件 cond。下面的指令如果对应的字母是T,则条件为cond,如果对应的字母为E,则条件为cond的逆。

实际上,这个提要有点道理。架构manual entry 并没有让我在理解的过程中取得任何进展:

If-Then 条件指令。
语法

IT{x{y{z}}} 条件

在哪里: 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 cpu-architecture machine-instruction


【解决方案1】:

首先请注意,大多数指令可以在 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)

【讨论】:

  • 啊,所以这在 Thumb 模式下最有用。是不是也说明它在ARM模式下没那么有用了?
  • 它在ARM中不存在,只有在Thumb中。在 ARM 中,可以为大多数指令指定条件。
  • 感谢您的快速回复和解释!
  • 您实际上应该将条件代码放在ADD 指令上。这是正确的 Unified 语法。此外,使用-mimplicit-it=thumb,(gas)汇编器可以暗示正确的IT 命令。
【解决方案2】:

IT 实际上所做encode 8 bits of information into the ITSTATE field of the CPSR 非常巧妙。原始的 Thumb 指令集除了分支之外没有条件指令,因为在 16 位中根本没有空间在足够的操作码和操作数之上容纳 4 位条件代码以供使用。 Thumb-2 扩展的作用是对现有的 16 位编码以及新的 32 位编码进行改造条件执行。

如果您查看 ARM 条件代码,您会注意到 3 个最高有效位表示特定标志测试,而 lsb 表示一种解释或其完全相反的解释 - 最初甚至 0xF 也是“从不”对应于0xE 的“总是” - 因此您可以将基本条件编码为 3 位,并使用其他 5 位来编码应该为下一条指令评估测试的方式,再加上一个停止位来指示剩余要条件化的指令数。因此,在它被完全消耗之前,可以将 ITSTATE 值解压缩到 ARM 条件代码中,并在将 Thumb 指令编码解压缩到其等效 ARM 指令的同时将其馈送到管道中。

从架构的角度来看,这是一个非常酷的功能,尽管编译器工程师和 CPU 设计师可能不同意 ;)

【讨论】:

    猜你喜欢
    • 2014-12-21
    • 2012-01-14
    • 2012-11-19
    • 1970-01-01
    • 2013-02-23
    • 1970-01-01
    • 2014-04-26
    • 2015-10-14
    • 1970-01-01
    相关资源
    最近更新 更多