![]() |
サンプル プログラムのコンパイル例 (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
サンプル プログラムのコンパイル例