gpt4 book ai didi

assembly - itte 臂组件

转载 作者:行者123 更新时间:2023-12-02 16:31:25 26 4
gpt4 key购买 nike

以下行在 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>是任何条件,例如 NEEQGT等反射(reflect)在 APSR 标志中。

所以你总是有一个TI (毕竟指令是 IT!),然后是 0-3 ET的。对于每个T每个 E ,您必须有一个按相同顺序匹配的后续指令。每个匹配的后续指令必须具有与 IT 匹配的条件。操作说明。

请耐心听我说,我知道这很令人困惑。我将在这里举几个例子来说明。

指令的最小形式类似于:

IT LT
SUBLT.W R2, R1

在这种情况下,如果 LT为真(根据 APSR 标志),将进行减法。请注意LTSUB匹配LTIT说明。

一个完整的例子是这样的:

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 的东西,那将是一个错误。而不是EQEQNE 相反.

所以如果 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com