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
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 <n>",0Ah
len equ $-hlpstr
section .bss
parhossz resb 1
parameter resd 1
szamok resb 65536
szam resb 6