jueves, 22 de septiembre de 2011

Muy buenas comunidad ITT!

La verdad es que aún soy un poco novato en esto de desarrollar en ensamblador, pero ya estoy haciendo mis primeros "pininos" y pues me gustaría compartir lo poco que he aprendido hasta el momento:

Herramientas para desarrollo:

1. Nasm o Gas, los cuales son compiladores para este lenguaje, en mi caso estoy usando Nasm, dado que éste usa sintaxis de intel, a diferencia de Gas que usa sintaxis de AT&T. Lo bueno de todo esto es que ambos están dentro en los repositorios de cualquier distribución.

2. Instalar el "linker" ld y gcc, en muchas distribuciones gcc ya viene instalado, en su defecto, ambos también los podemos encontrar en los repositorios de Linux.

3. Instalar Geany, un Entorno de Desarrollo bonito y eficaz compatible con múltiples lenguajes de programación, con esto me refiero a que identifica la sintaxis del lenguaje y podemos personalizar los comandos de compilación

Programa ejemplo en Terminal:

Comenzando con una impresión de un mensaje:


;MensajeAssembly.asm
;se compila con nasm -f elf MensajeAssembly.asm
;se liga con ld -s MensajeAssembly.o -o MensajeAssemblyEx
;se ejecuta $ ./MensajeAssemblyEx 

section .data
mensaje: db "Mi Primer programa en Ensamblador", 0x0A
lng: equ $-mensaje

section .text
global _start    ;se define el punto de entrada
_start:
mov edx, lng
mov ecx, mensaje
mov ebx, 1    ;EBX=Manejador de Ficheros (STOUT)
mov eax, 4    ;EAX=Función sys_write() del Kernel
int 0x80    ;Interrupción 80, llamada al Kernel

mov ebx, 0    ;EBX=Código de salida al SO
mov eax, 1     ;EAX=Función sys_exit del Kernel
int 0x80    ;Interrupción 80, llamada al Kerne

Ahora hacemos lo mismo pero esta vez llamando funciones de C:

;asmC.asm
; nasm -f elf asmC.asm -o asmC.o
; gcc -o asmCex asmC.o

extern printf
section .data
message: db "Mensaje Ensamblador llamado a printf()", 0xA
section .text
global main
main:
; colocar los argumentos de la funcion en la pila, de derecha a izq.
;Introducir parametros del printf a la pila
push message 
;llamada a la funcion printf de C
call printf
; balancear la pila
add esp, 4*1

ret 

Bien todo esto lo podemos hacer desde terminal pero cada vez que queramos hacer modificaciones al programa es necesario introducir de nuevo los comandos de compilar, ligar y ejecutar; es aquí donde entra Geany.

Desde él podemos personalizar los comandos de compilar, ligar y ejecutar para que con solo tres clicks podamos hacer todo este proceso:

1.-Ya instalado Geany en el menú "Construir" damos en la opción "Establecer Comandos de Construcción" y aparecerá una ventana como esta:


2.-Esto nos permite compilar ligar y ejecutar nuestro programa en ensamblador desde este IDE, desde el menú "Construir", eligiendo las opciones adecuadas

;)

SALUDOS espero que les sea de utilidad
Read more!