section .text global _start _start: push ebp ;ebp elmentese mov ebp, esp ;esp a verem tetejere mutat xor eax, eax ;eax:=0 mov ax, [ebp+8] ;ax:=parameter pop ebp mov ebx,0 mov eax,1 int 80h ret ;;;;; Gyok vonas ;;;;; Bemeno adat: eax ;;;;; Kimeno adat: ecx:=[sqrt(eax)] sqrt: push ebp mov ebp,esp ;ebp elmentese mov ecx,eax ;eax elmentese mov edx,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,edx 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 edx,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)] pop ebp ret ;;;;; A gyok kereses vege