web-dev-qa-db-ja.com

アセンブリ言語を機械語に変換するもの

私はプログラミングに不慣れで、C++言語がC++コンパイラ(Ex:Visual Studio)によってアセンブリ言語に変換されることを知っている限り、C++言語から始めましたが、アセンブリ言語をマシンコードに変換するものを探してみましたコンピューターで理解され実行されたが、答えが見つからなかった。

それで問題は、アセンブリ言語はどこでどのようにマシンコードに変換されるのでしょうか? OSに統合されたある種のコンパイラによるものですか?

前もって感謝します。

7
Karim K.

一部のコンパイラ(GNUなど)は、C/C++コードをアセンブリコードに変換します。 「アセンブラー」と呼ばれるツールは、アセンブリコードをマシンコードに変換し、「リンカー」と呼ばれるツールは、複数のマシンコードファイルを単一の実行可能ファイル(Windowsでは.EXE)に接続します。これらのコンパイラのほとんどでは、結果のアセンブラコードをファイルに書き込んで、アセンブラコードを確認したり変更したりできます。

アセンブラーとリンカーはツールチェーンの一部です。つまり、これらは通常コンパイラーと一緒に提供されます。

ただし、一部のコンパイラ(Microsoftなど)は、C/C++コードを直接機械語に変換するため、アセンブラは必要ありません。これらのコンパイラの多くはアセンブラコードを作成できないため、アセンブラコードをファイルに書き込むことができません。

ちなみに、.EXEファイルを直接作成するコンパイラ(C/C++ではなく他のプログラミング言語用)もあるので、リンカーは必要ありません。

9
Martin Rosenau

コンパイラが高レベルのコードを以下のようなアセンブリ言語に変換すると-

  • MOV AX、[A]; #Aを移動してAxを登録
  • AXを追加、[B]; #AにBを追加
  • IMUL AX; #スクエア(A + B)
  • MOV [C]、AX;

アセンブラは、これらのアセンブリ命令をマシンコードに変換します。

アセンブリ命令の典型的な形式は次のとおりです。opcodeオペランド[オペランド]

マイクロプロセッサのマニュアルを確認すると、各命令を1001000のようなバイナリ形式に変換する方法を知ることができます。一部のビットはオペコード用で、一部はオペランド用です。

http://www.mathemainzel.info/files/x86asmref.html

5
rsmagdum

アセンブリ言語は、アセンブラと呼ばれるユーティリティプログラムによって実行可能なマシンコードに変換されます。変換プロセスは、アセンブリ、またはコードのアセンブルと呼ばれます。

続きを読む こちら

乾杯!!

2
Sachin Thapa

アセンブリコードは、 assembler と呼ばれるものを介して実行されるため、オブジェクト/マシンコードへの変換と同様のプロセスを持っています(指定された例のコンパイラに類似) )。

0
David Frye