All pastes #766172 Raw Edit

Someone

public text v1 · immutable
·published 2007-11-08 17:53 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
ascii_loop:
    cmp cx,[parhossz]
    je ascii_vege
    mov ah,0h
    add al,[ebx+ecx]
    sub al,30h
    mov dx,0Ah
    mul dx
    inc cx
    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 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