All pastes #766357 Raw Edit

Anonymous

public text v1 · immutable
·published 2007-11-08 20:36 UTC
rendered paste body
section .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