2016-12-06 17 views
0

実行時にユーザーの入力を受け取り、nとラベル付けされたソースコード定義の命令セットをn回実行することは可能ですか?カウンターをインクリメントするのではなく、変数を作成し、各反復後にユーザー入力と比較しますか?言い換えれば、CPUが自身を更新するカウンターを起動せず、各反復後にnに対してチェックされていなくても、CPUに「これをn回行う」と言うことができますか?比較しないでユーザー入力回数を繰り返しますか?

+0

CPUの命令レベル(ハードウェアは問わない)またはプログラミング言語(高レベル)に関するご質問はありますか? – kostix

+0

あなたが後者を意味するならば、十分に高水準の言語がいくつかのループ構造の背後に数えられるという事実を隠すだけなので、答え自体はあいまいかもしれません。例えば、これは単純なbourneシェルで行うことができます: 'read n; \ 'seq 1 $ n \'のiのために; echo $ iを実行します。あなたが見ることができるように、カウンターはなく、ただループしていますが、入力したとおりに正確に 'n回 '繰り返すことができます。 – kostix

+0

既存のH/Wアーチが暗黙のうちにコードの一部を反復するいくつかのCPUコマンドを持っているかどうかを知りたければ、その質問はより面白くなります。私の頭の上から、私はx86の 'LOOPNE' /' LOOPNZ'を思い出しますが、最初は反復回数を含む専用レジスタの値を減らしています。それがあなたと一緒なら大丈夫だ - 暗黙のうちに行われている減価償却の性質が成就すれば、それは答えです;-)そうでなければ質問を絞り込んでください。 – kostix

答えて

0

種類。実行する命令のリストを取得し、n回(絶対ジャンプを確実に修正して)、function prologue and epilogueを追加し、結果をarea of memory that is allowed to execute codeに保存し、その領域の開始を関数として呼び出すことができます。

このようなコード生成を行うことは、Cなどの言語で正しく行うのは難しいことに注意してください。あなたはもっと低くして、コード(または少なくともその一部)をアセンブリに書くか、 C#のような言語を使用すると、コード表現を操作してマシンコードにコンパイルすることができます。

また、パフォーマンスが大幅に向上する可能性はほとんどありません。実際には、コードがCPUの命令キャッシュに収まらなくなる可能性があるため、パフォーマンスが低下する可能性があります。

コンパイラによっては、この最適化が自動的に部分的に実行されることがあります。これはloop unrollingと呼ばれます。

関連する問題