2012-05-09 6 views
5

学校では、コンパイラがコンピュータプログラムを機械語にコンパイルすることを教えてきました。また、機械語はハードウェアへの直接命令で構成されていることも教えています。次に、同じコンパイル済みのプログラムを、ハードウェアの異なる複数のコンピュータ構成で実行するにはどうすればよいですか?機械語にコンパイルされたプログラムを別のマシンで実行するにはどうすればよいですか?

答えて

10

同じプロセッサ(またはIntel x86などの同じファミリ)の場合は、「異なるハードウェア」の意味にもよりますが、マシンコードの命令は同じです。

追加のハードウェアが異なる周辺機器(スクリーン、ディスク、プリンタなど)の場合、オペレーティングシステムは、あなたが意味する場合は、どのようにプログラムを実行することができ、それらを

を駆動するためにあなたの命令の一貫性を与えることによって、それらの詳細を隠しますIntel x86上のARM CPUの場合は、各ARM命令を読み込んでそれらをx86に変換するか、x86機能のセットと同じ機能を実行して戻す仮想マシンエミュレータを除いてはできませんARMのものと同じ答えです。

編集:異なるハードウェア、つまり異なる周辺機器を使用していて、同じプロセッサフ​​ァミリのPCを意味すると思いますか?

ハードウェアとの会話には具体的な手順は含まれていません。オペレーティングシステムやデバイスドライバが特定の場所に移動することがほとんどです。 DOSとBIOSの古い時代には、BIOSで特定のビットのコードを呼び出してそのデータを処理し、HWに送るために割り込みをトリガーします。

+0

簡潔な答えをありがとう。私はプログラムがOSのAPIにどのように接続するのか理解できませんでしたか?私は、プログラムとプロセッサの間にあり、命令のいくつかを実行し、他の命令をプロセッサに渡す抽象レベルがあると思います。そして、これらの「仮想」命令はどの言語(または言語)で書かれていますか?そのプロセスについての詳細はどこで確認できますか? –

+0

具体的な説明ではなく、単にメモリを移動するだけです。昔は画面がある特定の住所にあり、あなたはその住所に '65'を書いていて、一番上の角に 'A'と書かれていて、別の場所に1を書いて、その色の色を赤。 –

+0

コンパイルされたCプログラムは、現在のマシン上にあるライブラリにリンクされます。プロセッサアーキテクチャが同じであっても、コンピュータAからの実行可能ファイルがコンピュータBに移動された場合、コンピュータBにコンピュータAと同じライブラリがない場合、実行可能ファイルは実行されませんか? – Sophtware

4

エミュレータまたは仮想マシンを使用すると、どちらのマシンでも効率的に機械語を翻訳できます。

+0

つまり、ある種のエミュレーションが常にこのプロセスで使用されているということですか? –

+0

@BobbyMarinoff:あるCPUアーキテクチャ用のコードをコンパイルし、それを別のCPUアーキテクチャで実行している状況では、何かが翻訳を行う必要があります。 –

0

ネイティブコンパイラはプロセッサの特定の命令セットにコンパイルすると言うのがより正確だと思います。下位互換性を維持するプロセッサフ​​ァミリがあるため:8086 - 80386 - 80486 - 80586 - デュアルコア - クアッドコア...;各プロセッサはその祖先の命令を実行する。プロセッサアーキテクチャ間でコードを移植する場合は、前述のように仮想マシンまたはエミュレータが必要です。

関連する問題