首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ARM7 IT (如果是这样的话)指令到底是做什么的?

ARM7 IT (如果是这样的话)指令到底是做什么的?
EN

Stack Overflow用户
提问于 2016-04-11 20:46:10
回答 2查看 8.3K关注 0票数 12

我很难理解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指令有什么好处呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-11 21:05:58

首先要注意的是,大多数指令都可以在ARM指令中指定条件代码,而不是拇指指令。

使用IT指令,您可以为最多4个指令指定条件代码。对于每条指令,您都要指定它是if (T)还是Else (E)的一部分。

例如:

代码语言:javascript
复制
ITTET EQ
ADD r0,r0,r0
ADD r1,r0,r0
ADD r2,r0,r0
ADD r3,r0,r0

将实际翻译为:

代码语言:javascript
复制
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)
票数 20
EN

Stack Overflow用户

发布于 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设计人员可能不同意;)

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36558926

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档