学校では、コンパイラがコンピュータプログラムを機械語にコンパイルすることを教えられてきました。また、機械語はハードウェアへの直接命令で構成されていることも教えられました。では、同じコンパイル済みプログラムを、異なるハードウェアを備えた複数のコンピューター構成で実行するにはどうすればよいでしょうか。
3 に答える
同じプロセッサ(またはIntel x86などの同じファミリ)の場合、「異なるハードウェア」の意味によって異なりますが、マシンコードの命令は同じです。
追加のハードウェアが異なる周辺機器(画面、ディスクプリンターなど)である場合、オペレーティングシステムは、それらを駆動するための一貫した一連の指示を提供することにより、それらの詳細を非表示にします。
つまり、Intelx86でARMCPUのプログラムを実行するにはどうすればよいのでしょうか。ただし、各ARM命令を読み取り、それらをx86に変換するか、同じものを実行するある種の仮想マシンエミュレーターを除きます。 x86機能のセットとして機能し、ARMのものと同じ答えを返します。
編集:私はあなたが異なるハードウェアを持つPCを意味すると思います-すなわち、異なる周辺機器が同じプロセッサファミリですか?
ハードウェアとの通信には、特定の指示は含まれません。ほとんどの場合、オペレーティングシステムやデバイスドライバーがそのデバイスに送信するデータ用に特別に予約した特定の場所にメモリを移動する必要があります。DOSとBIOSの昔は、割り込みをトリガーしてBIOS内の特定のコードを呼び出し、そのデータを処理してHWに送信していました。
エミュレーターまたは仮想マシンを使用すると、どちらもその場で機械語を効果的に変換します。
ネイティブコンパイラはプロセッサの特定の命令セットにコンパイルされると言った方が正確だと思います。下位互換性を維持するプロセッサのファミリがあるため:8086-80386-80486-80586-デュアルコア-クアッドコア...; 次に、各プロセッサはその祖先の命令を実行します。コードをプロセッサアーキテクチャ間で移植する場合は、前述のように、仮想マシンまたはエミュレータを確認する必要があります。