アセンブラのコードループは、命令をx回書くだけよりも速い/等しい/遅いですか?それは必要ですか? それともコード依存ですか?しかし、バイナリの実行でマシンがより高速になるのはいつですか?
そして最後に; asmのループとは何ですか?
アセンブラのコードループは、命令をx回書くだけよりも速い/等しい/遅いですか?それは必要ですか? それともコード依存ですか?しかし、バイナリの実行でマシンがより高速になるのはいつですか?
そして最後に; asmのループとは何ですか?
場合によります。いくつかの命令を繰り返す方が速いかもしれません。この手法は、一般にループ展開として知られています。コードが小さくなり、多くの CPU がループ パターンを認識して予測できるため、展開されていないループもより効率的であることがわかります。部分的に展開されたループを持つことも可能です。たとえば、20 命令をそのまま実行するか、20 ループ反復を実行する代わりに、それぞれ 4 つの命令を実行する 5 つのループ反復を実行できます。
一般に、ターゲットにしているアーキテクチャ (つまり、CPU の製造元とモデル) を知らずに何が最適かを判断することは困難です。さまざまなアプローチの長所と短所、実行コストを分析し、さまざまな CPU の製造元とモデル向けにさまざまなコードを生成することは、コンパイラ開発者が行うことです。他の人は、選択した言語でコードを記述し、コンパイラはターゲット プラットフォームに最適なアセンブリを生成します。これは 99% のケースで機能します。
あなたの質問に答えるには、おそらく両方のバージョンを自分で作成し、それらをプロファイリングしてどちらが勝つかを確認します。または、C でコードを記述し、プラットフォームの最適化を有効にして (つまり-O3
、 、-march
スイッチを使用)、コンパイラが生成するものを確認することもできます。コンパイラは確実に正しいことを行います。
それが役に立てば幸い。幸運を!
loop
in asm は通常、branch-if-equal または類似のものを意味します。HLE を使用していて、比較と分岐を 1 つの命令で実行するプラットフォームで作業していない場合、x86cmpl
とje
.
MIPS 分岐手順: http://en.wikibooks.org/wiki/MIPS_Assembly/Control_Flow_Instructions#Branch_Instructions
質問もチェックしてください: