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
xor eax,eax
ascii_loop:
cmp cx,[parhossz]
je ascii_vege
add ax,[ebx+ecx]
sub ax,30h
mov dx,0Ah
mul dx
inc ecx
jmp ascii_loop
ascii_vege:
mov [parameter],ax
;--------------------------------------
mov edx,2
mov ecx,parameter
mov ebx,1
mov eax,4
int 80h
;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 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 resd 1
szamok resb 65536