3

アセンブラのコードループは、命令をx回書くだけよりも速い/等しい/遅いですか?それは必要ですか? それともコード依存ですか?しかし、バイナリの実行でマシンがより高速になるのはいつですか?

そして最後に; asmのループとは何ですか?

4

2 に答える 2

6

場合によります。いくつかの命令を繰り返す方が速いかもしれません。この手法は、一般にループ展開として知られています。コードが小さくなり、多くの CPU がループ パターンを認識して予測できるため、展開されていないループもより効率的であることがわかります。部分的に展開されたループを持つことも可能です。たとえば、20 命令をそのまま実行するか、20 ループ反復を実行する代わりに、それぞれ 4 つの命令を実行する 5 つのループ反復を実行できます。

一般に、ターゲットにしているアーキテクチャ (つまり、CPU の製造元とモデル) を知らずに何が最適かを判断することは困難です。さまざまなアプローチの長所と短所、実行コストを分析し、さまざまな CPU の製造元とモデル向けにさまざまなコードを生成することは、コンパイラ開発者が行うことです。他の人は、選択した言語でコードを記述し、コンパイラはターゲット プラットフォームに最適なアセンブリを生成します。これは 99% のケースで機能します。

あなたの質問に答えるには、おそらく両方のバージョンを自分で作成し、それらをプロファイリングしてどちらが勝つかを確認します。または、C でコードを記述し、プラットフォームの最適化を有効にして (つまり-O3、 、-marchスイッチを使用)、コンパイラが生成するものを確認することもできます。コンパイラは確実に正しいことを行います。

それが役に立てば幸い。幸運を!

于 2013-03-05T23:20:10.743 に答える
1

loopin asm は通常、branch-if-equal または類似のものを意味します。HLE を使用していて、比較と分岐を 1 つの命令で実行するプラットフォームで作業していない場合、x86cmplje.

MIPS 分岐手順: http://en.wikibooks.org/wiki/MIPS_Assembly/Control_Flow_Instructions#Branch_Instructions

質問もチェックしてください:

于 2013-03-05T23:28:40.880 に答える