next up previous
Siguiente: ¿Por qué GNU as? Superior: GNU as como ensamblador Anterior: Introducción: ¿por qué lenguaje

Subsecciones


El lenguaje de ensamblado en Linux

Porque claro, en otros sistemas operativos disponíamos de varios ensambladores, todos más o menos compatibles entre sí o cuando menos con sintaxis parecidas; en otros sistemas simplemente se dificulta la programación en ensamble hasta límites insospechados para evitar que se haga, y no habiendo posibilidades, no hay problemas...

Pero llegamos al Sistema Operativo de nuestros amores, Linux, y descubrimos que, de partida, no tiene sintaxis Intel, sino AT&T... No entraré en una discusión de qué sintaxis es mejor. En cualquier caso, y como opinión personal, prefiero la sintaxis AT&T. Es la sintaxis tradicional de Unix, es más portable (en el sentido de que para programar para otra arquitectura sólo implica saber los nuevos códigos de operación y los nuevos operandos con nombre -registros, etc...-, pero no nueva sintaxis.) y, una vez que se acostumbra uno, es más fácil detectar errores por el propio ensamblador.


La sintáxis de ensamblado de AT&T

La sintáxis de AT&T es poco más o menos como la de Intel, en el sentido de que no cambia los nombres de los códigos de operación ni de los registros, pero tiene algunas diferencias chocantes a primera vista:


El programa ensamblador en Linux

Miramos el nombre de nuestro ensamblador, y reza GNU as... Un poco de investigación nos lleva a saber que es el ensamblador por defecto, el que usa nuestro bienamado GNU cc y todos los demás lenguajes de alto nivel.

En seguida dedicamos nuestros esfuerzos a buscar otro ensamblador en lugar del GNU as, que tenga sintaxis Intel, que tenga un manual más pequeño, o que no tenga manual llegado el caso (ya sabemos lo tedioso que resulta leer...). Para nuestra satisfacción encontramos al menos tres alternativas:

El primero de ellos, el as86 nos llena de felicidad: no tiene manual. Además, y presumiblemente, sólo sirve para usar en modo real, pero no importa, porque ¿quién es el loco que iba a programar en modo protegido?. Desgraciadamente vemos al poco que la falta de documentación que tanto nos tranquilizó en un principio es un grave problema a la hora de usarlo. Además, parece haber más de una versión del as86: una oficial y otra que según parece sólo se usa para ensamblar una pequeña parte de kernel.

El as86 existe practicamente sólo para eso: ensamblar una parte del código de inicio del kernel. Personalmente no lo aconsejaría para usarse como ensamblador de propósito general por cuanto carece de documentación. Así y todo, se puede usar en modo protegido (el kernel de hecho lo hace) pero no está pensado para eso... Y que quede claro: es un pequeño gran ensamblador.

El NASM y el tdasm son ensambladores algo más serios. Se han pensado para desarrollar completamente en ensamblador y tienen sintaxis Intel. No he usado personalmente el tdasm, pero sí he usado el NASM, y sin ser santo de mi devoción he de reconocer que es un buen ensamblador con un buen soporte de macros.

Todos estos ensambladore tienen dos cosas en común: la sintaxis Intel y el código que generan, que es binario puro, no tiene formato. No es más que los códigos de operación uno detrás de otro, sin cabeceras, etc...

Pero resulta que nosotros no vamos a usar ninguno de estos ensambladores, y ahora veremos por qué.


next up previous
Siguiente: ¿Por qué GNU as? Superior: GNU as como ensamblador Anterior: Introducción: ¿por qué lenguaje

Download this document: [src.tar.gz][ps.gz][html.tar.gz][dvi.gz]

Congreso HispaLinux 2000