サンプル プログラムのコンパイル例 (2) |
付属のサンプル プログラム prime2.c をコンパイルした結果を例として示します。prime2.c は、prime.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サンプル プログラムのコンパイル例