RE:potenciacion en ensamblador!
Hola!
Puedes utilizar la unidad de punto flotante (287) o superior.
En este caso me refiero a los llamados números reales, con variables tipo IEEE 8 o IEEE 10, que se son de 64 y 80 bits respectivamente.
Primero a la teoria:
x^y = T
ln x^y = ln (T)
y * ln (x) = ln (T)
e * (y * ln (x)) = e * ln (T)
e * (y * ln (x)) = T = x^y
En este caso no existe en las instrucciones de FPU funciones tales comologaritmo natural o Exponencial. Pero si exiten otros funciones que mediante despeje se puede realizar una función de tipo log (x).
Para favorecer la fórmula hagamos:
x^y = T
log2 x^y = log2 (T)
y * log2 (x) = log2 (T)
2^[y * log2 (x)] = 2^[log2 (T)]
2^[y * log2 (x)] = T
Los registros del FPU estan ligados entre si en forma de pila y son de 80 bits.Te adjunto una prueba realizada para las intrucciones del FPU, e implementar la función de potenciación. Aunque tambien, si deseas, puedes realizar multiplicaciones multiples pero esta vez con los registros e intrucciones del chip 8087+.
{Compilado con Borland Pascal 7.0}
program exp;
{$N+}
{$E-}
var vGeneral:extended;
procedure power (x,y:extended); assembler;
asm
fld x
fld y
fyl2x
fld st
frndint
fsub st(1),st
fxch st(1)
f2xm1
fld1
fadd
fscale
fstp st(1)
fstp vGeneral
end;
begin
power (2,3);
writeln (vGeneral);
end.