Вы находитесь на странице: 1из 10

OBJETIVOS Las subrutinas, representan una gran versatilidad en la programacin en lenguaje ensamblador, conocer su estructura adems de obtener las

ecuaciones necesarias para el diseo de las mismas, se convierte una prioridad en sta prctica, para su posterior aplicacin en nuestros cdigos de trabajos posteriores. Tambin es importante conocer el tipo de subrutinas y ms que nada, los fundamentos en los que se basa nuestra decisin a la hora de elegir una subrutina de una, dos o hasta tres variables.

INTRODUCCIN En el mundo de la programacin, las subrutinas son ampliamente usadas por la versatilidad que nos otorgan las mismas; su gran capacidad de procesamiento as como la opcin de anidar subrutinas dentro de otras subrutinas con el fin de poder conseguir un programa mucho ms preciso, as como ms ajustado a lo que necesitamos, es por eso que se realiz el anlisis de una subrutina de tres variables, para poder obtener una ecuacin caracterstica que nos diera la pauta para manipularla a gusto y principalmente, necesidad del programador.

MARCO TERICO Se le conoce como subrutina a un segmento de cdigo, separado del principal, el cual puede ser llamado en cualquier momento desde este o incluso, desde otra subrutina. El efecto que ocasiona el llamar una subrutina dentro del programa principal, es detenerse en la lnea donde se realiza el llamado a la subrutina y a continuacin dirigirse a la subrutina y ejecutar el cdigo que se encuentra en la misma, La ventaja que nos brinda la subrutina, es que stos pedazos de cdigo pueden ser utilizados, no slo para este, sino para futuros proyectos, simplificando las instrucciones en el mismo.

Las subrutinas de tiempo, son el tipo de subrutinas que se abarcaron en este ejercicio, pues dichas subrutinas funcionaban de tal manera que realizaran ciclos mquina con NOPS (NO OPERATION) de tal manera que slo hicieran tiempo durante la ejecucin de nuestro programa, por tanto, es importante obtener una ecuacin de la subrutina que se encuentre en funcin de la cantidad de variables que podemos controlar, de esta manera, podremos obtener desde un mnimo hasta un mximo nmero de Ciclos Mquina los cuales generaran tiempo de espera en nuestro programa.

DESARROLLO Se realiz una prueba de escritorio de la Subrutina de 3 variables, considerando los siguientes valores: Var3 = 5, Var2 = 4, y Var1 = 3; esto con el fin de poder determinar una ecuacin donde datos Var3, Var2 y Var1 nos otorgue la cantidad de ciclos mquina que se realizarn, o inversamente, dada una cantidad de ciclos mquina, obtener los valores respectivos de Var3, Var2 y Var1 para obtener esa cantidad. A continuacin en la Figura X y Y se muestran las tablas para obtener los ciclos mquina realizado en Excel. Como se puede observar, la cantidad de NOPS implementados en el programa son 3, por lo que con los valores anteriormente mencionados, al terminar la subrutina, obtenemos un total de 72 NOPS, que sumados a los dems ciclos, nos dan un total de 217 Ciclos Mquina.
DETERMINACIN DE LA ECUACIN

Ahora procederemos a determinar la ecuacin para obtener la cantidad de ciclos mquina en una subrutina de tiempo de 3 variables, y corroborar el resultado anteriormente expuesto. Basndonos en la tabla, buscaremos aquellos CM que slo son ejecutados una vez: #CM1 = 6 (carga0) + 2 (Call) + 2 (Dec3) + 2 (Return) = 12 CM Ahora analizaremos el resto de las instrucciones las cuales estn relacionadas con nuestras variables VAR3, VAR2 y VAR1:

#CM2 = 4 * Var3 + (#NOPS * Var3 * Var2 * Var1) + 2 * Var3 * Var2 + 3(Var1 1)*Var2*Var3 + 2*Var3*Var2 + 3*(Var2-1)*Var3 + 3(Var3 - 1) Realizamos las operaciones entre los parntesis: #CM2 = 4 * Var3 + (#NOPS * Var3 * Var2 * Var1) + 2 * Var3 * Var2 + 3*Var2*Var3*Var1 3*Var2*Var3 + 2*Var3*Var2 + 3*Var3*Var2 - 3*Var3* + 3*Var3 3 Reducimos respecto a trminos comunes: #CM2 = 4 * Var3 + (#NOPS * Var3 * Var2 * Var1) + 2*Var3*Var2 + 3*Var2*Var3*Var1 3*Var2*Var3 + 2*Var3*Var2 + 3*Var3*Var2 - 3*Var3* + 3*Var3 3 Por lo tanto nos queda: #CM2 = 4*Var3 + Var3*Var2*Var1*(#NOPS + 3) + 4*Var3*Var2 3 Finalmente, uniendo #CM1 y #CM2, nos da: #CM = 12 + 4*Var3 + Var3*Var2*Var1*(#NOPS + 3) + 4*Var3*Var2 3 Simplificando una vez ms: #CM = 9 + 4*Var3 + Var3*Var2*Var1*(#NOPS + 3) + 4*Var3*Var2

Con Var3 = 4, Var2 = 3 y Var1 = 2 tenemos #CM = 9 + 4*4 + 4*3*2*(6) + 4*4*3 = 9 + 16 + 144 + 48 = 217.

Y en efecto, obtenemos la misma cantidad de ciclos mquinas como se mencion anteriormente. Como nota, la cantidad de NOPS para este programa de subrutina es de 3, por lo que el #NOPS + 3, nos da un resultado de 6.

Figura 1. Primera parte de la tabla de Excel

Figura 2. Segunda parte de la tabla de Excel

El cdigo utilizado en MPLab, se anexa a continuacin en la Figura 3, junto con la Subrutina ST3V.ASM mostrado en la Figura 4.

Figura 3. Cdigo realizado en MPLab

Figura 4. Cdigo del archivo ST3V.ASM

RETO DE DISEO

Para determinar los valores que deban tener nuestras 3 variables, dise un programa en C, el cual realizara el barrido en mis 3 variables, e ira evaluando por cada incremento en cada una de ellas, comenzando con Var1, despus Var2 y finalmente Var3, utilizando la ecuacin anteriormente mencionada. La condicin importante fue que me mostrara aquellas combinaciones que en la salida me dieran el valor de 1x106 ciclos mquina, sin embargo no encontr alguna combinacin posible para llegar a dicho valor, por lo que se anexan aquellos valores con el 0.0001% de tolerancia, esto es, un ciclo de mquina ms y un ciclo de mquina menos.

Figura 5. Cdigo realizado en C, para obtener los valores de var1,var2 y var3.

Figura 6. La salida del cdigo en C, mostrando las combinaciones posibles.

En la pantalla de MS-DOS se puede observar en la primera cantidad, el nmero de CM que se obtuvieron, posteriormente se muestra el valor de Var3, Var2 y Var1 respectivamente. Se implement la combinacin Var3 = 98, Var2 = 255 y Var1 = 6 en MPLab, donde debemos obtener 1000001 CM. Observamos lo siguiente en el Stopwatch, mostrado en la Figura 7.

Figura 7. Comprobacin con los valores obtenidos con el cdigo en C

Se puede observar claramente que nos marca la cantidad de Instruction Cycles igual a 1000001, con lo que comprobamos el correcto funcionamiento tanto de la ecuacin, como el programa en C, obteniendo una tolerancia del 0.0001%. Ahora comprobaremos los valores ocupados inicialmente donde se ocuparon al inicio con Var3 = 4, Var2 = 3 y Var1 = 2; recordemos que la cantidad de CM eran de 217.

Figura 8. Utilizando los valores Var3 = 4, Var2 = 3 y Var1 = 2. Se puede corroborar con facilidad que la cantidad de instrucciones es de 217, como se esperaba y se haba calculado ya anteriormente.

CONCLUSIONES

Las subrutinas de tiempo, sin duda sern de gran utilidad en posteriores programas; ya con el simple hecho de conocer el funcionamiento de una subrutina, podemos utilizarla para ms aspectos que simplemente hacer que pasen cierta cantidad de ciclos mquina, lo cual se aplicar en futuros proyectos. Al ser una tarea ya en entorno de MPLab, repasamos los conceptos para su gil uso posteriormente.

BIBLIOGRAFA

Wilkes, M. V.; Wheeler, D. J.; Gill, S. (1951). Preparation of Programs for an Electronic Digital Computer. Addison-Wesley. Wheeler, D. J. (1952). "The use of sub-routines in programmes". Proceedings of the 1952 ACM national meeting (Pittsburgh) on - ACM '52. p. 235

REFERENCIAS ELECTRNICAS

http://asm86.wordpress.com/2012/05/19/proceso-subrutina-funcion-y-metodo-soncosas-diferentes/ http://www.fdi.ucm.es/profesor/rhermida/FC_practica3.pdf http://es.wikipedia.org/wiki/Subrutina

UNIDAD PROFESIONAL INTERDISCIPLINARIA EN INGENIERA Y TECNOLOGAS AVANZADAS

MICROCONTROLADORES, MICROPROCESADORES E INTERFAZ

Subrutina de 3 Variables

Daniel Alberto Cadena Daz

Profesor: Gutirrez Begovich David Arturo

Grupo: 2MV12

26/08/2013

Вам также может понравиться