martes, 6 de marzo de 2012

Tarea Intro. Ensamblador


Para mi reporte sobre mi tarea intro, decidi hacer un programa que muestra el promedio de n cantidad de numeros.

Codigo en C
Después se compila mediante la siguiente instrucción para asi obtener el código ensamblador

gcc -S factorial.c
Este es el resultado:

Código Optimizado
Optimizar el codigo realiza modificaciones sobre el código intermedio para mejorar la eficiencia en velocidad y tamaño.  En mi caso solo quite intrucciones que me parecierón extras como movimientos de memoria innecesarios y el siguiente es el código optimizado.
Cuando recién compilamos aparecerán muchas líneas, algunas etiquetas como .file, .type, tambien fueron algunas que elimine. Decidi comentarizar las lineas para localizar y entender cada parte de lo que realizaba el programa en este lenguaje.

Aun me faltaron algunas lineas e instrucciones de identificar porque aun no comprendia lo que realizaban pero aqui las explico.
 leal 44(%esp), %edx -> Transfiere la dirección de eax para el registro edx
cmpl %eax, 40(%esp) -> Resta fuente de destino y actualiza las banderas 
leave -> Libera las variables locales creando por la anterior
idivl -> La instrucción IDIV divide el contenido del 64 bits sin signo "edx": 
"eax" (construido mediante la visualización "edx" como los más significativos cuatro 
bytes y "eax" (como los menos significativos cuatro bytes) por el valor de operando 
especificado. El resultado cociente de la división se almacena en "eax", mientras que 
el resto se coloca en "edx".
 
Después realice la prueba con el código optimizado de la siguiente manera 

Referencia :
También tome de base la publicación de mi compañero Juan Carlos  para comprender más algunas lineas de código.