Ensamblador - AYUDA POR LO QUE MAS QUERAIS

 
Vista:

AYUDA POR LO QUE MAS QUERAIS

Publicado por JOSE ORTEGA (2 intervenciones) el 20/02/2007 12:38:17
COMPAÑEROS TENGO QUE PREPARAR ESTE POGRAMA PARA PRESENTARLO ESTE JUEVES Y ME ENCUENTRO CON UN PROBLEMA AL QUE NO SE DAR SOLUCION.LEED EL PROBLEMA Y MAS ABAJO OS EXPONGO MI DUDA.MIL GRACIAS!!

En multitud de algoritmos de control es necesario emplear las funciones trigonométricas,
aunque el procesador que se utilice carezca de la posibilidad de realizarlas mediante las oportunas instrucciones específicas (esto sólo se suele encontrar en los procesadores de gama alta que dispongan de una extensión coprocesadora matemática).
Por tanto, se propone diseñar una subrutina o procedimiento que calcule el seno de un valor
angular. Para ello se aplicará el desarrollo del seno mediante el polinomio generador:

sen(x) = x – (x3/3!) + (x5/5!) – (x7/7!) + (x9/9!) – (x11/11!) etcétera

Estando expresado en radianes el valor angular x. La máxima precisión se obtiene cuando el polinomio generador tiene infinitos términos. No obstante, es posible conseguir una precisión
muy aceptable con muy pocos. Para que no resulte una carga computacional excesiva ni
aumente la complejidad por necesitarse aritmética de precisión extendida, empléese el menor número de términos en el polinomio, siempre que se consiga una precisión del resultado en el rango de las milésimas (el polinomio deberá terminar en un término negativo).

Consejos para la implementación:
Si se analiza el problema en los términos en los que está redactado, surgen ciertas imprecisiones. La primera de ellas es cómo se indica el valor angular. Si se indica en radianes,
entonces éste puede ir desde 0 a 2, esto es, desde 0 hasta 6’2830 aproximadamente. Por tanto, surge el problema de cómo indicar el valor, dado que es un real con parte entera y parte
fraccionaria. De igual forma, el resultado es un real que incluso puede hasta tener parte entera
no nula (caso del valor del seno igual a 1 o –1). Por lo anterior, surge el problema de cómo expresar los valores y con qué precisión hacerlo.
Por otro lado, si se analiza el problema, se ve que existe una notable simetría en los
resultados, de manera que bastaría con limitar el cálculo a los valores del primer cuadrante, desde 0 hasta /2 radianes (0º a 90º), puesto que el seno de los ángulos de los restantes cuadrantes puede obtenerse fácilmente a partir de un valor asociado en el primero. Si el ángulo
 es del segundo cuadrante entonces su seno es el mismo que el de su complementario, –.
Si es del tercero, su seno será el de (– ) pero cambiado de signo. Y si es del cuarto cuadrante, entonces será el de (2–) cambiado de signo.
Por otro lado, para evitar tener que hacer divisiones (el factorial como divisor), se puede
resolver mediante sólo productos, haciendo:

sen(x) = xK1 + x3K3 + x5K5 + x7K7 + x9K9 + x11K11 etcétera

siendo K1=1/(1!), K3= –1/(3!), K5=1/(5!), K7= –1/(7!), K9=1/(9!), etcétera. La clave está en que estos coeficientes son constantes y por ello no tienen por qué calcularse en tiempo de ejecución, sino que podrían estar precalculados y puestos en una tabla a la que se accedería cada vez que fuese necesario (resolución por acceso a tabla).
Por otro lado, la expresión anterior puede reorientarse aplicando la asociatividad, resultando lo siguiente (polinomio con cinco términos, por simplificar):

sen(x)=(x[(x2)[(x2)[(x2)[(x2)K9]+K7]+K5]+K3]+K1])

Lo que se adaptaría mejor al enfoque de su realización mediante un bucle de factor de iteración cinco, en el que el cuerpo del bucle es un proceso tipo MAC (multiplicar-acumular), tan común
en el procesamiento digital de señales.
Si, por ejemplo, x se expresa como una palabra en coma fija con signo, un bit entero y catorce fraccionarios, entonces se está en condiciones de poder abordar el problema con una precisión razonable. Si se sigue este criterio, entonces se estaría en condiciones de trabajar con una precisión angular de 2-14 radianes, es decir, casi 3’5 milésimas de grado, lo que parece más que razonable para la mayoría de las situaciones que normalmente se puedan presentar.

MI PROBLEMA ES:
TENGO QUE PASAR POR AX UN DATO QUE VA DESDE 0 A 6,283 QUE SERA X EL VALOR DEL SENO QUE NECESITO CALCULAR.BIEN PUES UNA VEZ INTRODUCIDO EL DATO EN EL REGISTRO NECESITO REDUCIR ESTE PARA PASARLO A UN VALOR QUE ESTE EN EL PRIMER CUADRANTE, ES DECIR DE 0 A 1,570796 Y EL PROBLEMA CON EL QUE ME ENCUENTRO ES QUE AL TENER PARTE ENTERA EL DATO QUE ME DAN PUES LA COMPARACION NO ME SIRVEO MEJOR DICHO ES QUE NO SE COMO HACERLO POR FAVOR QUIEN PUEDA AYUDARME LO AGRADECERIA MUCHISIMO.PARA MI ESTO ES UN QUEBRADERO DE CABEZA PERO SE QUE PARA ALGUNOS DE VOSOTROS ES ALGO SENCILLO Y RAPIDO.GRACIAS DE VERDAD!!!! ESPERO VUESTRA SOLUCIONES.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder