Assembly - raiz quadrada

Olá, como estão pessoal?

Gostava de saber, se é possível fazermos um programa da raiz quadrada em assembly x86 16bits.
Tentei pesquisar na Internet, código sobre esta situação mencionada anteriormente, e não consegui encontrar nada de jeito!
 
Código:
include 'emu8086.inc'
#make_COM#
org  100h   ; set location counter to 100h

mov [0710h],80h
mov [0720h],100h
mov si,0

mainloop:
inc si
mov ax,[0710h]
mov bx,[0720h]
mul ax
cmp ax,bx
je exit
jna lessthan
ja greaterthan
exit:
mov ax,[0710h]
ret

lessthan:
mov [0740h],1
mov di,si
call createnumber
mov bx,[0710h]
or ax,bx
mov [0710h],ax
jmp mainloop

greaterthan:
mov dx,[0740h]
cmp dx,1
je isenteredbefore
mov ax,[0710h]
shr ax,1
mov [0710h],ax
jmp mainloop
isenteredbefore:
mov di,si
dec di
dec di
call rorwithone
mov bx,[0710h]
and ax,bx
mov bx,ax
mov di,si
call createnumber
or ax,bx
mov [0710h],ax
jmp mainloop 

createnumber PROC
mov ax,80h
mov cx,di
createnumberloop:
shr ax,1
dec cx
cmp cx,0
jne createnumberloop
ret             
createnumber ENDP                 

rorwithone PROC
mov [0730h],80h
mov cx,di
rorwithoneloop:
mov ax,[0730h]
sar ax,1
mov bx,[0730h]
or ax,bx
mov [0730h],ax
dec cx
cmp cx,0
jne rorwithoneloop
ret             
rorwithone ENDP     

end

https://stackoverflow.com/questions/26918770/assembly-8086-square-root
 
Agradeço desde já o tempo que perdeu a tentar encontrar um código que responda ao que perguntei,... mas esse mesmo código n funciona.
Não funciona? porquê?
Não tenho compilador ASM86 para testar (e duvido que muita gente por aqui tenha) mas no site ninguém se queixou de não funcionar.
 
Estude, perceba, pegue no código dado como exemplo e adapte.

Aqui ninguém tem por hábito fazer os programas para os outros. Pelo menos de forma gratuita

O que diz é tudo muito bonito, mas ao invés de dizer "estude" podia-me dar referências de livros ou videos para conseguir adaptar o código acima menciado ou então simplesmente esteja calado... se n quer ajudar n ajude.
 
Para uma cadeira de arquitetura de computadores...

Conselhos:
  1. Fazer o algoritmo à mão em papel.
  2. Escrever o pseudo código.
  3. Fazer um programa numa linguagem de mais alto nível usando o algoritmo desenvolvido (C por ex.).
  4. Fazer em Assembly seguindo a lógica desenvolvida até aqui, partindo o problema em pedaços mais simples.
 
O que diz é tudo muito bonito, mas ao invés de dizer "estude" podia-me dar referências de livros ou videos para conseguir adaptar o código acima menciado ou então simplesmente esteja calado... se n quer ajudar n ajude.
Caro @PlzHELPPPP : se tem a necessidade de fazer um código cuja aplicação é (em princípio) meramente académica, terá acesso também à teoria e não só ao problema.

Mais uma vez, mantenho o meu conselho: estude.

Se não tem a maturidade para encaixar um conselho válido, parece-me justificável que precise vir pedir a solução. Infelizmente, não será a minha pessoa a contribuir para tal.
 
Back
Topo