martes, 20 de marzo de 2012

Tarea Intro

LENGUAJE ENSAMBLADOR

Para desarrollar programas ensamblador en Linux podemos elegir entre diversos compiladores.
GAS (GNU Assembler) es el estándar que lleva toda distribución Linux, GAS utiliza la sintaxis AT&T que difiere de la sintaxis Intel (según las opiniones Intel es más s
encillo).

NASM (Netwide Assembler) ofrece la misma funcionalidad que GAS pero utiliza la sintaxis de Intel.

Más sobre toda esta teoría se los dejo en los links de abajo.

Para la tarea intro de cómputo integrado decidí hacer un sencillo programa que determina si un número es par o impar, el programa lo hice en C luego lo pasé a ensamblador mediante la siguiente instrucción:

triana@triana-Satellite-M645:~/Desktop/alfa$ gcc -S Pares.c

Este es el programa que escribí en C:





Como se puede apreciar yo usé gcc para obtener el código ensamblador "Primos.s", gcc utiliza as como ensamblador, es decir el código que tengo es sintaxis AT&T.

Lo podrán confirmar porque en mi código a los nombres de los registros se les añade el prefijo % (pueden encontrar más diferencias entre la sintaxis Intel y AT&T en los links de abajo).

Este es el código que me arrojó gcc, Pares.s:




Reducción de líneas

En la optimización del código solo quité algunas líneas que no son escenciales para su funcionamiento. Las líneas que retiré de mi código fueron las iniciales del nombre del programa, la línea de sección y alineo.

Retiré también las líneas correspondientes a la etiqueta .LFE0 que son las que dicen los parámetros del SO y gcc.

Leí que las directivas CFI solo añaden información al código assembler para definir reglas de cálculo de funciones, por lo que también decidí quitar esas líneas.

Después de "optimizar" mi código, quedó así (pasó de 63 líneas a 49) :




Para obtener el ejecutable de mi código realicé la siguiente instrucción:

triana@triana-Satellite-M645:~/Desktop/alfa$ gcc -o MiPrograma Mejorado.s


Y al final para correr el programa solo hice:

triana@triana-Satellite-M645:~/Desktop/alfa$ ./MiPrograma


Este es el programa corriendo:






A continuación les dejo las ligas de las páginas que usé para comprender los mnemónicos y directivas de mi programa. En ellas también viene bastante información sobre los registros y las principales diferencias entre GAS y NASM.



Cualquier duda o aclaración pueden dejarla en los comentarios.


Saludos!




2 comentarios: