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:
sub byte [ebx+ecx], 30h
xor dx,dx
mov dl,[ebx+ecx]
add ax,dx
inc cl
cmp cl, [parhossz]
je ascii_vege
mov dx, 0Ah ; 10-el szorzunk mindig
mul dx
jmp ascii_loop
ascii_vege:
mov [parameter], ax
cmp word [parameter], 0h
je help
;-------------------------------------
call itoa
jmp help
;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]
feltolt:
mov byte [szamok+ecx],1h ;Feltetelezzuk minden szamrol, hogy prim
loop feltolt
;--------------------------------------
;Szita
mov byte [szamok], 0h ; 0 nem prim
mov byte [szamok+1], 0h ; 1 nem prim
mov ecx, 2 ; i=2
szita_loop:
mov edx, ecx
add edx, ecx ; j = i+i
szita_loop2:
mov byte [szamok+edx], 0h ; szamok[j]=0
add edx, ecx ; j+=i
cmp edx, [parameter]
jl szita_loop2
mov edx, ecx
inc edx ; j=i+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 ; i=j
cmp ecx, [parameter] ;i<n
jl szita_loop
;kiirjuk a primet
xor ecx, ecx
print_loop:
cmp byte [szamok+ecx], 1h
jne next
xor eax, eax
mov ax, cx
call itoa
pusha
mov edx, 1
mov ecx, hlpstr
add ecx, len
sub ecx, 5
mov ebx, 1
mov eax, 4
int 80h
popa
next:
inc cx
cmp cx, [parameter]
jne print_loop
mov edx, 1
mov ecx, hlpstr
add ecx, len
dec ecx
mov ebx, 1
mov eax, 4
int 80h
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:
;pusha
;mov edx,len
;mov ecx,hlpstr
;mov ebx,1
;mov eax,4
;int 80h
;popa
mov dx,0h
mov bx, 0Ah
div bx ; ax/=10
mov [szam+ecx], dl ;buffer[ecx]=n%10
add byte [szam+ecx],30h
;pusha
;mov edx,len
;mov ecx,hlpstr
;mov ebx,1
;mov eax,4
;int 80h
;popa
inc ecx
cmp ax,0h
jg itoa_loop
mov edx,ecx
mov ecx,szam
mov ebx,1
mov eax,4
int 80h
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 7