Programación en Ensamblador

Assembly | August 19th

El tiempo que emplearemos para programar en Ensamblador será mucho mayor que el de costumbre, sin embargo al final obtendremos un programa de menor tamaño y mucho más veloz que cualquier otro.

Usando lenguajes como C o Java, podemos escribir el mismo código fuente y podrá funcionar en una PC, PowerPC y otras arquitecturas. En cambio con el lenguaje ensamblador, tendremos que escribir el mismo programa con diferente código fuente. Esto es debido a que el lenguaje ensamblador se comunica directamente con el hardware y estas arquitecturas son totalmente distintas y es por ello que es necesario conocer el conjunto de instrucciones y características del procesador con el que vamos a trabajar, incluyendo las características de los ensambladores, enlazadores y depuradores.

Entre los ensambladores destacan en GNU/Linux, Windows y DOS

  • GNU Assembly
  • NASM
  • MASM

Veamos un ejemplo clasico, Hola Mundo!!!, con NASM en GNU/Linux

Hola.S

section    .text
global _start

_start:

mov    edx, length
mov    ecx, mensaje
mov    ebx, 1
mov    eax, 4
int    0x80
mov    eax, 1
int    0x80

section    .data

mensaje    db    'Hola Mundo!', 0xa
length    equ    $ - mensaje

Compilemos nuestro programa

$ nasm -f elf hola.S
$ ld -s -o hola hola.o
$ ./hola
Hola Mundo!

Segundo ejemplo con GNU/Linux & NASM

hola2.S

global main
extern printf

section	.text
main:
	push	dword mensaje
	call	printf
	pop	eax
	ret

section    .data
mensaje    db    'Hola Mundo!', 0xa

Compilemos nuestro programa, en este segundo ejemplo llamamos a la función printf de C, esto es una característica de NASM.

$ nasm -f elf hola2.S
$ gcc hola2.o -o hola2
$ ./hola2
Hola Mundo!

Trackbacks/Pingbacks

  1. [...] el artículo Programación en Ensamblador muestro un ejemplo sencillo que muestra el clásico Hello World utilizando la función [...]

Deja tu comentario