All pastes #766062 Raw Edit

Something

public text v1 · immutable
·published 2007-11-08 16:17 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
    mov cl,[parhossz]
ascii_loop:
    mov al,[parhossz]
    sub al,cl
    push ecx
    mov cl,al
    mov al,0Ah
    mov dl,0Ah
belso_loop:
    mul dl
    dec cl
    cmp cl,0h
    je loop_vege
    jmp belso_loop
loop_vege:
    pop ecx
    mov dl,[ebx+ecx]
    sub dl,30h
    mul dl
    mov [parameter+ecx],al
    loop ascii_loop
    ;--------------------------------------

    ;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 cl,[parameter]
    sub cl,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 ecx
    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 resb 1
    szamok resb 65536