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

付属のサンプル プログラム prime2.c をコンパイルした結果を例として示します。prime2.c は、prime.c と同じ目的のプログラムですが、既に発見した素数を配列に記憶して検索効率を高めている点が異なります。

prime2.c のソースコード

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

                public  _main
_main           proc    near                            ; line 3
                push    bp
                mov     bp,sp
                add     sp,-202
                push    si              ; trg
                push    di              ; found
primes$         equ     [bp-202]        ; size=200
                xor     si,si                           ; line 6
                mov     di,2h                           ; line 7
                jmp     ent_1                           ; line 8
top_1:
i$              equ     [bp-2]          ; size=2
                mov     word ptr [i$],0h                ; line 10
                jmp     ent_2                           ; line 11
top_2:
                mov     ax,word ptr [i$]                ; line 17
                shl     ax,1h
                lea     bx,word ptr [primes$]
                add     bx,ax
                mov     ax,di
                cwd
                idiv    word ptr [bx]
                cmp     dx,0h
                je      bot_2
                inc     word ptr [i$]                   ; line 19
ent_2:
                cmp     word ptr [i$],si                ; line 12
                jl      top_2
                mov     ax,si                           ; line 13
                shl     ax,1h
                lea     bx,word ptr [primes$]
                add     bx,ax
                mov     word ptr [bx],di
                inc     si
                push    di                              ; line 14
                mov     ax,offset a1?
                push    ax
                call    near ptr _printf
                add     sp,4
bot_2:
                inc     di                              ; line 21
ent_1:
                cmp     si,64h                          ; line 8
                jl      top_1
                mov     ax,offset a2?                   ; line 23
                push    ax
                call    near ptr _printf
                add     sp,2
                xor     ax,ax                           ; line 24
                pop     di
                pop     si
                mov     sp,bp
                pop     bp
                ret
_main           endp
サンプル プログラムのコンパイル例



Back