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 ;1 nem prim
xor eax, eax
mov al, [parameter]
mov byte [szamok+eax], 1h
; kov prim megkeresese
prim_keres:
mov ecx, 0h
prim_keres_loop:
inc ecx
cmp byte [szamok+ecx-1], 0h
je prim_keres_loop
; talalt primet vagy vegigment
cmp cx, [parameter]
je end ; ha nincs tobb akkor kilepunk, egyebkent primet talalt
; kiirjuk a primet
; push ecx
; mov edx, 0h
; mov bl, 10h
;print_loop:
; mov ax, cx ; ax=cx
; div bl ; al=ax/10 ah=ax mod 10
; push ax ; push "al"
; inc edx ; edx++
; xor cx, cx
; mov cl, ah ; cx=ax mod 10
; cmp ecx, 0h
; jne print_loop
; mov ecx, edx
;print_loop2:
; pop ax
; add al, 30h
; mov [kiszoveg], al
; mov edx, 1
; mov ecx, kiszoveg
; mov ebx, 1
; mov eax, 4
; int 80h
; loop print_loop2
; pop ecx
; megvan a prim, minden primediket 0-ra kell allitani.
mov eax, ecx
nemprim_loop:
mov byte [szamok+eax], 0h
add eax, ecx
cmp ax, [parameter]
jle nemprim_loop
jmp prim_keres
end:
;--------------------------------------
;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 cl
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