学校では、コンパイラがコンピュータプログラムを機械語にコンパイルすることを教えてきました。また、機械語はハードウェアへの直接命令で構成されていることも教えています。次に、同じコンパイル済みのプログラムを、ハードウェアの異なる複数のコンピュータ構成で実行するにはどうすればよいですか?機械語にコンパイルされたプログラムを別のマシンで実行するにはどうすればよいですか?
答えて
同じプロセッサ(またはIntel x86などの同じファミリ)の場合は、「異なるハードウェア」の意味にもよりますが、マシンコードの命令は同じです。
追加のハードウェアが異なる周辺機器(スクリーン、ディスク、プリンタなど)の場合、オペレーティングシステムは、あなたが意味する場合は、どのようにプログラムを実行することができ、それらを
を駆動するためにあなたの命令の一貫性を与えることによって、それらの詳細を隠しますIntel x86上のARM CPUの場合は、各ARM命令を読み込んでそれらをx86に変換するか、x86機能のセットと同じ機能を実行して戻す仮想マシンエミュレータを除いてはできませんARMのものと同じ答えです。
編集:異なるハードウェア、つまり異なる周辺機器を使用していて、同じプロセッサファミリのPCを意味すると思いますか?
ハードウェアとの会話には具体的な手順は含まれていません。オペレーティングシステムやデバイスドライバが特定の場所に移動することがほとんどです。 DOSとBIOSの古い時代には、BIOSで特定のビットのコードを呼び出してそのデータを処理し、HWに送るために割り込みをトリガーします。
エミュレータまたは仮想マシンを使用すると、どちらのマシンでも効率的に機械語を翻訳できます。
つまり、ある種のエミュレーションが常にこのプロセスで使用されているということですか? –
@BobbyMarinoff:あるCPUアーキテクチャ用のコードをコンパイルし、それを別のCPUアーキテクチャで実行している状況では、何かが翻訳を行う必要があります。 –
ネイティブコンパイラはプロセッサの特定の命令セットにコンパイルすると言うのがより正確だと思います。下位互換性を維持するプロセッサファミリがあるため:8086 - 80386 - 80486 - 80586 - デュアルコア - クアッドコア...;各プロセッサはその祖先の命令を実行する。プロセッサアーキテクチャ間でコードを移植する場合は、前述のように仮想マシンまたはエミュレータが必要です。
- 1. 別のマシンでclang + llvmからコンパイルされたプログラムを実行する
- 2. ドッカーコンテナをあるマシンから別のマシンに移行するにはどうすればよいですか?
- 3. 機械学習で逆予測を実行するにはどうすればよいですか?
- 4. WindowsでコンパイルされたUbuntuでJARファイルを実行するにはどうすればよいですか?
- 5. プログラムでイベントを実行するにはどうすればよいですか?
- 6. 機械化されたドロップダウンメニューのアイテムをPythonで選択するにはどうすればいいですか?
- 7. C++プログラムから別のプログラムを実行するにはどうすればいいですか?
- 8. C#プログラムのパネル内で別のアプリケーションを実行するにはどうすればよいですか?
- 9. 別の端末でPythonプログラムを実行するにはどうすればよいですか?
- 10. NetBeansで書かれたJavaプログラムをjavacでコンパイルするにはどうすればよいですか?
- 11. プログラムで読み込まれたストーリーボードでセグを実行するにはどうすればよいですか?
- 12. 複雑な機械学習予測プログラムをどのように導入すればよいですか?
- 13. 別のディレクトリからJavaプログラムを実行するにはどうすればよいですか?
- 14. Macでは実行可能ファイルをコンパイルするにはどのようにすればよいですか?
- 15. C++プログラムでlinux/proc/versionに似た機能を実装するにはどうすればよいですか?
- 16. 1台のマシンでコンパイルされ、別のマシンではコンパイルされないJavaコード
- 17. これをプログラムで行うにはどうすればよいですか?
- 18. スパイスパイダーをプログラムで簡単なスクリプトのように実行するにはどうすればよいですか?
- 19. 複数のCGEマシンで同時にシェルスクリプトを実行するにはどうすればよいですか?
- 20. TypeScriptで実装されたインターフェイスでコンストラクタオーバーロードを実行するにはどうすればよいですか?
- 21. 長時間実行しているGoプログラムを実行するにはどうすればよいですか?
- 22. 別のクラスを実行するにはどうすればいいですか?
- 23. ghcコンパイルされたバイナリを他のマシンで実行するには?
- 24. 言語別にオープンソースプロジェクトを探すにはどうすればよいですか?
- 25. これらの3つの手順をプログラムで実行するにはどうすればよいですか?
- 26. 別のバッチファイルから別のプロセスでバッチファイルを実行するにはどうすればよいですか?
- 27. スケジュールされたPythonプログラムはどのように実行されますか?
- 28. XNA 4.0ゲームを他のマシンで実行するにはどうすればよいですか?
- 29. iframeでfocus()が実行されないようにするにはどうすればよいですか?
- 30. GrailsがIntellijで実行されないようにするにはどうすればよいですか?
簡潔な答えをありがとう。私はプログラムがOSのAPIにどのように接続するのか理解できませんでしたか?私は、プログラムとプロセッサの間にあり、命令のいくつかを実行し、他の命令をプロセッサに渡す抽象レベルがあると思います。そして、これらの「仮想」命令はどの言語(または言語)で書かれていますか?そのプロセスについての詳細はどこで確認できますか? –
具体的な説明ではなく、単にメモリを移動するだけです。昔は画面がある特定の住所にあり、あなたはその住所に '65'を書いていて、一番上の角に 'A'と書かれていて、別の場所に1を書いて、その色の色を赤。 –
コンパイルされたCプログラムは、現在のマシン上にあるライブラリにリンクされます。プロセッサアーキテクチャが同じであっても、コンピュータAからの実行可能ファイルがコンピュータBに移動された場合、コンピュータBにコンピュータAと同じライブラリがない場合、実行可能ファイルは実行されませんか? – Sophtware