Está en la página 1de 9

Enrique Galindo Crdenas

Lenguaje Ensamblador
INTRODUCCIN

El lenguaje de programacin fue creado para hacer posible el entendimiento entre el usuario programador y la computadora; ste lenguaje tiene sus propias caractersticas y sintaxis que varan de acuerdo al tipo de lenguaje que se use. En la actualidad usamos un lenguaje de alto nivel que es el ms fcil de entender, pero el lenguaje de interpretacin de la computadora se llama Lenguaje Mquina, que no es ms que nmeros binarios (1,0) que dependiendo de su valor, la computadora es capas de detectar los procesos que se pueden realizar.

La definicin del lenguaje ensamblador es que proporciona cdigos de operacin de los mnemnicos para todas las instrucciones de la mquina contenidas en la lista de instrucciones predeterminada, esto quiere decir que cada mnemnico (Palabra Reservada) tiene un equivalente a un conjunto de nmeros binarios, abarcando en total todas las instrucciones posibles que se es capas de realizar con la CPU (Unidad Central de Proceso) de una computadora o del procesador de un microcontrolador; como consecuencia el lenguaje ensamblador maneja nmeros binarios generalmente organizados en forma de pila debido al teorema de la Mquina de Turing.

Debido a esta caracterstica el lenguaje ensamblador es considerado el lenguaje ms difcil de entender, de aprender y si no se sabe utilizar de forma correcta, el ms inseguro porque un mal cdigo podra causar mucho dao a la computadora.

Definiciones
LENGUAJE ENSAMBLADOR Como se mencion anteriormente tambin se puede definir un lenguaje ensamblador como un lenguaje simblico que se utiliza para codificar los programas origen que se procesan por el ensamblador (*). Cada computadora tiene caractersticas de CPU que hacen que un lenguaje ensamblador vare de acuerdo al tipo de procesador, esto tambin pasa con los microcontroladores, debido a que su estructura es ms simple, tienen menos palabras reservadas, y menos poder de procesamiento y almacenamiento, lo que hace que se derive un lenguaje especfico para cada tipo de microcontrolador. Anteriormente se tena un lenguaje ensamblador por cada procesado de cada empresa, de igual forma antes se usaba ms comnmente el lenguaje mquina, lo que traa como consecuencia un mayor conflicto en las compatibilidades de los programas. Para evitar eso y con el auge de las microcomputadoras se estandariz un lenguaje comn para la mayora de ellas. Como principal consecuencia se desarrollo un sistema que fuera capas de analizar y simular este lenguaje para evitar errores graves antes de su ejecucin, llamado ensamblador (*). ENSAMBLADOR Los ensambladores son programas que procesan los enunciados del programa origen en programa ensamblador u los traducen a lenguaje mquina guardndolos en archivos que son ejecutados o interpretados por un microprocesador o microcontrolador. Una de las principales caractersticas de un ensamblador es que permiten que los programas origen se escriban y se editen en una computadora para generar un cdigo ejecutable en otra computadora con el mismo procesador o con uno compatible, dejando como consecuencia un archivo en lenguaje objeto ejecutable, generalmente llamado *.exe o *.com en el caso de la computadora o *.hex en el caso de los microcontroladores. Este sistema se apoya en un archivo de dato que contiene el cdigo fuente llamado ASM (Assembler) y con extensin *.ASM cuya caracterstica consiste en tener tanto el cdigo fuente como los comentarios hechos en el programa por el programador en cdigo ASCII, teniendo cada enunciado origen formado de una consecuencia de caracteres y terminando con un retorno (ENTER).

Principio de Funcionamiento
Consiste en dos etapas, en la primera etapa el programa origen (ASM) se lee para desarrollar una tabla de smbolos ordenados, una vez terminada el archivo objeto se va ensamblando, esto quiere decir que se crea con referencia a la tabla; en la segunda etapa se crea el listado del programa origen, teniendo como resultado el ejecutable o el archivo HEX (Hexadecimal). Debido a que los programas que fueron ensamblados slo contienen nmeros binarios, el programa es relativamente pequeo a comparacin de un ejecutable compilado en C/C++, JAVA, etc. Y a diferencia de ellos tiene mayor eficiencia y eficacia. El lenguaje ensamblador se puede interpretar de diferentes maneras, se puede programar con estilo de programacin estructurada que es la que ms se usa o se puede acoplar con el estilo de programacin orientado a objetos, adems tiene como caracterstica que realiza su funcin ejecutando proceso por proceso completo antes de continuar a la siguiente instruccin. Como cualquier compilador, este proceso interpreta y descarta los campos de etiqueta, de cdigo, de operacin y de operandos segn sea el caso, adems se tiene la ventaja de mostrar los posibles errores de sintaxis en el cdigo del programa.

Funciones y Caractersticas.
Debido a la estructura de funcionamiento de una computadora es esencial manejar registros de memoria para poder realizar todos los procesos, de estos registros existen cuatro de uso general que son muy importantes para cualquier proceso de almacenamiento y operacin del programa. Se usan para clculo y almacenamiento de propsito general. Son utilizados por los programas para realizar clculos, as como para transferir datos de una posicin de memoria a otra, ya que no se puede hacer de forma directa. Es decir, que no podemos transferir un dato de la posicin de memoria X a la posicin Y sin antes depositar ese dato temporalmente en un registro del procesador. Su aplicacin fuera del lenguaje ensamblador es con el uso de grficos en C y C++ con la librera GRAPHICS.H que a su vez necesita de interrupciones del sistema para su funcionamiento. Estos registros tienen una longitud de 16 bits, pero podemos descomponerlos cuando nos interese en un par de registros de 8 bits.

Quedando de la forma siguiente: AX = AH + AL Siendo AX el registro de 16 bits, compuesto por la conjuncin (que no la suma) de el registro AH de 8 bits (los 8 bits ms significativos o de ms a la izquierda) y el registro AL de 8 bits (los 8 bits menos significativos o de ms a la derecha). Este registro interviene en las operaciones aritmticas y lgicas, despus de una operacin arroja un resultado, tambin se le conoce como registro acumulador. El registro AX es el llamado acumulador, hace que muchas operaciones tengan una forma ms corta, ya que lo especifican implcitamente. Es decir, que hay operaciones que actan sobre el registro AX en particular. BX = BH + BL BX se suele utilizar en muchas instrucciones como registro base, sobre todo en transferencias de datos entre memoria y procesador. Se le llama registro base. CX = CH + CL CX es el registro contador, muchas instrucciones lo utilizan para hacer incrementos o decrementos automticos, para realizar bucles (LOOP) en operacin de cadenas (REP) como apuntador, etc. DX = DH + DL DX es el registro de datos, se suele utilizar para operaciones de 32 bits, para almacenar los 16 bits (o palabra) ms significativos, se utiliza para multiplicacin y divisin junto con AX y en operaciones de entrada y salida de puertos. DL contiene el nmero de puertos disponibles. Para estos tres registros se aplica lo mismo que para el registro AX. De igual forma existen otros tipos de registros llamados registros de estado, en total son nueve y son indicadores de 1 bit de un registros de 16 bits. Los cuatro bits ms significativos estn indefinidos, mientras que hay tres bits con valores determinados: los bits 5 y 3 siempre valen cero y el bit 1 siempre vale uno. Que son los siguientes:

CF (Carry Flag, bit 0): Si vale 1, indica que hubo "arrastre" (un bit de ms) en caso de suma o "prstamo" en caso de resta. Este indicador es usado por instrucciones que suman o restan nmeros que ocupan varios bytes. Las instrucciones de rotacin pueden aislar un bit de la memoria o de un registro ponindolo en el CF. PF (Parity Flag, bit 2): Si vale uno, el resultado tiene paridad par, es decir, un nmero par de bits a 1. Este indicador se puede utilizar para detectar errores en transmisiones. AF (Auxiliary carry Flag, bit 4): Si vale 1, indica que hubo "arrastre" o "prstamo" del nibble (cuatro bits) menos significativo al nibble ms significativo. Este indicador se usa con las instrucciones de ajuste decimal. ZF (Zero Flag, bit 6): Si este indicador vale 1, el resultado de la operacin es cero. SF (Sign Flag, bit 7): Refleja el bit ms significativo del resultado. Como los nmeros negativos se representan en la notacin de complemento a dos, este bit representa el signo: 0 si es positivo, 1 si es negativo. TF (Trap Flag, bit 8): Si vale 1, el procesador est en modo paso a paso. En este modo, la CPU automticamente genera una interrupcin interna despus de cada instruccin, permitiendo inspeccionar los resultados del programa a medida que se ejecuta instruccin por instruccin. IF (Interrupt Flag, bit 9): Si vale 1, la CPU reconoce pedidos de interrupcin externas. Si vale 0, no se reconocen tales interrupciones DF (Direction Flag, bit 10): Si vale 1, las instrucciones con cadenas sufrirn "auto-decremento", esto es, se procesarn las cadenas desde las direcciones ms altas de memoria hacia las ms bajas. Si vale 0, habr "auto-incremento", lo que quiere decir que las cadenas se procesarn de "izquierda a derecha". OF (Overflow flag, bit 11): Si vale 1, hubo un desborde en una operacin aritmtica con signo, esto es, un dgito significativo se perdi debido a que tamao del resultado es mayor que el tamao del destino.

Aplicaciones
Un lenguaje ensamblador ayuda a aprovechar el 100% de la CPU debido a que es una aplicacin directa que permite manipular exactamente cualquier funcin, por eso se aplica a procesos de tiempo real, generalmente en la industria y la manufactura, como por ejemplo en la adquicisin de datos, control de robots, sistemas internos en bancos, aviones, sondas espaciales, barcos, en el cine, videojuegos, graficacin y multimedia. Existen aplicaciones especiales para la medicina, la aeronutica y el armamento, y en aplicaciones tan comunes como los sistemas embebidos, como lo son: administracin de impresoras, cmaras, autos, juguetes o en el procesamiento de seales, voz e imgenes. Ya que por sus caractersticas permite un alto rendimiento y acceso a cualquier recurso de la computadora de forma directa. Algunas de estas caractersticas son: 1.- Se puede acceder a cualquier localidad de la memoria RAM sin ninguna restriccin. 2.- Se pueden programar virus, debido a que se tiene un acceso total a casi todo el hardware de la computadora va interrupciones de software. 3.- Se pueden programar drivers de cualquier dispositivo. 4.- Se puede acceder directamente a los registros internos del cpu. 5.- Se puede acceder directamente a los dispositivos de entrada y/o salida Para un programador es importante conocerlo porque permite conocer a detalle cmo trabaja la computadora, pero para empezar a programar se necesita saber la arquitectura y el juego de instrucciones del procesador. Como la empresa de Intel ha logrado mantenerse a la cabeza de todas las empresas de microprocesadores a unificado el lenguaje ensamblador con los siguiente mnemnicos:

Programa
EJEMPLO 2 El lenguaje ensamblador tambin se usa en microcontroladores, cada uno con su propio lenguaje. El ejemplo est hecho para un microcontrolador PIC 16F84A con su respectiva arquitectura y juego de instrucciones:

List DATO1 DATO2 RESULTADO W f equ equ equ equ equ org goto INICIO movf aadwf movwf end

p=16F84A 0x0C 0x0D 0x0E 0 1 0x00 INICIO DATO1,W DATO2,W RESULTADO

En el ejemplo anterior se suman dos nmeros binarios de 8 bits almacenados en la RAM, OCH, ODH y deposita el resultado en OEH. Un ensamblador permite el uso de macros para facilitar y disminuir el uso de cdigo y de memoria, en el cdigo fuente se observa que existen dos, uno se llama RESULTADO y otro INICIO.

EJEMPLO 3 Este ejemplo est completamente desarrollado en lenguaje ensamblador que usa servicios o funciones de MS-DOS (system calls) para imprimir el mensaje Hola mundo!! en pantalla. STACK SEGMENT STACK ; Segmento de pila DW 64 DUP (?) ; Define espacio en la pila STACK ENDS DATA SEGMENT ; Segmento de datos SALUDO DB "Hola mundo!!",13,10,"$" ; Cadena DATA ENDS CODE SEGMENT ; Segmento de Codigo ASSUME CS:CODE, DS:DATA, SS:STACK INICIO: ; Punto de entrada al programa MOV AX,DATA ; Pone direccion en AX MOV DS,AX ; Pone la direccion en los registros MOV DX,OFFSET SALUDO ; Obtiene direccion del mensaje MOV AH,09H ; Funcion: Visualizar cadena INT 21H ; Servicio: Funciones alto nivel DOS MOV AH,4CH ; Funcion: Terminar INT 21H CODE ENDS END INICIO ; Marca fin y define INICIO La descripcin del programa es como sigue: 1.- Las declaraciones SEGMENT y ENDS definen los segmentos a usar. 2.- La variable SALUDO en el segmento DATA, define la cadena a ser desplegada. El signo de dlares al final de la cadena (denominado centinela) es requerido por la funcin de visualizacin de la cadena de MS-DOS. La cadena incluye los cdigos para carriage-return y line-feed. 3.- La etiqueta START en el segmento de cdigo marca el inicio de las instrucciones del programa. 4.- La declaracin DW en el segmento de pila define el espacio para ser usado por el stack del programa. 5.- La declaracin ASSUME indica que registros de segmento se asociarn con las etiquetas declaradas en las definiciones de segmentos. 6.- Las primeras dos instrucciones cargan la direccin del segmento de datos en el registro DS. Estas instrucciones no son necesarias para los segmentos de cdigo y stack puesto que la direccin del segmento de cdigo siempre es cargado en el registro CS y la direccin de la declaracin del stack segment es automticamente cargada en el registro SS. 7.- Las ltimas dos instrucciones del segmento CODE usa la funcin 4CH de MS-DOS para regresar el control al sistema operativo. Existen muchas otras formas de hacer esto, pero sta es la ms recomendada. 8.- La directiva END indica el final del cdigo fuente y especifica a START como punto de arranque

Bibliografa
1.- http://es.wikipedia.org/wiki/Assembly 2.- http://homepage.mac.com/eravila/asmix862.html 3.- http://fermat.movimage.com/docs/ensamblador/ 4.- http://www.todoprogramas.com/manuales/programacion/ensamblador/ 5.- http://homepage.mac.com/eravila/asmix862.html 6.- http://usuarios.lycos.es/patricio/ensam/ensam1.htm 7.- http://www.monografias.com/trabajos14/lenguaje-ensamblador/lenguajeensamblador.shtml 8.- 8086/8088, programacin en ensamblador de Jrgen Hegner - 1987 - 425 pginas Translation of the original German edition published: Augsburg : KRS Verlagsgesellschaft, 1987 9.- Ensamblador del 80286: : IBM AT y compatibles de H. Lilen - 1992 - 382 pginas 10.- Gua del programador en ensamblador para IBM PC, XT, AT y compatibles de Peter Norton, John Socha - 1988 Translation of : Assembly language book for the IBM PC

También podría gustarte