本文へスキップ
BecomeCoder

アセンブリ言語コース · 第1章 アセンブリ言語とは · レッスン1

高級言語とアセンブリ

導入

まず、いつも書いているコードが「最終的にどうなるか」を見てみましょう。次の C のコードは、コンパイルするとアセンブリになります。

説明

C のコード:

int add(int a, int b) {
    return a + b;
}

これを x86-64 のアセンブリにすると、およそ次のようになります(Intel 記法)。

add:
    mov     eax, edi      ; 第1引数(a)を eax にコピー
    add     eax, esi      ; eax に 第2引数(b) を足す
    ret                   ; eax を戻り値として関数を終了
  • add:ラベル関数やジャンプ先の目印です(末尾のコロンが目印)。
  • mov eax, ediedi の値を eaxコピーする命令。Intel 記法は 命令 書き込み先, 読み込み元 の順です。
  • ; から行末まではコメント
  • 高級言語の1行が、複数の単純な命令に分解されているのが分かります。

説明(機械語との関係)

mov eax, edi は、実際には 89 f8 のようなバイト列(機械語)です。アセンブリは、この数値の羅列に mov のようなニーモニック(覚えやすい名前)を付けたものにすぎません。だから、アセンブリと機械語はほぼ1対1で対応します。