viernes, 17 de enero de 2014
PROGRAMA QUE CALCULA EL MÁXIMO COMÚN DIVISOR "PROGRAMA EUCLIDES"
FUNCIÓN DEL PROGRAMA
Mi programa consiste básicamente en calcular el máximo común divisor de dos números introducidos por teclado. Esto será posible hacerlo para que se ejecute en una máquina que tenga la arquitectura x86.
PROCESO SEGUIDO
Primero repasé teóricamente los documentos que nos han facilitado durante las clases y las transparencias. Luego hice el programa pero en lenguaje C (ya que manejo mejor este lenguaje) de manera que luego pudiera pasarlo sencillamente a x86. Me hizo falta mirar como se hacía el bloque if sin el else y el bucle while ya que el if me servía para intercambiar los números introducidos por teclado con la condición si el NUM1 era mayor que el NUM2.
Luego el primer bucle while me servía para hacer tantas veces una serie de instrucciones para ir calculando primeramente la división del numero mayor introducido entre el menor cambiándose estos valores cada vez que salgan del bucle asta que ese numero menor por que el que se divide sea igual a 0. En segundo bucle while que está dentro del anterior nos sirve para calcular el módulo de la división que vamos realizando de un numero por el otro.
Finalmente, una vez acabado estos bucles obtenemos el M.C.D. que lo imprimos por pantalla.
DIFICULTADES
La primera dificultad encontrada fue que para intercambiar dos números en el if no sabía como hacerlo, ya que no sabíamos si usar en el las variables declaradas o los registros. Al final, me di cuenta de que existía una función que intercambia números y ya no tuve problema.
Aún así mi programa me daba resultados erróneos y pensábamos que el problema estaba en el bucle while pero no fue así. Me di cuenta que al usar el API de C y usar el Invoke scanf nos cambiaban los valores de los registros y por ello los resultados erróneos.
Otra dificultad encontrada era como poner un bucle dentro de otro, ya que nos daba error al decirnos que el segundo while ya estaba declarado. Este error se debe a que while en esta arquitectura no trabaja como función sino como etiqueta y entonces por ello podemos llamarlo como queramos y así resolver el problema. En nuestro caso el segundo bucle dentro del primero lo llamamos módulo.
IMPLEMENTACIÓN EN OTRAS ARQUITECTURAS
Para completar he estado buscando cómo invocar programas ASM desde JAVA, incluyéndole las librerías a java a través del JNI.
Codigo Euclides
Ejecutable x86
Suscribirse a:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario