section .text global _start _start: pop ecx ;argc pop ebx ;a program neve pop ebx ;az elso parameter ;Ha nincs parameter, kiirjuk a helpet cmp ecx, 1 je help jmp nincs_help ;------------------------------------ ;Help kiiratasa help: mov edx,len mov ecx,hlpstr mov ebx,1 mov eax,4 int 80h mov ebx,0 mov eax,1 int 80h ;------------------------------------- nincs_help: ;A parameter konvertalasa ASCII-bol ketbajtos egesz szamma call length xor ecx,ecx xor eax,eax mov dl,0Ah ; 10-el szorzunk mindig ascii_loop: sub byte [ebx+ecx], 30h add al,[ebx+ecx] inc cl cmp cl,[parhossz] je ascii_vege mul dl jmp ascii_loop ascii_vege: mov [parameter],ax ;------------------------------------- ;Feltolti a "szamok" cimkeju teruletet ;Az n. bajt az n. szamot reprezentalja, erteke 0h vagy 1h attol fuggoen, hogy a szam prim vagy nem xor ecx,ecx mov cx,[parameter] sub cx,1h feltolt: mov byte [szamok+ecx],1h ;Feltetelezzuk minden szamrol, hogy prim loop feltolt ;-------------------------------------- ;Szita mov byte [szamok], 0h ; 0 nem prim mov byte [szamok], 0h ; 1 nem prim mov ecx, [parameter] ; ecx = n szita_loop: mov edx, ecx add edx, ecx ; edx = 2*ecx szita_loop2: mov byte [szamok+edx], 0h add edx, ecx ; edx+=ecx cmp edx, [parameter] jl szita_loop2 mov edx, ecx inc edx ; edx=ecx+1 szita_loop3: cmp byte [szamok+edx], 1h je szita_loop3_end inc edx cmp edx, [parameter] jl szita_loop3 szita_loop3_end: mov ecx, edx cmp ecx, [parameter] jl szita_loop ;kiirjuk a primet ; mov eax, 15 ; mov dl, 10 ; div dl mov eax, 15 call itoa mov ebx,0 mov eax,1 int 80h ;Megnezi a parameter hosszat, es beirja a parhossz cimkere length: push ebp mov ebp,esp xor ecx,ecx ;ecx kinullazasa mov dl,0h length_loop: cmp dl,[ebx+ecx] je rtrn inc cl jmp length_loop rtrn: mov [parhossz],cl pop ebp ret ;-------------------------------------- ; eax->szam string itoa: pusha mov ecx, 0h ;i=0 itoa_loop: mov dl, 0Ah ; dl=10 div dl ; ax/=10 mov [szam+ecx], ah ;buffer[ecx]=n%10 mov dl, 0Ah div dl ; eax/=10 inc ecx cmp eax, 0h jne itoa_loop dec ecx itoa_loop2: push ecx add byte [szam+ecx], '0' mov edx, 1 mov ecx, [szam+ecx] mov ebx, 1 mov eax, 4 int 80h pop ecx dec ecx cmp ecx, 0h jg itoa_loop2 popa ret section .data hlpstr db "Hasznalat: ./erasztothenes ",0Ah len equ $-hlpstr section .bss parhossz resb 1 parameter resd 1 szamok resb 65536 szam resb 6