jueves, 13 de marzo de 2008

Assembler en GNU/Linux

Hay algunas diferencias entre el ensamblador que se utiliza en Windows y el ensamblador que se utiliza en los sistemas Unix. La diferencia más importante es que no se utiliza la sintaxis de Intel sino que se utiliza la sintaxis de AT&T.

Sintaxis AT&T
- Hay que colocar el prefijo % a los registros.
- En las instrucciones de dos operandos, el primer registro es el de origen y el segundo es el de destino (al revés que en Intel).
- Se debe especificar el tamaño de los operandos con b(byte) w(word) y l(double word)
- Para especificar direccionamiento inmediato de datos se usa el prefijo $ si no se tomará como direccionamiento directo de memoria.
- Para especificar direccionamiento indirecto de memoria se usa paréntesis.

Por ejemplo:
movl %ebx $10
La l después de mov significa que la operación es de 32bits, antes del registro ebx se coloca % y antes del numero 10h se coloca $

En Linux tenemos varios ensambladores, el más utilizado es GAS(GNU Assembler) que ya lo traen la mayoría de distribuciones.
Si no quisiéramos aprender la sintaxis de AT&T hay otras opciones, una es utilizar el ensamblador NASM pero es más recomendable usar GAS y por medio de la directiva .intel_syntax podremos escribir con la sintaxis de Intel.

Recomiendo la lectura del siguiente articulo en IMB para comprender mejor las diferencias entre la sintaxis de Intel y la de AT&T.

3 comentarios:

Javihm77 dijo...

Que bueno q escribas de esto vos!! taaaal vez me sirva jaja no he hecho nada d eso

Axelandra dijo...

Es importante conocer las diferencias ;)

Juls dijo...

Claro, o por lo menos saber que existe otra sintaxis diferente a la de Intel.