0

C言語を考えてみると、プロセッサ命令でコードを直接コンパイルします。したがって、プログラムがどのプロセッサで実行されるかは問題ではありません。しかし、アセンブリ言語を考えると、それが実行されているプロセッサに固有のものです。したがって、これに従って、Cでプログラムを作成し、ブート可能にします。使用されているプロセッサに問題はなく、プログラムはすぐに実行され、問題なく実行されます。では、なぜそうなのか、Microsoft Windows では CPU を使用するためにドライバーが必要です (使用されている CPU のドライバーがインストールされているデバイス マネージャーで確認できます)。単純な起動可能なプログラムの場合、ドライバーを必要とせずに、作成、コンパイル、および実行できます。では、なぜ Windows に CPU ドライバーがインストールされているのでしょうか。

4

3 に答える 3

4

あなたはそれを行うことができるかもしれませんが、あなたのプログラムが I/O を行わない場合、つまり、画面に書き込みをしない、ディスクにアクセスしないなどの場合に限ります。

実際に何かを行う C プログラムを作成するには、何らかの I/O を実行する必要があります (少なくとも、「Hello world」を画面、LED マトリックス、またはシリアル ポートに送信する必要があります)。I/O 管理は、組み込みデバイスで一般的であるため、プログラムに含めるか、プログラムがロードして呼び出し、OS によって管理される共有ライブラリの形式で利用できます。

とはいえ、必要なすべての I/O ルーチンが実行可能ファイルに含まれていて、C プログラムを使用するツール チェーンがあれば、多くの環境で単純なプログラムをブート プログラムとして作成、コンパイル、実行できるのは事実です。目的のプラットフォーム用のブート イメージ実行可能ファイルを提供します。

一方、Windows には CPU を使用するためのデバイス ドライバーがありません。「CPU」という名前で見たデバイス ドライバーは、IO APIC などを管理し、割り込みをルーティングするためのものです。ローカル APIC、マルチコア処理、仮想化、NX ビットなどのいくつかの機能を有効にします。ほら... たまたま CPU の内部にいくつかの I/O デバイスがあるため、このデバイス ドライバーはそれらを管理するためのものです。

于 2013-12-30T22:13:18.067 に答える
1

CPU のドライバーは、コードの実行には必要ありません。これは、Cpu がデバイスのように機能する場所の一種のプレースホルダーにすぎません。たとえば、電源管理をサポートしたり、コア温度を読み取ったりします。そこでは、OS が通信するためのデバイスが必要です。ドライバーはそのためのリソースを確保し、対応するインターフェイスをより高いレベルに提供します。

歴史的な理由から、アセンブラの Cpu タイプを指定する必要があります。C コンパイラの場合、これは実行するプラットフォームによって暗黙的に指定されます。通常、別の CPU ファミリには別のコンパイラが必要です。

于 2013-12-30T22:32:57.133 に答える
0

あなたの質問を正しく読んでいれば、C 言語のコンパイル プロセスとその目的を誤解しています。

Cはアセンブリ言語にコンパイルされ、機械語命令に変換されます。コンパイルされた C プログラムが実際にはプロセッサ固有のものであることを理解するには、 ISAアセンブリ言語についてさらに読む必要があります (x86 や ARM などのプロセッサのタイプに関して)。

ARM プロセッサ用にコンパイルした C プログラムは、x86 プロセッサでは動作しません。これは、その特定のプロセッサのISAに関係しています。仮想マシン (Java など) やインタープリター (Python など) などは、コードの移植性を向上させる一般的な方法です。

于 2013-12-30T22:35:20.010 に答える