ASSEMBLY LANGUAGE


De nivel intermedio lenguaje de programación que es más alto (es más fácil de usar, pero corre más lento) que el lenguaje de máquina y menor (es más difícil de usar, pero corre más rápido) de un lenguaje de alto nivel como BASIC, FORTRAN , o Java . Los programas escritos en lenguaje ensamblador se convierten en la máquina lengua por los programas especializados llamados ensambladores o compiladores para su ejecución por la máquina (ordenador).



Ventajas








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, una variable de string, u un entero sin signo de 32 bits, y  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.



Proceso de desarrollo de software
Al programar en cualquier lenguaje, después de un buen proceso de desarrollo es necesario con el fin de entregar un producto de éxito.

 Es importante resistir la tentación de entrar de lleno en el código inmediatamente, sobre todo cuando se programa en el montaje que es sumamente complejo.
El primer paso debe ser siempre para identificar claramente el problema y definir una solución para resolver ese problema.

 Crear y entender la solución en diagramas o pseudo-código antes de comenzar a codificar en el montaje.

 La traducción de estos diagramas en código será mucho más fácil que tratar Envision la solución en su totalidad en su mente.
Depuración y rastreo a través de su programa de montaje también son una muy buena manera de encontrar y corregir errores.
Errores típicos incluyen:
transferencia incorrecta a la sub-rutina

* El olvido inicializar el puntero de pila

* No hay suficiente memoria en la pila

* Sub rutinas registros corruptores

*  El olvido inicializar los registros de índice

*  La modificación de los registros de código de condición antes de ramificación

*  Uso de la instrucción de conexión incorrecta

*  Usando el modo de direccionamiento erróneo

D-Bug12

El D-Bug12 es la herramienta de depuración almacenada en la EEPROM de nuestro micro controlador que será utilizado para la depuración, así como para la descarga de programas en la tarjeta y el control del ensamblador.
Comandos D-Bug12
ASM - Montar / Dissasemble
BF - bloque de memoria de relleno
BR - establecer punto de interrupción
Llamar - Llamar y ejecutar la sub rutina
G - Go, el programa de gestión
GT - Ir hasta una dirección
AYUDA - Resumen Las impresiones de los comandos disponibles
CARGA - Establecer, en el estado listo para aceptar programa de descarga de MiniIDE
MD - Mostrar contenido de la Memoria
MM - Memoria Modificar
Copiar bloque de la memoria - MOVIMIENTO
NOBR - Eliminar los puntos de interrupción
contenido de los registros de visualización - RD
T - Trazar a través del programa
Subir - Subir memoria para PC
USEHDB - puntos de interrupción de hardware Uso EVB / Target
VERIF - Comparación de memoria para descargar el archivo

Versiones





Versiones


Aunque MASM ya no es un producto comercial, Microsoft continúa soportándolo debido a la gran base de código en lenguaje ensamblador que existe internamente en Microsoft.

 Desde que Microsoft dejó de vender el MASM por separado, ellos han lanzado varias actualizaciones a la línea de productos del MASM versión 6.xx, siendo la última, la versión 6.15, que fue incluida en el Visual C++ 6.0 Procesador Pack.

 Microsoft lanzó el MASM versión 7.0, que fue incluido con Visual C++ .NET 2002, el MASM versión 7.1 incluido con el Visual C++ .NET 2003, y el MASM 8.0 que vino con el Visual C++ 2005 y por lo tanto incluyendo una versión que puede ensamblar código x64.

 Para la versión del MASM incluida con las nuevas versiones de Visual C++, busque el archivo ml.exe en el directorio bin de Visual C++, y para la versión que puede ensamblar código x64 incluida en Visual C++ 2005, busque el archivo ml64.exe en el mencionado directorio. 

La documentación para las versiones incluidas con las recientes versiones de Visual C++ es parte de la documentación para esa versión.


Especificaciones








No hay comentarios:

Publicar un comentario