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

Universidad de El Salvador

Facultad Multidisciplinaria de Occidente

Departamento de Ingeniera y Arquitectura.-------------------------------------------------------------------------------Arquitectura de Computadoras_


04 Septiembre - 2015_

_Gua de Trabajo No 4_
Introduccin a la Programacin en GNU-Assembler
en la Plataforma IA-32 en el Entorno GNU/Linux

Objetivos_

_Conocer los registros de propsito general en la plataforma IA-32


_Entender como se ejecuta una instruccin en el procesador.
_Conocer las partes de un programa escrito en lenguaje ensamblador.
_Conocer las herramientas necesarias para el desarrollo de aplicaciones en
lenguaje ensamblador.
_Entender el funcionamiento de las llamadas a funciones de la biblioteca estndar de C.

Indicaciones_ A continuacin se presenta una serie de interrogantes, conteste o explique destacando en los
puntos ms importantes, haciendo uso de sus apuntes y material de los libros previamente recomendados.

Parte I_ Programacin en Lenguaje Ensamblador [ GNU-Assembler GAS ]


La programacin en lenguaje ensamblador ofrece diferentes ventajas. Un programa escrito en lenguaje
ensamblador requiere considerablemente menos memoria y tiempo de ejecucin que un programa escrito en un
lenguaje de alto nivel. La programacin en lenguaje ensamblador depende de la arquitectura del computador
sobre el cual se trabaja, esto es importante para entender el funcionamiento interno de la mquina, por ello al
programar en ensamblador se llega a comprender cmo funciona el computador y cmo es su estructura bsica.
La capacidad de poder escribir programas en lenguaje ensamblador es muy importante para los profesionales del
rea de Sistemas Operativos debido a que los programas residentes y rutinas de servicio de interrupcin casi
siempre son desarrollados en lenguaje ensamblador. Adems, aun cuando la mayora de los especialistas en
programacin desarrolla aplicaciones en lenguajes de alto nivel, que son ms fciles de escribir y de mantener,
una prctica comn es codificar en lenguaje ensamblador aquellas rutinas que han causado cuellos de botella en
el procesamiento.

Registros de propsito general


Los registros de propsito general se utilizan para almacenar temporalmente datos a medida que se procesan en
el procesador. Los registros de propsito general, han evolucionado a partir de los viejos 8 bits del procesador
8080 a hoy dia a los registros de 32 bits disponible en los procesadores Pentium y posteriores. Cada nueva
versin de los registros de propsito general se crea para ser completamente compatible con los procesadores
anteriores. Por lo tanto, el cdigo que utiliza registros de 8 bits en el 8080 sigue siendo vlida en los chips
Pentium de 32 bits. Aunque la mayora de registros de propsito general pueden ser utilizados para la realizacin
de cualquier tipo de datos, algunos han adquirido usos especiales, que se utilizan constantemente en los
programas en lenguaje ensamblador. La siguiente lista muestra los registros de propsito general disponibles en
la plataforma Pentium, y los que se utilizan con mayor frecuencia.

_Arquitectura de Computadoras_

_04-09-2015_

Defina el uso de cada uno de ellos:


EAX
EBX
ECX
EDX
EDI
ESI
ESP
EBP
Registros de propsito especial: EIP y ESP [ Defina el uso de cada uno de ellos ]
En gas los registros se denotan anteponiendo el smbolo de % al nombre del registro. Los registros %eax, %ebx,
%ecx y %edx pueden ser direccionados como registros con tamaos de 8, 16 o 32 bits cambiando su
nomenclatura de acuerdo al tamao. De forma similar, los registros %edi, %esi, %ebp y %esp se pueden
direccionar como registros de 16 o 32 bits.

Parte II_ Herramientas Necesarias


Las herramientas de desarrollo

Al igual que cualquier otra profesin, la programacin requiere de las herramientas adecuadas para realizar el
trabajo. Para crear un buen entorno de desarrollo en lenguaje ensamblador, debe tener las herramientas
adecuadas a su disposicin. A diferencia de un entorno de lenguaje de alto nivel en el que usted puede comprar
un completo entorno de desarrollo. Como mnimo usted debe tener lo siguiente:
Un Assembler
Un Linker
Un Debugger

GNU Assembler

Para crear programas en lenguaje ensamblador, obviamente, necesita alguna herramienta para convertir el cdigo
fuente en lenguaje ensamblador a cdigo de instrucciones del procesador. Aqu es donde entra en juego el
ensamblador.

El ensamblador de GNU
El programa ensamblador de GNU (llamado GAS) es el ensamblador ms popular para el entorno UNIX. Tiene la
capacidad de ensamblar cdigos de instruccin de varias plataformas de hardware diferentes.

_Arquitectura de Computadoras_

_04-09-2015_

En la etapa de ensamblado, el ensamblador (as) lee el archivo con extensin .s y lo traduce en instrucciones de
lenguaje de mquina generando un archivo objeto relocalizable el cual se guarda con extensin .o

Instalacin del ensamblador.


A diferencia de la mayora de los paquetes de desarrollo, el ensamblador de GNU no se distribuye en un paquete
por s mismo. En su lugar, se incluye junto con otro software de desarrollo en el paquete binutils de GNU.
Para Jessie se dispone de la version: binutils (2.25-9) [GNU assembler, linker and binary utilities]
Los programas de este paquete se utilizan para ensamblar, enlazar y manipular binario y los archivos objeto. Ellos
pueden ser usados en conjuncin con un compilador y varias bibliotecas para construir programas.
Tareas:

_Verifique si tiene instalada esta herramienta y en que version.


_Describa el uso de la herramienta as incluida en el paquete binutils.

GNU Linker

El enlazador GNU, llamado ld, se utiliza para vincular los archivos de cdigo objeto en cualquiera de los
archivos de programa ejecutables o archivos de la biblioteca. El programa ld es tambin parte del paquete
binutils de GNU, as que si usted ya tiene el ensamblador GNU instalado, es probable que el enlazador este
instalado.

Tarea:

- Describa el uso de la herramienta ld

GNU Debugger

El Programa Depurador de GNU. Muchos programadores profesionales utilizan el programa depurador GNU
(GDB) para depurar y solucionar problemas de aplicaciones C y C ++. Lo que no saben es que tambin puede ser
usado para los programas en lenguaje ensamblador. Esta herramienta esta incluida en el paquete gdb.
Tareas:

- Verifique si tiene instalada esta herramienta y en que versin.


- Describa el uso de la herramienta gdb.

_Arquitectura de Computadoras_

_04-09-2015_

Parte III_ Partes de un Programa


Un programa en lenguaje ensamblador consiste de secciones definidas, cada una de las cuales tiene un propsito
diferente. Las tres secciones ms utilizadas son los siguientes:
- data section
- bss section
- text section
La seccin text se requiere en todos los programas en lenguaje ensamblador. En este lugar es donde se colocan
los cdigos de instruccin que se declaran dentro del programa ejecutable. Las secciones data y bss son
opcionales, pero a menudo se utilizan dentro de un programa. La seccin data declara elementos de datos con un
valor inicial. Estos elementos de datos se utilizan como variables dentro del programa en lenguaje ensamblador.
La seccin bss declara elementos de datos que se crean con un valor cero (o nulo). Estos elementos de datos son
los ms utilizados como zonas de buffer dentro del programa en lenguaje ensamblador.
El punto de inicio es la etiqueta _start la cual indica a partir de qu instruccin se comienza a ejecutar el cdigo.
Esta etiqueta debe ser declarada como global, es decir, que est disponible para aplicaciones externas; esto se
logra utilizando la directiva .globl.
Si traducimos un programa escrito en lenguaje de programacin C a ensamblador usando gcc, el programa
resultante tendr la etiqueta de inicio main y termina con las instrucciones leave y ret. Esto se debe al hecho
que la herramienta de compilacin gcc genera un procedimiento propio de C el cual tiene una etiqueta _start y
el programa en ensamblador es tratado como un procedimiento.
Tarea:

- Defina detalladamente el uso de las siguientes directivas:


.section.data
.section.bss
.section.text

_Directivas e Instrucciones mas utilizadas


.ascii
.asciz
.byte
.int
.long
movx donde x puede ser l, w o b
pushx donde x puede ser l o w
popx donde x puede ser l o w
Instrucciones para operaciones matemticas bsicas
[ suma, resta, multiplicacin y divisin ]

_Arquitectura de Computadoras_

_04-09-2015_

Ejemplos_
Impresin de una Cadena de texto en la Salida Estndar

Impresin de una Cadena de texto en la Salida Estndar

Ejercicios_
_Programa que calcula la expresin x = (a+(b-c))/(c*d) dados los valores
a=4, b=5, c=2, d=7 declarados en la seccin de datos
_Realice un pequeo programa que pida dos nmeros enteros y muestre la suma
[ haga uso de la instruccin call para utilizar las funciones
printf y scanf desde ensamblador ]

_Arquitectura de Computadoras_

_04-09-2015_

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