You are on page 1of 17

INTRODUCCION

El documento que est visualizando tiene la funcin primordial de introducirlo a la programacin en lenguaje Ensamblador, y est pensado en aquellas personas que nunca han trabajado con este lenguaje y probablemente con ningn otro. El tutorial se considera como una facilidad ya que el ensamblador basa su funcionamiento en los recursos internos del procesador, los ejemplos descritos no son compatibles con ninguna otra arquitectura. Se estructura la informacin en forma de unidades para permitir el fcil acceso a cada uno de los tpicos y facilitar el seguimiento del tutorial. En la seccin introductoria se mencionan algunos de los conceptos elementales acerca de los sistemas de cmputo as como del ensamblador mismo, y contina con el tutorial propiamente dicho.

DEFINICIONES BASICAS
El lenguaje ensamblador, es un lenguaje de programacin de bajo nivel para los computadores, microprocesadores, micro controladores, y otros circuitos integrados programables. Implementa una representacin simblica de los cdigos de mquina binarios y otras constantes necesarias para programar una arquitectura dada de CPU y constituye la representacin ms directa del cdigo mquina especfico para cada arquitectura legible por un programador. Esta representacin es usualmente definida por el fabricante de hardware, y est basada en los mnemnicos que simbolizan los pasos de procesamiento (las instrucciones), los registros del procesador, las posiciones de memoria, y otras caractersticas del lenguaje. Un lenguaje ensamblador es por lo tanto especfico a cierta arquitectura de computador fsica (o virtual). Esto est en contraste con la mayora de los lenguajes de programacin de alto nivel, que, idealmente son portables. Un programa utilitario llamado ensamblador es usado para traducir sentencias del lenguaje ensamblador al cdigo de mquina del computador objetivo. El ensamblador realiza una traduccin ms o menos isomorfa (un mapeo de uno a uno) desde las sentencias mnemnicas a las instrucciones y datos de mquina. Esto est en contraste con los lenguajes de alto nivel, en los cuales una sola declaracin generalmente da lugar a muchas instrucciones de mquina. Muchos sofisticados ensambladores ofrecen mecanismos adicionales para facilitar el desarrollo del programa, controlar el proceso de ensamblaje, y la ayuda de depuracin. Particularmente, la mayora de los ensambladores modernos incluyen una facilidad de macro (descrita ms abajo), y son llamados macro ensambladores.

Fue usado principalmente en los inicios del desarrollo de software, cuando an no se contaba con potentes lenguajes de alto nivel y los recursos eran limitados. Actualmente se utiliza con frecuencia en ambientes acadmicos y de investigacin, especialmente cuando se requiere la manipulacin directa de hardware, altos rendimientos, o un uso de recursos controlado y reducido. Muchos dispositivos programables (como el micro controlador) an cuentan con el ensamblador como la nica manera de ser manipulados. LENGUAJE DE MQUINA Lenguaje de mquina es el sistema de cdigos directamente interpretable por un circuito micro programable, como el microprocesador de una computadora o el micro controlador de un autmata (un PLC) . Este lenguaje est compuesto por un conjunto de instrucciones que determinan acciones a ser tomadas por la mquina. Un programa de computadora consiste en una cadena de estas instrucciones de lenguaje de mquina (ms los datos). Estas instrucciones son normalmente ejecutadas en secuencia, con eventuales cambios de flujo causados por el propio programa o eventos externos. El lenguaje de mquina es especfico de cada mquina o arquitectura de la mquina, aunque el conjunto de instrucciones disponibles pueda ser similar entre ellas. LENGUAJE ENSAMBLADOR El lenguaje ensamblador, es un lenguaje de programacin de bajo nivel para los computadores, microprocesadores, microcontroladores, y otros circuitos integrados programables. Implementa una representacin simblica de los cdigos de mquina binarios y otras constantes necesarias para programar una arquitectura dada de CPU y constituye la representacin ms directa del cdigo mquina especfico para cada arquitectura legible por un programador. Esta representacin es usualmente definida por el fabricante de hardware, y est basada en los mnemnicos que simbolizan los pasos de procesamiento (las instrucciones), los registros del procesador, las posiciones de memoria, y otras caractersticas del lenguaje. Un lenguaje ensamblador es por lo tanto especfico a cierta arquitectura de computador fsica (o virtual). Esto est en contraste con la mayora de los lenguajes de programacin de alto nivel, que, idealmente son portables. Un programa utilitario llamado ensamblador es usado para traducir sentencias del lenguaje ensamblador al cdigo de mquina del computador objetivo. El ensamblador realiza una traduccin ms o menos isomorfa (un mapeo de uno a uno) desde las sentencias mnemnicas a las instrucciones y datos de mquina. Esto est en contraste con los lenguajes de alto nivel, en los cuales una sola declaracin generalmente da lugar a muchas instrucciones de mquina.

PROCESAMIENTO DE ENSAMBLADO Este ensamblador es de dos pasadas. Durante la primera pasada, el programa origen se lee para desarrollar la tabla de smbolos. Durante la segunda pasada el archivo objeto se crea (ensamblado) con referencia a la tabla desarrollada en la primera pasada. Durante la segunda pasada se crea el listado del programa origen. Cada enunciado origen se procesa completamente antes de que el enunciado siguiente se lea. A medida que el enunciado se procesa el ensamblador examina los campos de etiqueta, de cdigo de operacin y de operados. La tabla de cdigos de operacin se revisa para encontrar un cdigo operacional similar. Durante el procesamiento de un mnemnico correspondiente a un cdigo de operacin normal, el cdigo mquina normal se inserta en el archivo objetivo. La accin buscada por una directriz del ensamblador ocurre durante el procesamiento de dicha directriz. Cualquier error que detecta el ensamblador se muestra justamente antes de la lnea que contiene dicho error. An y cuando no se desee producir un listado origen, los errores se despliegan para indicar que el procesamiento de ensamblado no se llev a cabo de manera normal.

VENTAJAS DEL ENSAMBLADOR La primera razn para trabajar con ensamblador es que proporciona la oportunidad de conocer ms a fondo la operacin de su PC, lo que permite el desarrollo de software de una manera ms consistente. La segunda razn es el control total de la PC que se tiene con el uso del mismo. Otra razn es que los programas de ensamblador son ms rpidos, ms compactos y tienen mayor capacidad que los creados en otros lenguajes. Por ltimo el ensamblador permite una optimizacin ideal en los programas tanto en su tamao como en su ejecucin.

ESTRUCTURA DE UN PROGRAMA
La estructura de un programa est conectada con: Los ficheros de cdigo fuente llevarn la extensin *.ASM Los ficheros de listado llevarn la extensin *.LST Los ficheros de cdigo objeto llevarn la extensin *.OB] Los ficheros de errores llevarn la extensin *.ERR Los ficheros ejecutables en formato Intel Hex llevarn la extensin *.HEX Comentario descriptivo del programa (utilizar una cabecera estandarizada). Definir el micro controlador que se usar (con las directivas LIST e INCLUDE). Introducir las opciones de compilacin (que sern vistas ms adelante) (opcional). Establecer las constantes que se usarn (con la directiva EQU). Reservar espacios de memoria (directiva RES) (si es necesario). Configurar los puertos. Desarrollar el programa con comentarios, en lo posible explicando cada lnea de cdigo. Los mnemnicos escritos en minscula y las constantes y variables en mayscula hacen que el cdigo escrito sea ms visible. Colocar las rutinas en el mismo sitio, todas contiguas. Dibujar diagramas de flujo o escribir seudocdigo.

EJEMPLO 1: ESTRUCTURA DE UN PROGRAMA muy simple:

EJEMPLO 2: POSICION DE LOS ELEMENTOS DEL CODIGO

Etiquetas. Las etiquetas se rigen por las siguientes normas:

Debe situarse en la primera columna. Debe contener nicamente caracteres alfanumricos. El mximo de caracteres es de 31. Operacin. En esta columna se situarn las instrucciones. El campo del cdigo de operacin es el nico que nunca puede estar vaco; ste siempre contiene una instruccin o una directiva del ensamblador. Operandos El campo de operandos o de direccin puede contener una direccin o un dato, o puede estar en blanco. Normalmente contendr registroso literales con los que se operar (f, l ok , b y w). Comentario. El campo del comentario o de etiquetas es opcional. Aqu se situar cualquier comentario personalizado que deseemos. Estos son tiles para saber qu hace un programa sin tener que descifrar el cdigo entero. El compilador (ensamblador) ignorar todo texto ms all del carcter punto y coma ";". Los comentarios generalmente se sitan en la cuarta columna para describir la accin de una lnea de cdigo, pero pueden situarse en cualquier parte de programa para describir cualquier otro evento, siempre que estn despus del carcter ";" (semiculto en ingls). Delimitadores (separacin entre campos) Los campos van separados slo con espacios y/o tabulaciones. No agregue nunca otros caracteres (comas, puntos, etc.) No utilice espacios extra, particularmente despus de comas que separan operandos.(Ej.: movlw 5, w ) No use caracteres delimitadores (espacios y tabulaciones) en nombres o etiquetas.

ESTRUCTURA DE UN LENGUAJE ENSAMBLADOR

CAMPOS DE UNA INSTRUCCIN EN ENSAMBLADOR


Etiqueta Identifica la lnea en la cual se encuentra. Se asocia a la direccin en la cual se encuentra la instruccin o el dato, o a la constante definida. Recomendaciones Utilizar slo letras o nmeros (comenzar por una letra). Colocar la primera letra de la etiqueta en el primer carcter de la lnea. Nemotcnico Identifica: Un cdigo de operacin del lenguaje Una pseudoinstruccin *Campo de operandos Identifica los operandos que intervienen en la instruccin o pseudoinstruccin. Tipos de operandos: Constantes Numricas: decimales (D), binarias (%,B), octales (O,@,Q,C), Hexadecimales (H,$). Alfabticas: entre comillas. Smbolos Predefinidos: registros, contador de direccin de ensamblado. Implcitos: etiquetas de direccin. Explcitos: mediante pseudoinstrucciones. Expresiones Comentarios Indicaciones para una mejor comprensin del programa ensamblador.

Pueden comenzar con el smbolo ; . Estructura y Tecnologa de Computadores I Estructura de un lenguaje ensamblador -3PSEUDOINSTRUCCIONES Manipulacin del contador de direccin de ensamblado Indica la direccin a partir de la cual se localizan los datos o instrucciones acontinuacin. Ej. : ORG operando Definicin de smbolos Da un valor a un smbolo. Ej.: ETIQ EQU expresin Reserva de espacio en memoria (definicin de variables) Con valor inicial: reserva espacio para los datos indicados en la lista deexpresiones, y les pone los valores iniciales indicados (tamao de cada dato:S=B,W L). Ej. : ETIQ DC.S expr1, expr2, ,exprN Sin valor inicial: reserva espacio para tantas variables como se indica en laexpresin (tamao de cada dato: S=B,W L). Ej.: ETIQ DS.S expresin Control de traduccin Marca el final del programa fuente Ej.: END Almacenamiento en posicin par Hace que el siguiente objeto se almacene a partir de la prxima posicin dememoria con direccin par. Ej.: EVEN Enlace entre programas Indicacin de smbolos externos: EXT, REF, XREF, EXTERNAL. Indicacin de smbolos exportables: ENT, DEF, XDEF, PUBLIC.

Acciones de ensamblado condicional Incluyen en el ensamblado o no grupos de instrucciones del programa fuente. Ej.: IF ELSE ENDIF Ejecucin de listados e informes Ttulo para la cabeceras: TITLE, NAME. Salto de pgina: PAGE, SPAGE. Impresin u omisin de parte del programa fuente: LIST, NOLIST. Inclusin de la tabla de smbolos: SYMBOL, TABLE.

INTRODUCCION BASICA DEL LENGUAJE ENSAMBLADOR


Instrucciones lgicas. Son utilizadas para realizar operaciones lgicas sobre los operando. AND Propsito: Realiza la conjuncin de los operandos bit por bit. Sintaxis: AND destino, fuente Con esta instruccin se lleva a cabo la operacin "y" lgica de los dos operando. El resultado de la operacin se almacena en el operando destino. NEG Propsito: Genera el complemento a 2 Sintaxis: NEG destino Esta instruccin genera el complemento a 2 del operando destino y lo almacena en este mismo operando. Por ejemplo, si AX guarda el valor de 1234H, entonces: NEG AX Nos dejara almacenado en el registro AX el valor EDCCH.

NOT Propsito: Lleva a cabo la negacin bit por bit del operando destino. Sintaxis: NOT destino El resultado se guarda en el mismo operando destino. OR Propsito: OR inclusivo lgico Sintaxis: OR destino, fuente La instruccin OR lleva a cabo, bit por bit, la disyuncin inclusiva lgica de los dos operados. TEST Propsito: Comparar lgicamente los operandos Sintaxis: TEST destino, fuente Realiza una conjuncin, bit por bit, de los operandos, pero a diferencia de AND esta instruccin no coloca el resultado en el operando destino, solo tiene efecto sobre el estado de las banderas. XOR Propsito: OR exclusivo Sintaxis: XOR destino, fuente Su funcin es efectuar bit por bit la disyuncin exclusiva lgica de los dos operandos. Instrucciones aritmticas. Se usan para realizar operaciones aritmticas sobre los operando. ADC

Propsito: Adicin con acarreo. Sintaxis: ADC destino, fuente Lleva a cabo la suma de dos operandos y suma uno al resultado en caso de que la bandera CF est activada, esto es, en caso de que exista acarreo. El resultado se guarda en el operando destino. ADD Propsito: Adicin de los operandos. Sintaxis: ADD destino, fuente Suma los dos operandos y guarda el resultado en el operando destino. DIV Propsito: Divisin sin signo Sintaxis: DIV fuente El divisor puede ser un byte o palabra y es el operando que se le da a la instruccin. Si el divisor es de 8 bits se toma como dividendo el registro de 16 bits AX y si el divisor es de 16 bits se tomara como dividendo el registro par DX: AX, tomando como palabra alta DX y como baja AX. Si el divisor fue un byte el cociente se almacena en el registro AL y el residuo en AH, si fue una palabra el cociente se guarda en AX y el residuo en DX. IDIV Propsito: Divisin con signo Sintaxis: IDIV fuente Consiste bsicamente en lo mismo que la instruccin DIV, solo que esta ltima realiza la operacin con signo.

Para sus resultados utiliza los mismos registros que la instruccin DIV. MUL Propsito: Multiplicacin sin signo Sintaxis: MUL fuente El ensamblador asume que el multiplicando ser del mismo tamao que el del multiplicador, por lo tanto multiplica el valor almacenado en el registro que se le da como operando por el que se encuentre contenido en AH si el multiplicador es de 8 bits o por AX si el multiplicador es de 16 bits. Cuando se realiza una multiplicacin con valores de 8 bits el resultado se almacena en el registro AX y cuando la multiplicacin es con valores de 16 bits el resultado se almacena en el registro par DX: AX. IMUL Propsito: Multiplicacin de dos enteros con signo. Sintaxis: IMUL fuente Este comando hace lo mismo que el anterior, solo que si toma en cuenta los signos de las cantidades que se multiplican. Los resultados se guardan en los mismos registros que en la instruccin MUL. SBB Propsito: Substraccin con acarreo Sintaxis: SBB destino, fuente Esta instruccin resta los operandos y resta uno al resultado si CF est activada. El operando fuente siempre se resta del destino. Este tipo de substraccin se utiliza cuando se trabaja con cantidades de 32 bits. SUB

Propsito: Substraccin Sintaxis: SUB destino, fuente Resta el operando fuente del destino.

EJERCICIOS: SUMA, RESTA, MULTIPLICACION, DIVISION.


SUMAR NUMEROS EN LENGUAJE ENSAMBLOR

.modelsmall .stack .data var1 db ? .code .startup mov ah,01h int 21h sub al,30h mov var1,al mov ah,01h int 21h sub al,30h

add al,var1 movdl,al add dl,30h mov ah,02h int 21h .exitEnd

RESTAR NUMEROS EN LENGUAJE ENSAMBLADOR


.modelsmall .stack .data var1 db ? .code .startup mov ah,01h int 21h sub al,30h mov var1,al mov ah,01h int 21h sub al,30h sub al,var1 movdl,al add dl,30h mov ah,02h

int 21h .exit end

MULTIPLICACION DE LENGUAJE ENSAMBLADOR

.model small .stack .data var1 db ? .code .startup mov ah,01h int 21h sub al,30h mov var1,al mov ah,01h int 21h sub al,30h mul byte ptr [var1] movdl,al add dl,30h mov ah,02h int 21h .exit End

DIVISION DE LENGUAJE ENSAMBLADOR

invokewrite, addr num1 ;mensaje del primer valor call leer ;lee un numero movEbx,numero ;muevo al a bl invokewrite, addrsalt invokewrite, addr num2 ;mensaje del segundo valor call leer ;lee un numero movEax,Ebx movEbx,numero div Ebx ;sumo bl / al movnumero,Eax ;respaldo movEbx,Edx invokewrite, addrsalt invokewrite, addr res ;mensaje del resultado call mostrar ;muestra el resultado invokewrite, addrresi;mensaje de residuo movnumero,Ebx call mostrar ;muestra el residuo callreadc ;espero a que presione tecla jmp repite

LINKOGRAFIA

http://es.wikipedia.org/wiki/Compilador http://usuarios.multimania.es/patricio/ensam/ensam1.htm http://www.pro-gramas.com/scripts/Calculadora-de-32bits-suma,-resta,-multiplica,divide-en-ensamblador-43-26.html http://www.monografias.com/trabajos76/estructura-programa-ensamblador/estructuraprograma-ensamblador.shtml

You might also like