Test Foro de elhacker.net SMF 2.1

Programación => Programación General => ASM => Mensaje iniciado por: kch_l en 5 Noviembre 2010, 02:37 AM

Título: Raiz cuadrada exacta
Publicado por: kch_l en 5 Noviembre 2010, 02:37 AM
Un profesor que me da clases me reto a hacer un programa en ensalmblador del 8086 el cual leyera un numero de 16 bits, y a este le sacara raiz cuadrada, pero con punto decimal, pude hacerlo pero para numeros del 1 al 999 y redondeado, porque no tengo idea de como se hace con punto decimal, si alguien me puede dar algun tip se lo agradeceria :D
Título: Re: Raiz cuadrada exacta
Publicado por: Space.Medafighter.X en 21 Enero 2011, 01:10 AM
Puedes usar las instrucciones FPU para obtener la raiz cuadrada con punto decimal de la siguiente forma :

fld qword[x]
fsqrt
fst qword[x]


Siendo "x" :

x dq 10f

Ejemplo :

format PE console
include 'win32ax.inc'
section '.code' readable writeable executable
x dq 10f
entry $
fld qword[x]
fsqrt
fst qword[x]
invoke printf,"%f",double[x]
invoke ExitProcess,0
section '.idata' import data readable
library msvcrt,'msvcrt.dll',kernel32,'kernel32.dll'
import msvcrt,printf,'printf'
import kernel32,ExitProcess,'ExitProcess'
Título: Re: Raiz cuadrada exacta
Publicado por: Иōҳ en 21 Enero 2011, 01:26 AM
Código (asm) [Seleccionar]

C70302000000 mov dword ptr [ebx], 00000002
DB03 fild dword ptr [ebx] ST(0)=2
D9FA fsqrt ST(0)=1,41421356...