Cuestión B

Idear un sencillo programa y codificarlo para la arquitectura x86 o para ARM (deberá ser una idea original –no una copia-). El programa ha de contener al menos cada una de los componentes vistos en clase. (Operaciones matemáticas, saltos condicionales, incondicionales, llamadas a funciones, pila, llamadas al sistema, etc.). 

Se ha elegido implementar un programa que calcula el máximo común divisor de dos números mediante el algoritmo de Euclides. Consiste en dividir sucesivamente dos números hasta que la división sea exacta. Para la siguiente división, se coge el divisor como nuevo dividendo y el resto como nuevo divisor. 

El código se presenta a continuación:



El programa pide dos números por pantalla y los guarda en los espacios de memoria de 'numero1' y numero2'. Hace una pequeña comparación, ya que si el segundo número introducido es cero, el máximo común divisor será el primer número, por lo que estaría alojado en la variable 'numero1'. Si dicho segundo número no es cero, empieza el bucle. En dicho bucle, se compara de nuevo que el segundo número no es cero (guardado en el registro Edx, aquí se irán guardando los distintos restos de las divisiones), con el fin de salir del bucle una vez termine el cálculo del máximo común divisor. Dentro del bucle, se llama al subprograma 'division', que divide los registros Eax y Ebx, guardándose el resultado en Eax y el resto en Edx (debido a la instrucción div). Finalmente, coloca el antiguo divisor como nuevo 'numero1' y el resto como nuevo 'numero2'. Después, se sigue ejecutando el bucle, hasta que 'numero2' sea cero.