Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Con el Nautilus (el manejador grfico de archivos) creamos las carpetas, o desde la consola (terminal),
escribiendo las siguientes rdenes (desde Home, xxxxx@yyyy:~$)
Creamos la carpeta Fuentes dentro de Documentos con:
mkdir Documentos/Fuentes
Creamos la carpeta Ejem01 dentro de la carpeta Fuentes:
mkdir Documentos/Fuentes/Ejem01
Nos cambiamos a la carpeta Ejem01:
cd Documentos/Fuentes/Ejem01
Ejecutamos el gedit desde la consola
gedit ejem01.asm
(Tambin podemos abrir el gEdit desde el botn de bsqueda (el primero de la cinta vertical de opciones del
escritorio) y asegurarnos, al guardarlo, del nombre y ubicacin correcta del archivo.
SECTION .data
; data section
db "Hola Mundo!",10 ; la cadena a imprimir, 10=Line Feed
equ $-msg
; "$" significa "aqu"
; len es un valor, no una direccin
SECTION .text
global main
; code section
; ponemos una etiqueta para el enlazador
; entrada estndar para el gcc
mov
mov
mov
mov
int
edx,len
ecx,msg
ebx,1
eax,4
0x80
;
;
;
;
;
mov
mov
int
ebx,0
eax,1
0x80
main:
Un programa en lenguaje ensamblador consiste de sentencias que pueden ser instrucciones o directivas para el
ensamblador. Por ejemplo:
SECTION .data es una directiva que le dice al ensamblador donde inicia la seccin de datos.
En cambio que MOV eax,4 es una instruccin que ordena al CPU poner un valor de 4 dentro del registro eax,
el cual es un registro de 32 bits.
Todo lo que sigue a un punto y coma es un comentario y es ignorado por el ensamblador.
Nuestro programa de ejemplo consiste de dos partes, la seccin de datos y la seccin de texto. Habr
programas que tengan ms de dos secciones. Cada seccin empieza con la directiva .SECTION, despus un
punto y el nombre de la seccin.
La seccin de datos, como su nombre lo indica la utilizamos para escribir los datos y la seccin de texto para
escribir las instrucciones que utilizarn esos datos.
Las variables se declaran en el segmento de datos, a cada una se le asigna un espacio en la memoria y puede
ser inicializada. Por ejemplo msg:
db "Hola Mundo!" define una variable llamada msg de tipo Data
Byte y se inicializa con la cadena Hola Mundo!, que tiene una longitud de 11 bytes.
Las instrucciones del programa se ubican en la seccin de texto y deben finalizarse con instrucciones para salir
del kernel y regresar al Shell de Linux, lo que hacen las tres ltimas lneas del programa.
El programa lo nico que hace es desplegar en el monitor la cadena Hola Mundo! y pasar el cursor a la lnea
siguiente.
Antes que el programa pueda ser ejecutado debe ser ensamblado (generamos el archivo objeto y
opcionalmente un archivo de listado) y despus enlazado (generamos el archivo binario, el ejecutable).
Una vez guardado con el nombre ejem01.asm (o el que hayas elegido), lo ensamblamos con el NASM as:
nasm -f elf -l ejem01.lst ejem01.asm[1]
Si no tuvimos errores, listamos los archivos del directorio (con ls) y veremos un archivo con el mismo nombre
que nuestro fuente pero con extensin <<.o>>, ese es el archivo objeto generado por el NASM, tambin
podemos ver un archivo con extensin <<.lst>> en caso de generar opcionalmente el archivo de listado como
en este caso. Este ltimo podemos abrirlo con un editor de texto para conocer ms detalles del objeto.
Ahora necesitamos enlazar (linkear) el archivo objeto con las libreras necesarias para obtener el archivo
binario (el ejecutable), lo que podemos hacer con la siguiente orden:
gcc -m32 -o ejem01 ejem01.o[2]
Finalmente ejecutamos en la consola (terminal) nuestro archivo binario escribiendo:
./ejem01
Y veremos la cadena Hola Mundo! desplegada en pantalla.
ACTIVIDADES
1. Visita el sitio de NASM (Netwide Assembler) en http://www.nasm.us, ah encontrars en la seccin de
documentos un manual en formato PDF y html.
2. Visita el sitio de GCC en https://gcc.gnu.org/
3. Lee el artculo de Intel Cmo mejorar el rendimiento del GCC para x86 en
https://software.intel.com/es-es/blogs/2012/09/26/gcc-x86-performance-hints
4. Busca en Wikipedia las biografas de los mexicanos Miguel de Icaza y Federico Mena.
5. Otras actividades sobre esta prctica quedan pendientes.
NOTAS.
[1] y [2] Las rdenes para ensamblar y enlazar son diferentes dependiendo de la arquitectura de la mquina
que se est utilizando y de la arquitectura para la que estemos escribiendo el programa. Las posibles
combinaciones resultantes de esto pueden ser:
Programa escrito para una arquitectura de Arquitectura de la mquina utilizada
32 bits
32 bits
32 bits
64 bits
64 bits
64 bits
Menos frecuente, pero puede darse el caso por razones de enseanza, es escribir cdigo de 16 bits en
mquinas de 32 bits y en mquinas de 64 bits. Las mquinas de 16 bits ya prcticamente estn extintas