All pastes #755802 Raw Edit

Mine

public text v1 · immutable
#755802 ·published 2007-10-30 22:17 UTC
rendered paste body
section .text
global _start
_start:
    push ebp ;ebp elmentese
    mov ebp, esp ;esp a verem tetejere mutat

    mov ebx,[ebp+12] ;az elso argumentum cime

    ;A parameter atmasolasa a parameter cimkeju teruletre
    mov ecx,0
par_beolv:
    cmp ecx,4
    je beolv_vege
    cmp byte [ebx+ecx],0
    je beolv_vege
    mov al,[ebx+ecx]
    mov [parameter+ecx],al
    inc ecx
    jmp par_beolv
beolv_vege:
    mov [parhossz], cl ;cl a string hossza lesz


    ;;;parameter kiiratasa
    mov edx,parhossz
    mov ecx,parameter
    mov ebx,1
    mov eax,4
    int 80h
    ;;;;;;;;;;;;;;;;;;;;;;;;

;;;;; A parameter konvertalasa ASCIIbol 2byteos egesz szamma
    xor edx,edx ;edx kinullazasa
    xor ecx,ecx ;ecx kinullazasa
    mov cl,[parhossz] ;ecx:=parameter hosszaval
konv_loop:
    mov al,[parhossz]
    sub al,cl
    mul al,0Ah
    mov bl,al
    mov al,[parameter+ecx]
    sub al,16h
    mul al,bl
    add dl,al
    loop konv_loop
    xor eax,eax
    mov al,dl
;;;;; A parameter konvertalasa kesz, eax regiszterben van


    call sqrt

    pop ebp
    mov ebx,0
    mov eax,1
    int 80h

;;;;; Gyokvonas
;;;;; Bemeno adat: eax
;;;;; Kimeno adat: ecx:=[sqrt(eax)]
sqrt:
    mov ecx,eax ;eax elmentese
    mov ebx,eax ;edx lesz az intervallum teteje
    shr eax,1 ;eax az intevallum kozepere mutat

ciklus:
    push eax
    mul eax ;eax:=eax*eax
    cmp eax,ecx
    je megvan_a_gyok
    cmp eax,ecx
    ja nagyobb
    cmp eax,ecx
    jb kisebb

; Ha kisebb volt eax a szam gyokenel, akkor megnezzuk a ra kovtkezo szamot
; Ha az nagyobb vagy egyenlo, akkor megvan a gyok.
; Ha kisebb, akkor valtoztatunk az intervallumon
kisebb:
    pop eax
    inc eax
    push eax
    mul eax
    cmp eax,ecx
    jae megvan_a_gyok
    pop eax
    add eax,ebx
    shr eax,1
    jmp ciklus

; Ha eax nagyobb volt a szam gyokenel, akkor megnezzuk az egyel elotte levo szam                                             ot
; Ha az kisebb vagy egyenlo a gyokenel, akkor megvan a gyok
; Ha nagyobb, akkor valtozattunk az intervallumon
nagyobb:
    pop eax
    dec eax
    push eax
    mul eax
    cmp eax,ecx
    jbe megvan_a_gyok
    pop eax
    mov ebx,eax ; Beallitjuk az intervallum tetejere edx-et
    shr eax,1 ; eax:=eax/2
    jmp ciklus

megvan_a_gyok:
    mov eax,ecx
    pop ecx ;ecx=[sqrt(eax)]

    ret
;;;;; A gyokkereses vege

section .bss
    kimenet resd 300
    parameter resb 5