10.4 アセンブラ(assembler)

  3.asによるアセンブルとオブジェクトコード生成の実際
 cc1が生成したアセンブリコード(hello.s)を用いて、asがアセンブルとオブジェクトコード生成を行います。比較のために、cc1が生成したアセンブリコード(hello.s)と、asが生成したオブジェクトコード(objdumpを用いて逆アセンブルしたもの:hello.o)を以下に示します。
<hello.s>
   ↓
 [アセンブル、オブジェクトコード生成:as]
   ↓
<hello.o>(「objdump -d hello.o」で表示)

 hello.o:     file format elf32-i386

 Disassembly of section .text:

 00000000 <main>:
   0:   55                    push   %ebp
   1:   89 e5                 mov    %esp,%ebp
   3:   68 00 00 00 00        push   $0x0
   8:   e8 fc ff ff ff        call   9 <main+0x9>
   d:   c9                    leave
   e:   c3                    ret
 生成されたオブジェクトコードのなかで、push $0x0や<main+0x9>などという相対番地指定されている箇所がありますが、これは後述するリンカによって、実行モジュールとなるべきスタートアップルーチン(/lib/crt[01n].o)などとリンクされることによって、モジュール中でのアロケーションが決定されます(再配置可能オブジェクトと呼ばれる)。