1. ホーム
  2. アセンブリ

[解決済み】アセンブリコード vs マシンコード vs オブジェクトコード?

2022-04-01 16:05:40

質問

オブジェクトコード、マシンコード、アセンブリコードの違いは何ですか?

その違いを視覚的に例示してください。

どのように解決するのですか?

マシンコード は、CPUが直接実行できるバイナリ(1と0)コードです。もし、テキストエディタでマシンコードファイルを開くと、印刷不可能な文字を含むゴミが表示されるでしょう(いいえ。 それら 印刷不可能な文字) ).

オブジェクトコード は、まだ完全なプログラムにリンクされていないマシンコードの一部です。完成した製品を構成する、ある特定のライブラリやモジュールの機械語コードです。また、完成したプログラムのマシンコードにはないプレースホルダーやオフセットが含まれている場合もあります。その リンカ は、これらのプレースホルダーやオフセットを使って、すべてをつなげます。

アセンブリコード は、平文で(ある程度)人間が読めるソースコードで、ほとんどがマシン命令と1対1の直接の類似性を持っています。これは、実際の命令、レジスタ、その他のリソースを表すニーモニックを使用して実現されています。例としては、以下のようなものがあります。 JMPMULT は、CPUのジャンプ命令と乗算命令です。CPUは機械語とは異なり、アセンブリコードを理解することはできません。アセンブリコードからマシンコードへの変換には アセンブラ または コンパイラ しかし、通常、コンパイラといえば、CPUの命令からさらに抽象化された高水準のプログラミング言語を連想することが多い。


完全なプログラムを作るには ソースコード をアセンブリ言語またはC++などの高級言語で作成します。ソースコードをアセンブル(アセンブリコードの場合)またはコンパイル(高級言語の場合)してオブジェクトコードにし、個々のモジュールをリンクして最終プログラムのマシンコードとします。非常に単純なプログラムの場合、リンクのステップは必要ないこともある。また、IDE(統合開発環境)のように、リンカーとコンパイラーが一緒に起動される場合もある。また、複雑な 作る スクリプトまたは 解決策 ファイルは、最終的なアプリケーションをどのように構築するかを環境に伝えるために使用されるかもしれません。

また インタプリタ型言語 は、異なる挙動をします。インタープリタ言語は、特別なインタープリタプログラムのマシンコードに依存する。基本的なレベルでは、インタープリタはソースコードを解析し、直ちにコマンドを新しいマシンコードに変換して実行する。最近のインタープリターは、ソースコードの全セクションを一度に評価し、可能な限りキャッシュして最適化し、複雑なメモリ管理タスクを処理するなど、より複雑になってきている。

最後に、プログラムの種類としては ランタイムエンバイロメント または 仮想マシン . このような場合、プログラムはまず低レベルの 中間言語 または バイトコード . バイトコードは仮想マシンに読み込まれ、仮想マシンはそれをジャストインタイムでネイティブコードにコンパイルする。ここでの利点は、仮想マシンが、プログラムの実行時やその特定の環境で利用できる最適化を利用できることである。コンパイラは開発者のものなので、多くの場所で実行できる比較的汎用的な(あまり最適化されていない)機械語コードを作成しなければならない。しかし、ランタイム環境または仮想マシンは、エンドユーザーのコンピュータにあるため、そのシステムが提供するすべての機能を利用することができる。