miércoles, 22 de enero de 2014

CUESTIÓN D

En esta cuestion nuestro cometido es desarrollar un programa en arquitectura x86

Para este caso, he escogido un ejercicio simple que consiste en hallar tanto el MCM (minimo común múltiplo) como el MCD (máximo común divisor).
















































Como veis, es un programa bastante sencillo, no requerimos el uso de la pila para variables locales o temporales, ni la invocacion de rutinas de la libreria de C.

Partiendo desde la sección de .DATA  tenemos 5 etiquetas que actuarán como variables, a saber, un contador, uno para guardar tanto el MCM como el MCD y otras dos que serán los números de los que hallar MCD y MCM.

Ya en la sección de .CODE inicializamos el contador a 1 y de ahí pasamos a los bucles. Ya que hemos definido todas las variables como db (es decir, de tamaño de un byte), podemos usar los registros de 8 bits. Recordemos:


Antes de explicar paso a paso el código del programa, explicaré, que este programa busca el MCM comprobando que el contador es múltiplo de ambos números a la vez e incrementando en 1 en caso contrario volviendo a repetir la comprobación. Por este motivo no es adecuado para cifras muy altas. Sin embargo, nos viene bien para la descripción del ensamblador x86.

Como hemos dicho,  los bucles 1 y parte 1 sirven para la comprobación del MCM. El bucle divide el contador entre el primer numero, y la parte 1 hace lo suyo con el segundo numero. Esta division se lleva a cabo por medio de la orden DIV entre los registros AX y BX, guardandose en la parte baja (AL) el cociente y en la parte alta (AH) el resto. Al comparar el resto con 0, nos dará si es un multiplo o por el contrario, saltariamos por medio de un salto condicional al bucle de incremento en el que incrementamos el contador.

Llegados a este punto, la subrutina de la parte 2, guardará el MCM mientras que la parte 3, hallará el MCD mediante una simple formula:

MCD = N1*N2/MCM

Aplicada en esta subrutina.

No hay comentarios:

Publicar un comentario