- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
以下行在 ARM assembly 中起什么作用:
000031e6 2916 cmp r1, #22
000031e8 bf1a itte ne
我得到了第一行(比较 r1 和 22),但是第二行呢(我以前从未见过 itte 命令,谷歌搜索什么也没有返回)
最佳答案
它是ARM的IF-THEN-ELSE指令,在Thumb-2指令集中引入。 (根据上面的具体示例,如果您显示了 ITTE
指令后面的接下来 3 条指令,将会很有帮助,当您读完这个答案后,您就会明白为什么。)
该指令用于处理小序列的条件代码,最多 4 条指令。将其视为实现 ARM 条件执行的不同方式(例如 BNE - 仅在未设置零标志时才执行分支指令)。
它的好处是它避免了采用分支的惩罚(想必您已经了解了管道等)
该说明有点复杂,但一旦你认真理解它,就会发现它非常优雅。
它采用以下形式:
IT<x><y><z><cond>
哪里x
, y
,和z
是可选的,并且必须是 T
(“然后”)或 E
(对于“其他”)。 <cond>
是任何条件,例如 NE
或EQ
或GT
等反射(reflect)在 APSR 标志中。
所以你总是有一个T
继 I
(毕竟指令是 IT
!),然后是 0-3 E
或T
的。对于每个T
每个 E
,您必须有一个按相同顺序匹配的后续指令。每个匹配的后续指令必须具有与 IT
匹配的条件。操作说明。
请耐心听我说,我知道这很令人困惑。我将在这里举几个例子来说明。
指令的最小形式类似于:
IT LT
SUBLT.W R2, R1
在这种情况下,如果 LT
为真(根据 APSR 标志),将进行减法。请注意LT
在 SUB
匹配LT
在 IT
说明。
一个完整的例子是这样的:
ITETT NE
ADDNE R0, R0, R1
ADDEQ R0, R0, R3
ADDNE R2, R4, #1
MOVNE R5, R3
所以我们有 THEN ELSE THEN THEN ( TETT
),以及 NE
健康)状况。请注意,在随后的 4 个条件指令中(4 个指令,每个指令 1 个 TETT
),“THEN”指令具有 NE
条件,而“ELSE”指令(IT
指令之后的第二条指令 - 记住 E 是 4 个 E 和 T 中的第二个)具有相反的条件。它不能是其他任何东西,也就是说,如果它是类似 LT
的东西,那将是一个错误。而不是EQ
。 EQ
与 NE
相反.
所以如果 NE
为 true,则执行指令 1、3 和 4。否则 ( EQ
),仅执行指令 2 ( ADDEQ
)。
我给出了 1 和 4 条指令的示例,但您也可以有 2 (IT{T,E}
)和 3 条指令( IT{T,E}{T,E}
)形式。
最后,为了说明这一点,我将给出一个示例,说明如何使用此指令实现以下 C 代码:
if (R4 == R5)
{
R7 = R8 + R9;
R7 /= 2;
}
else
{
R7 = R10 + R11;
R7 *= 2;
}
转换为
CMP R4, R5
ITTEE EQ
ADDEQ R7, R8, R9 ; if R4 = R5, R7 = R8 + R9
ASREQ R7, R7, #1 ; if R4 = R5, R7 /= 2
ADDNE R7, R10, R11 ; if R4 != R5, R7 = R10 + R11
LSLNE R7, R7, #1 ; if R4 != R5, R7 *=2
这应该足以让你咀嚼一段时间。
关于assembly - itte 臂组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7042289/
当我跑qemu-arm -L /usr/arm-linux-gnueabi/ ./foo在码头 Linux 4.9.125-linuxkit #1 SMP Fri Sep 7 08:20:28 UTC
我是一名优秀的程序员,十分优秀!