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 mov cl,[parhossz] ascii_loop: mov al,[parhossz] sub al,cl push ecx mov cl,al mov al,0Ah mov dl,0Ah belso_loop: mul dl dec cl cmp cl,0h je loop_vege jmp belso_loop loop_vege: pop ecx mov dl,[ebx+ecx] sub dl,30h mul dl mov [parameter+ecx],al loop ascii_loop ;-------------------------------------- ;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 cl,[parameter] sub cl,1h feltolt: mov byte [szamok+ecx],1h ;Feltetelezzuk minden szamrol, hogy prim loop feltolt ;-------------------------------------- ;Szita mov ecx,2h mov ebx,ecx szita_loop: cmp bl,[parameter] ja kov_prim mov byte [szamok+ebx],0h add ebx,ecx kov_prim: inc ecx cmp cl,[parameter] ja szita_vege cmp byte [szamok+ecx],1h je beallit jmp kov_prim beallit: mov ebx,[szamok+ecx] mov ecx,ebx jmp szita_loop szita_vege: ;-------------------------------------- ;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 ecx 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 resb 1 szamok resb 65536