サンプル プログラムのコンパイル例

付属のサンプル プログラム prime.c をコンパイルした結果を例として示します。prime.c は、最初の 100 個の素数を表示するプログラムです。

prime.c のソースコード

 1:  #include <stdio.h>
 2:  #define NUM 100                         // 探す素数の数
 3:  int main()
 4:  {
 5:      int found = 0;                      // 発見した数
 6:      int trg = 2;                        // 調査対象の数値
 7:      while ( found < NUM )               // NUM 個の素数を発見するまで続ける
 8:      {   int dvsr = 2;
 9:          while ( 1 )
10:          {   if ( dvsr >= trg )          // 発見
11:              {   printf( "%d ", trg );
12:                  found++;
13:                  break;
14:              }
15:              if ( trg % dvsr == 0 )      // 割り切れたら素数ではない
16:                  break;
17:              dvsr++;
18:          }
19:          trg++;                          // 調査対象を進める
20:      }
21:      printf( "\n" );
22:      return( 0 );
23:  }
コンパイル結果

上のプログラムを最適化付きでコンパイルすると、次のアセンブラ コードが生成されます (主要部分のみ)。

                public  _main
_main           proc    near                            ; line 3
                push    bp
                mov     bp,sp
                add     sp,-2
                push    si              ; trg
                push    di              ; dvsr
found$          equ     [bp-2]          ; size=2
                mov     word ptr [found$],0h            ; line 5
                mov     si,2h                           ; line 6
                jmp     ent_1                           ; line 7
top_1:
                mov     di,2h                           ; line 8
                jmp     ent_2                           ; line 9
top_2:
                mov     ax,si                           ; line 15
                cwd
                idiv    di
                cmp     dx,0h
                je      bot_2
                inc     di                              ; line 17
ent_2:
                cmp     di,si                           ; line 10
                jl      top_2
                push    si                              ; line 11
                mov     ax,offset a1?
                push    ax
                call    near ptr _printf
                add     sp,4
                inc     word ptr [found$]               ; line 12
bot_2:
                inc     si                              ; line 19
ent_1:
                cmp     word ptr [found$],64h           ; line 7
                jl      top_1
                mov     ax,offset a2?                   ; line 21
                push    ax
                call    near ptr _printf
                add     sp,2
                xor     ax,ax                           ; line 22
                pop     di
                pop     si
                mov     sp,bp
                pop     bp
                ret
_main           endp
自然でわかりやすく、効率のよいコードが生成されています。

サンプル プログラムのコンパイル例 (2)



Back