18

次の行はアーム アセンブリで何をしますか。

000031e6        2916    cmp r1, #22
000031e8        bf1a    itte    ne

最初の行を取得します (r1 と 22 を比較します) が、2 行目はどうですか (以前に itte コマンドを見たことがなく、グーグルで検索しても何も返されませんでした)

4

4 に答える 4

50

これは、Thumb-2 命令セットで導入された ARM の IF-THEN-ELSE 命令です。(上記の具体的な例に基づいて、指示に続く次の3つの指示を示していれば役に立ちましたITTE。この回答を読み終わったら、その理由がわかります。)

この命令は、条件付きコードの小さなシーケンス (最大 4 つの命令) を処理するために使用されます。これは、ARM の条件付き実行を実装する別の方法と考えてください (たとえば、BNE - ゼロ フラグが設定されていない場合にのみ分岐命令が実行されます)。

その利点は、ブランチを取るというペナルティを回避できることです (おそらく、パイプラインなどについて学んでいるはずです)。

説明は少し複雑ですが、頭を包み込むと、かなりエレガントです。

次の形式を取ります。

IT<x><y><z><cond>

ここxで、、、yおよびzはオプションであり、T("then" の場合) またはE("else" の場合) のいずれかでなければなりません。 APSR フラグに反映される、またはまたは<cond>などの条件のいずれかです。NEEQGT

したがって、常に の後に 1 つTありI(命令はIT結局のところ!)、次に 0-3EまたはTです。eachTおよび eachEに対して、一致する同じ順序で後続の命令が必要です。一致する後続の各命令には、IT命令と一致する条件が必要です。

ご容赦ください。これが紛らわしいことは承知しています。ここでは、説明のためにいくつかの例を示します。

命令の最小形式は次のようになります。

IT LT
SUBLT.W  R2, R1

この場合、LT(APSR フラグに従って) が true の場合、減算が行われます。命令の と一致することに注意LTしてください。SUBLTIT

本格的な例は次のようになります。

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」命令 (命令の後の 2 番目のIT命令 - E は 4 つの E の 2 番目であり、 T's) は逆の状態です。それ以外のものは使用できません。つまり、LT代わりに のようなものだとエラーになりますEQEQの反対ですNE

が真の場合NE、命令 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

これで、しばらく噛むのに十分な量が得られるはずです。

于 2011-08-13T13:56:58.870 に答える
3

IT( if-then) 命令ファミリの一部に表示されます: http://infocenter.arm.com/help/topic/com.arm.doc.qrc0006e/QRC0006_UAL16.pdf (2 ページ目)。基本的な命令はITand then であり、Tfor "then" とEfor "else" を指定ITTEし、条件コードNE== "not equal" を指定します。

于 2011-08-12T15:24:36.097 に答える
1

これは、If-Then 命令ファミリの一部です (Thumb-2 コードの条件付き実行を使用する唯一の方法です)。

このリンクをチェックしてください: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0204j/Cjabicci.html

于 2011-08-12T15:29:02.623 に答える