問題タブ [instructions]
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.
assembly - `testl` eax対eax?
私はいくつかのアセンブリを理解しようとしています。
次のようなアセンブリ、私はtestl
ラインに興味があります:
私はとのtestl
間のそのポイントを理解しよう%eax
としてい%eax
ますか?このコードの詳細は重要ではないと思います。私はテスト自体を理解しようとしているだけです。値は常に真であるとは限りません。
c - C 命令あたりの asm 命令の数は?
この質問に完全に答えることは不可能であることは承知していますが、大まかな数値を求めているだけです。
妥当なサイズの C プログラム (数千行のコード) が与えられた場合、平均して生成される ASM 命令の数。言い換えれば、現実的な C と ASM の命令比率はどれくらいでしょうか? 「現在の x86 アーキテクチャで」など、自由に仮定してください。
これについてGoogleで調べてみましたが、何も見つかりませんでした。
補遺: この質問がどれほどの混乱を招いたかに気づき、説明が必要だと感じました。ヘルツあたりのスループットが、アーキテクチャ、ハードウェア、キャッシュ、バス速度、および月の位置によって大きく異なることは十分承知しています。
私は正確で科学的な答えを求めているのではなく、むしろ、計り知れないスケールに入れることができる経験的な答えを求めています.
これは場所に対する簡単な答えではありません (私が気づいたように)、これは私の最善の努力でした。C の行ごとに結果として得られる ASM の行の量は、何をしているかによって異なることを私は知っています。i++
と同じ近隣にありませんsqrt(23.1)
- 私はこれを知っています。さらに、C から取得した ASM に関係なく、ASM はプロセッサ内のさまざまなマイクロコードのセットに解釈されます。これは、AMD、Intel、またはその他のものを実行しているかどうか、およびそれぞれの世代によって異なります。これも承知しております。
私がこれまでに得た大まかな答えは、私が求めていたものです。ANSI-C の 1 行あたり x86 ASM の平均で約 2 行の十分な規模のプロジェクトです。今日のプロセッサは、パイプラインがいっぱいになり、十分な大きさのサンプルが与えられると、平均してクロック サイクルあたり約 1 つの ASM コマンドになるでしょう。
assembly - 再帰的アセンブル ソース コードでの再帰なしの呼び出し
理解したいダンプからのコードフラグメントがあります。私を最も悩ませているのは、(一見)次のような再帰呼び出しです
bd604: e8 fc ff ff ff コール bd605 + 0xb5
彼らは何をしますか?元の関数では再帰を使用しません。
Thanks@schnaader
呼び出しがcldを作成してEAXにジャンプするようです
編集:私の機能の完全なdmp
assembly - 同等の命令数
質問があります(私のように)...
しかし... CまたはC ++またはあなたが望むコードで書かれた選択されたアルゴリズムがある場合...コンパイラを修正しました 命令の数を決定できますが、これらの命令は互いに異なります:x ADD、y MUL、z MOV 、f FADD、t FMUL(FはFLOATINGの略)...異なるアルゴリズムを比較するために「同等の命令」の数に命令の数を書き込むことを許可する方法論または方程式または何か他のものはありますか?このタイプのメトリックを使用する人はいますか? それはゴミですか?
ありがとう
マルコ
パート 2: 私はそれが uP とアーキテクチャ全般に依存していることを知っています。私の問題は、ソフトコアのさまざまなアーキテクチャに実装されているさまざまなアルゴリズムの実行時間を決定することです。y 軸には時間を書き、x 軸には命令の数とグラフのポイントをアーキテクチャの種類によってパラメータ化します (私の英語ですみません)。しかし、x-axixでは、「同等の命令」の数のようなものを使用する方が良いと思います...
それはゴミのアイデアですか?
assembly - 32ビットのものの64ビットアセンブリの命令
私は、C で書かれたプログラムを移植し始めており、ljmpのような 32 ビット マシン用の命令を使用してアセンブリで記述されたいくつかのコードを 64 ビット マシンに移植しています。
アセンブリで、32 ビット マシンと 64 ビット マシンの対応する手順を含む場所/ドキュメントはありますか? そうでない場合、32 ビット マシンと 64 ビット マシンのすべての手順をリストしたドキュメントはどこにありますか?
それはかなり明白であるため、私はこの状況の初心者です。いくつかの点を明確にしましょう。
私は非常に初期の OS を移植しています。x86 マシンを念頭に置いて作成されました。今、x86_64で実行したいです。
これは、UNIX を念頭に置いた Linux ボックスで書かれています。元の作者が Intel マシンで書いていることはほぼ確実です。私も Intel を使用していますが、AMD でも OS を実行したいと考えています。
使用するコンパイラは gcc です。
c++ - プロファイリング手順
コード内のいくつかの CPU 命令をカウントしたい。たとえば、私のコードが実行する加算、乗算、浮動小数点演算、分岐の数を知りたいです。私は現在 Linux で gprof を使用して C++ コードをプロファイリングしていますが、関数の呼び出し数しか表示されず、手動で命令数を見積もっています。私のためにトリックを行うツールはありますか? 多分いくつかの仮想マシン?
assembly - 2つのメモリアドレス間を移動する
アセンブリを学習しようとしていますが(我慢してください)、次の行でコンパイルエラーが発生します。
エラーは
このエラーの原因は、mov命令が2つのメモリアドレス間を移動できないことだけだと思いますが、30分グーグルしてこれを確認できませんでした-これは本当ですか?
また、私が正しいと仮定すると、メモリをコピーするための中間点としてレジスタを使用する必要があることを意味します。
使用するのに推奨されるレジスタは何ですか(または代わりにスタックを使用する必要があります)?
turing-machines - チューリングマシン命令表
チューリング マシンの定義では、命令表 (プログラム) を読み取り/変更することは禁止されています。まさに、チューリング マシンはそれ自身のプログラムにアクセスできません。
この制限を弱めることができれば、どのような利点が得られるでしょうか? マシンがそのプログラムを分析および/または変更できる場合。それは、チューリング計算可能なタスクのクラスを拡張しますか?
binary - 実行可能ファイルはどの程度正確に機能しますか?
実行可能ファイルに命令が含まれていることは知っていますが、これらの命令とは正確には何ですか?たとえば、API関数を呼び出したい場合MessageBox
、命令はどのようになりますか?
ありがとう。
c - 単一の命令を実行する時間を測定する
C、アセンブラ、または C# を使用して、ADD 命令の実行にかかる時間を正確に測定する方法はありますか?