; Template for console application
         .586
         .MODEL  flat, stdcall
         OPTION CASEMAP:NONE

Include kernel32.inc
Include masm32.inc

IncludeLib kernel32.lib
IncludeLib masm32.lib

         .CONST
MsgExit  DB    "Press Enter to Exit",0AH,0DH,0

         .DATA
zap      DB    'Input value <65024:',13,10,0
string   DB    10 dup ('0')
otw      DB    13,10,'Root ='
rez      DB    '   ',13,10,0

         .DATA?
inbuf    DB    100 DUP (?)

         .CODE
Start:
;Ввод
vvod:    Invoke StdOut,ADDR zap 
         Invoke StdIn,ADDR string,LengthOf string
         Invoke StripLF,ADDR string
;Преобразование         
         mov    BH,'9'
         mov    BL,'0'
         lea    ESI,string
         cld
         xor    DI,DI
cycle:   lodsb          ; прочитали символ
         cmp    AL,0    ; если 0, то конец
         je     calc
         cmp    AL,BL   ; это цифра ?
         jb     vvod
         cmp    AL,BH
         ja     vvod
         sub    AL,30h  ; получили цифру
         cbw            ; расширили
         push   AX      ; сохранили
         mov    AX,10   ; занесли 10
         mul    DI      ; умножили, результат в DX:AX
         cmp    DX,0
         jne    vvod
         pop    DI      ; в DI - цифра
         add    AX,DI
         jc     vvod
         mov    DI,AX   ; DI - число        
         jmp    cycle
;Вычисление sqrt(dx#ax) 
calc:    mov    BX,1
         mov    CX,0
         mov    AX,1 ; сумма
cycl:    cmp    AX,DI
         ja     preobr
         add    BX,2
         add    AX,BX
         jc     vvod
         inc    CX
         jmp    cycl
;Преобразование
preobr:  mov    AX,CX
         mov    EDI,2
         mov    BX,10
again:   cwd
         div    BX
         add    DL,30h
         mov    rez[EDI],DL
         dec    EDI
         cmp    AX,0
         jne    again
         Invoke StdOut,ADDR otw
                   
         XOR    EAX,EAX
         Invoke StdOut,ADDR MsgExit
         Invoke StdIn,ADDR inbuf,LengthOf inbuf		
	
         Invoke ExitProcess,0
         End    Start

