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 ;1 nem prim xor eax, eax mov al, [parameter] mov byte [szamok+eax], 1h ; kov prim megkeresese prim_keres: mov ecx, 0h prim_keres_loop: inc ecx cmp byte [szamok+ecx-1], 0h je prim_keres_loop ; talalt primet vagy vegigment cmp cx, [parameter] je end ; ha nincs tobb akkor kilepunk, egyebkent primet talalt ; kiirjuk a primet ; push ecx ; mov edx, 0h ; mov bl, 10h ;print_loop: ; mov ax, cx ; ax=cx ; div bl ; al=ax/10 ah=ax mod 10 ; push ax ; push "al" ; inc edx ; edx++ ; xor cx, cx ; mov cl, ah ; cx=ax mod 10 ; cmp ecx, 0h ; jne print_loop ; mov ecx, edx ;print_loop2: ; pop ax ; add al, 30h ; mov [kiszoveg], al ; mov edx, 1 ; mov ecx, kiszoveg ; mov ebx, 1 ; mov eax, 4 ; int 80h ; loop print_loop2 ; pop ecx ; megvan a prim, minden primediket 0-ra kell allitani. mov eax, ecx nemprim_loop: mov byte [szamok+eax], 0h add eax, ecx cmp ax, [parameter] jle nemprim_loop jmp prim_keres end: ;-------------------------------------- ;A primek konvertalasa ascii-va ; mov ecx,0 ; mov byte [iterator],0 ;ascii_loop2: ; cmp cx,[parameter] ; je ascii_vege2 ; cmp byte [szamok+ecx],1h ; Ha prim ; call atalakit ;atalakitjuk es beirjuk a kiszoveghez ; inc ecx ; jmp ascii_loop2 ;ascii_vege2: ;-------------------------------------- ; mov edx,kiszoveg ; mov ecx,iterator ; mov ebx,1 ; mov eax,4 ; int 80h mov ebx,0 mov eax,1 int 80h ;Atalakit atalakit: push ebp mov ebp,esp mov eax,ecx xor ebx,ebx atalakit_loop: cmp al,0h je atalakit_vege mov bl,0Ah div bl add ah,30h mov bl,[iterator] mov [kiszoveg+ebx],ah inc byte [iterator] jmp atalakit_loop atalakit_vege pop ebp ret ;-------------------------------------- ;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 ;-------------------------------------- section .data hlpstr db "Hasznalat: ./erasztothenes ",0Ah len equ $-hlpstr section .bss iterator resb 1 kiszoveg resb 65535 parhossz resb 1 parameter resd 1 szamok resb 65536