50747192 manual de ensamblador tasm

Upload: cesar-saucedo

Post on 04-Apr-2018

224 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/29/2019 50747192 Manual de Ensamblador Tasm

    1/17

  • 7/29/2019 50747192 Manual de Ensamblador Tasm

    2/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 loscuales 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.

  • 7/29/2019 50747192 Manual de Ensamblador Tasm

    3/17

    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 sonnormalmente 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.

  • 7/29/2019 50747192 Manual de Ensamblador Tasm

    4/17

    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 deoperacin 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 dichadirectriz.

    Cualquier error que detecta el ensamblador se muestra justamente antes de la lnea que contienedicho error.

    An y cuando no se desee producir un listado origen, los errores se despliegan para indicar que elprocesamiento 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.

  • 7/29/2019 50747192 Manual de Ensamblador Tasm

    5/17

    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.

  • 7/29/2019 50747192 Manual de Ensamblador Tasm

    6/17

    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:

  • 7/29/2019 50747192 Manual de Ensamblador Tasm

    7/17

    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.

  • 7/29/2019 50747192 Manual de Ensamblador Tasm

    8/17

    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.

  • 7/29/2019 50747192 Manual de Ensamblador Tasm

    9/17

    Pueden comenzar con el smbolo ;.

    Estructura y Tecnologa de Computadores I

    Estructura de un lenguaje ensamblador -3-

    PSEUDOINSTRUCCIONES

    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.: ETIQEQU 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. : ETIQDC.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.: ETIQDS.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.

  • 7/29/2019 50747192 Manual de Ensamblador Tasm

    10/17

    Acciones de ensamblado condicional

    Incluyen en el ensamblado o no grupos de instrucciones del programa fuente.

    Ej.: IFELSE 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.

  • 7/29/2019 50747192 Manual de Ensamblador Tasm

    11/17

    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

  • 7/29/2019 50747192 Manual de Ensamblador Tasm

    12/17

    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.

  • 7/29/2019 50747192 Manual de Ensamblador Tasm

    13/17

    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 elresultado 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

  • 7/29/2019 50747192 Manual de Ensamblador Tasm

    14/17

    Propsito: Substraccin

    Sintaxis: SUB destino, fuente

    Resta el operando fuente del destino.

    EJERCICIOS:

    SUMA, RESTA, MULTIPLICACION, DIVISION.

    SUMAR NUMEROS EN LENGUAJE ENSAMBLOR

    .modelsmall

    .stack

    .datavar1 db ?.code.startup

    mov ah,01h

    int 21h

    sub al,30hmov var1,al

    mov ah,01hint 21hsub al,30h

  • 7/29/2019 50747192 Manual de Ensamblador Tasm

    15/17

    add al,var1

    movdl,aladd dl,30hmov ah,02hint 21h

    .exitEnd

    RESTAR NUMEROS EN LENGUAJE ENSAMBLADOR

    .modelsmall

    .stack

    .datavar1 db ?.code.startupmov ah,01hint 21hsub al,30h

    mov var1,al

    mov ah,01hint 21hsub al,30hsub al,var1movdl,aladd dl,30hmov ah,02h

  • 7/29/2019 50747192 Manual de Ensamblador Tasm

    16/17

    int 21h.exitend

    MULTIPLICACION DE LENGUAJE ENSAMBLADOR

    .model small

    .stack

    .data

    var1 db ?.code.startup

    mov ah,01hint 21hsub al,30hmov var1,al

    mov ah,01hint 21hsub al,30hmul byte ptr [var1]

    movdl,aladd dl,30hmov ah,02hint 21h

    .exitEnd

  • 7/29/2019 50747192 Manual de Ensamblador Tasm

    17/17

    DIVISION DE LENGUAJE ENSAMBLADOR

    invokewrite, addr num1;mensaje delprimer valor

    call leer ;lee unnumeromovEbx,numero ;muevoala bl

    invokewrite, addrsaltinvokewrite, addr num2;mensaje delsegundo valor

    call leer ;lee unnumeromovEax,EbxmovEbx,numerodiv Ebx ;sumo bl/almovnumero,Eax ;respaldomovEbx,Edx

    invokewrite, addrsaltinvokewrite, addr res;mensajedelresultado

    call mostrar;muestraelresultado

    invokewrite, addrresi;mensaje de residuo

    movnumero,Ebxcall mostrar;muestraelresiduo

    callreadc;esperoa que presionetecla

    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/estructura-

    programa-ensamblador.shtml