rendered paste bodysection .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 <n>",0Ah
len equ $-hlpstr
section .bss
iterator resb 1
kiszoveg resb 65535
parhossz resb 1
parameter resb 1
szamok resb 65536