High Level Assembly | características que lo distinguen

Características que lo distinguen

Dos características de HLA lo ponen aparte de otros ensambladores x86: su poderoso sistema de macros (lenguaje en tiempo de compilación) y la biblioteca estándar del HLA.

Sistema de macros

El lenguaje en tiempo de compilación del HLA permite que los programadores extiendan con la facilidad el lenguaje del HLA, incluso creando su propio Lenguaje Específico de Dominio para ayudarles a solucionar problemas comunes de programación fácilmente. El macro de stdout.put descrito arriba brevemente es un buen ejemplo de un sofisticado macro que pueda simplificar la vidas de los programadores. Considere la siguiente invocación del macro stdout.put:

 stdout.put( "I=", i, " s=", s, " u=", u, " r=", r:10:2, nl );

El macro stdout.put procesa cada uno de los argumentos para determinar su tipo, luego llamada al procedimiento adecuado en la biblioteca estándar del HLA para manejar la salida de cada uno de estos operandos. Asumiendo que i es un entero con signo de 32 bits, s una variable de string, u un entero sin signo de 32 bits, y r un valor de punto flotante de 32 bits, el macro de arriba se expande a código como el siguiente:

 push( iEqualsStr );   // Se pone en la pila la dirección del string "I=" 
 call stdout.puts;     // Imprime "I="
 
 push( i );
 call stdout.puti32;   // Imprime i como un entero con signo de 32 bits.
 
 push( sEqualsStr );   // Se pone en la pila la dirección del string " s="
 call stdout.puts;     // Imprime " s="
 
 push( s );            // Se pone en la pila la dirección del string s
 call stdout.puts;     // y se imprime ese string.
 
 push( uEqualsStr );   // Se pone en la pila la dirección del string " u="
 call stdout.puts;     // y se imprime ese string.
 
 push( rEqualsStr );   // Se pone en la pila la dirección del string " r="
 call stdout.puts;     // y se imprime ese string.
 
 push((type [[dword]] r)); // Se pone en la pila el valor del número real r.
 pushd( 10 );          // Se pone en la pila el ancho del campo.
 pushd( 2 );           // Se pone en la pila el número de posiciones decimales.
 call stdout.putr32;   // Se imprime el valor como real.

Debe estar claro que el código de una sola línea de más arriba es mucho más fácil de escribir, leer, y mantener que su expansión. Ésta es una de las ventajas de usar macros en código de lenguaje ensamblador. Por supuesto, la mayoría de los ensambladores proporcionan algún tipo de capacidad macro, la ventaja que ofrece el HLA sobre otros ensambladores es que es capaz de procesar macro argumentos como "r:10:2" usando las extensas funciones de string en tiempo de compilación, y las facilidades de macros del HLA pueden encontrar los tipos de las variables (como i, u, s, y r), y usar esa información para dirigir la expansión del macro, como fue hecho en este ejemplo.

Biblioteca estándar

La biblioteca estándar del HLA es un conjunto extensivo de rutinas y macros preescritos, como el macro stout.put descrito arriba, que hacen la vida más fácil para los programadores, salvándolos de " reinventar la rueda" cada vez que escriben una nueva aplicación. Quizás tan importante como eso, la biblioteca estándar del HLA permite a los programadores escribir aplicaciones portables que funcionan bajo Windows o Linux con nada más que una recompilación del código de fuente.

Other Languages
Bahasa Melayu: High Level Assembler
українська: HLA