10

命令の機能に頭を悩ませていITます(もしそうなら)。クイック リファレンス カードには次のようなものがあります。

操作: If-Then
アセンブラー: IT{pattern} {cond}
アクション: パターンに従って、次の最大 4 つの命令を条件付きにします。pattern は最大 3 文字の文字列です。各文字は T (Then) または E (Else) です。IT の後の最初の命令には条件 cond があります。次の命令は、対応する文字が T の場合は条件 cond を持ち、対応する文字が E の場合は cond の逆条件を持ちます。

実際、そのあらすじには少し意味があります。アーキテクチャマニュアルのエントリは、理解への旅のどこにも行きませんでした。

If-Then 条件命令。
構文

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

ここ x で、IT ブロックの 2 番目の命令の条件スイッチを指定します。
y IT ブロックの 3 番目の命令の条件スイッチを指定します。
z IT ブロックの 4 番目の命令の条件スイッチを指定します。
cond IT ブロックの最初の命令の条件を指定します。

IT ブロックの 2 番目、3 番目、および 4 番目の命令の条件スイッチは、次のいずれかになります
T 。条件 cond を命令に適用します。
E そうしないと。cond の逆条件を命令に適用します。

ノート

IT 命令の cond に AL (always 条件) を使用することができます。これが行われる場合、IT ブロック内のすべての命令は無条件でなければならず、x、y、および z のそれぞれは T であるか、E ではなく省略されている必要があります。

IT 命令は、次の 4 つの命令を条件付きにします。条件はすべて同じにすることも、論理的に逆の条件にすることもできます。IT 命令に続く条件付き命令は、IT ブロックを形成します。

分岐を含む IT ブロック内の命令は、構文の {cond} 部分で条件を指定する必要があります。

(ほとんどの) すべての命令は条件を簡単に指定できるため、そのIT命令は何の役に立つのでしょうか?

4

2 に答える 2

8

IT実際に行うこと、8 ビットの情報をITSTATECPSR のフィールドに非常に巧妙にエンコードすることです。元の Thumb 命令セットには、分岐を除いて条件付き命令がありませんでした。これは、十分な数のオペコードとオペランドの上に 4 ビットの条件コードを収める 16 ビットのスペースがないためです。Thumb-2 拡張機能が行うことは、条件付き実行を既存の 16 ビット エンコーディングと新しい 32 ビット エンコーディングに後付けすることです。

ARM 条件コードを見ると、最上位 3 ビットが特定のフラグ テストを表し、lsb が 1 つの解釈またはその正反対を示していることに気付くでしょう。 ' - したがって、基本条件を 3 ビットでエンコードし、残りの 5 ビットを使用して、次の命令に対してテストを評価する方法をエンコードし、ストップ ビットを加えて、条件付きにする残りの命令の数を示します。したがって、完全に消費されるまで、ITSTATE 値を ARM 条件コードにアンパックし、同等の ARM 命令にアンパックされる Thumb 命令エンコーディングと並行してパイプラインに供給することができます。

アーキテクチャの観点からは、これは非常に優れた機能ですが、コンパイラ エンジニアと CPU 設計者は同意しないかもしれません ;)

于 2016-04-11T21:29:15.407 に答える