問題タブ [machine-instruction]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
llvm - マシン値タイプ「その他」はllvm SDnodesで何を意味しますか
llvm での命令選択プロセスをより深く理解しようとしています。そのために、CodeGenAndEmitDAG 関数を段階的にデバッグしています。上記の関数の最初のステップである結合ステップの直前に、小さな関数 (以下を参照) を出力しました。グラフに青い線が表示され、常に「ch」を指しているように見えます。これは、「他の」マシン値タイプを意味すると思います。私が理解していないのは、青い線の意味です...この依存関係は何ですか? そして、「ch」の意味については正しいですか?「その他」ですか?
pipeline - パイプライン ゲート 2015
以下に示す一連の機械命令を考えてみましょう。
上記のシーケンスで、R0
toR8
は汎用レジスタです。示されている命令では、最初のレジスタは、2 番目と 3 番目のレジスタで実行された演算の結果を格納します。この一連の命令は、次の 4 つのステージを持つパイプライン化された命令プロセッサで実行されます。
- 命令フェッチおよびデコード (IF)、
- オペランドフェッチ (OF)、
- オペレーション(PO)を実行し、
- 結果 (WB) を書き戻します。
IF
、OF
およびステージはWB
、命令ごとにそれぞれ 1 クロック サイクルかかります。PO
ステージは or 命令に 1 クロック サイクル、命令ADD
にSUB
3 クロック サイクル、MUL
命令に 5 クロック サイクルかかりDIV
ます。パイプライン プロセッサは、PO ステージから OF ステージへのオペランド転送を使用します。上記の一連の命令の実行にかかるクロック サイクル数は、次のとおりです。
POステージからOFステージまでオペランド転送を使用する必要があることが明確に与えられているため、上記の答えは15クロックサイクルである必要があります。
しかし、多くの場所で答えは 13 クロック サイクルとして与えられます。POからPOへのオペランド転送を使用すると、13の答えが得られます。
私の答え:
多くの場所で与えられた答え:
どちらの答えが正しいか誰にもわかりますか?
assembly - ロングジャンプとショートジャンプの違い (x86)
address の相対ジャンプが 124 未満の場合はショート ジャンプを使用し、それ以外の場合はロング ジャンプを使用する必要があることを読みました。
x86 での 2 種類のジャンプの CPU で実行される操作/パフォーマンスの違いは何ですか?
assembly - 「call」命令の場所のアドレス
「call」命令は一種の「jump」命令だと思います。「ジャンプ」命令には、どこに行くかのアドレスがあります。また、「call」命令にはターゲットアドレスが必要です。しかし、バイナリを逆アセンブルすると、「call」命令には目的の関数のラベルしかありません。では、彼らはどこへ行くべきかをどうやって知るのでしょうか? つまり、各関数のターゲット アドレスはどこにありますか? x86、ARM 何でも。
c - スタックに置かれた機械語命令を実行する方法
前のスタック フレームに、後続のスタック フレームのバッファを指す戻り値があります。バッファに配置されたマシン命令を実行するにはどうすればよいですか?
これは可能ですか?スタックについて私が理解していることから、これは無意味です。もちろん、スタックは後入れ先出し構造です。つまり、PC が戻りアドレスに到達すると、バッファは既にポップオフされています。
何か案は?
関数 (以下)が関数 (以下も<test>
) を呼び出します<getbuf>
。
arm - ARM7 IT (if then) 命令は実際に何をしますか?
命令の機能に頭を悩ませてい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
命令は何の役に立つのでしょうか?