5295750-Lenguaje-ensamblador

download 5295750-Lenguaje-ensamblador

of 20

Transcript of 5295750-Lenguaje-ensamblador

  • 8/3/2019 5295750-Lenguaje-ensamblador

    1/20

    Universidad TecnolgicaIntroduccin a la Programacin

    TrabajoLenguaje Ensamblador

    Nombre Alumnos: Carlos Pichaud

    Jos Gonzlez

    Nombre Profesor: Marcelo Soto

    Fecha: 25 de Junio del 2008

  • 8/3/2019 5295750-Lenguaje-ensamblador

    2/20

    Lenguaje ensamblador

    Este lenguaje fue usado ampliamente en el pasado para el

    desarrollo de software, pero actualmente slo se utiliza en

    contadas ocasiones, especialmente cuando se requiere la

    manipulacin directa del hardware o se pretenden

    rendimientos inusuales de los equipos.

    Importancia del lenguaje ensamblador

    La importancia del lenguaje ensamblador radica

    principalmente que se trabaja directamente con el

    microprocesador; por lo cual se debe de conocer el

    funcionamiento interno de este, tiene la ventaja de que en

    el se puede realizar cualquier tipo de programas que en los

    lenguajes de alto nivel no lo pueden realizar. Otro punto

    sera que los programas en ensamblador ocupan menos

    espacio en memoria.

    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.

  • 8/3/2019 5295750-Lenguaje-ensamblador

    3/20

    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.

    Desventajas

    Tiempo de programacin.- Como es un lenguaje de bajo

    nivel requiere ms instrucciones para realizar el mismo

    proceso, en comparacin con un lenguaje de alto nivel. Por

    otro lado, requiere de ms cuidado por parte del

    programador, pues es propenso a que los errores de lgicase reflejen ms fuertemente en la ejecucin.

    Programas fuente grandes.- Por las mismas razones que

    aumenta el tiempo, crecen los programas fuentes;

    simplemente requerimos ms instrucciones primitivas para

    describir procesos equivalentes. Esto es una desventaja

    porque dificulta el mantenimiento de los programas, y

    nuevamente reduce la productividad de los programadores.

    Peligro de afectar recursos inesperadamente .- Que todo

    error que podamos cometer, o todo riesgo que podamos

    tener, podemos afectar los recursos de la maquina,

  • 8/3/2019 5295750-Lenguaje-ensamblador

    4/20

    programar en este lenguaje lo ms comn que pueda pasar

    es que la mquina se bloquee o se reinicialize. Porque con

    este lenguaje es perfectamente posible (y sencillo) realizar

    secuencias de instrucciones invlidas, que normalmente no

    aparecen al usar un lenguaje de alto nivel.

    Falta de portabilidad.- Porque para cada mquina existe un

    lenguaje ensamblador; por ello, evidentemente no es una

    seleccin apropiada de lenguaje cuando deseamos

    codificar en una mquina y luego llevar los programas a

    otros sistemas operativos o modelos de computadoras.

    Caractersticas

    Programar en lenguaje ensamblador es difcil de

    aprender, entender, leer, escribir, depurar y mantener,por eso surgi la necesidad de los lenguajes

    compilados.

    A pesar de perder rendimiento en un proceso de

    compilacin, en la actualidad la mayora de las

    computadoras son suficientemente rpidas.

    El lenguaje ensamblador no es portable.

    Programar en lenguaje ensamblador lleva mucho

    tiempo.

    Los programas hechos en lenguaje ensamblador son

    generalmente ms rpidos. Al programar

    cuidadosamente en lenguaje ensamblador se pueden

  • 8/3/2019 5295750-Lenguaje-ensamblador

    5/20

    crear programas de 5 a 10 veces ms rpidos que con

    lenguajes de alto nivel.

    Los programas hechos en lenguaje ensamblador

    generalmente ocupan menos espacio. Un buen

    programa en lenguaje ensamblador puede ocupar casi

    la mitad de espacio que su contraparte en lenguaje de

    alto nivel.

    Con el lenguaje ensamblador se pueden crear

    segmentos de cdigo imposibles de formar en un

    lenguaje de alto nivel.

    Ensambladores

    Un ensamblador crea cdigo objeto traduciendo

    instrucciones mnemnicas a cdigos operativos e

    interpretando los nombres simblicos para direcciones de

    memoria y otras entidades. El uso de referencias

    simblicas es una caracterstica bsica de los

    ensambladores, evitando tediosos clculos ydireccionamiento manual despus de cada modificacin del

    programa. La mayora de los ensambladores tambin

    incluyen facilidades para crear macros, a fin de generar

    series de instrucciones cortas que se ejecutan en tiempo

    real, en lugar de utilizar subrutinas.

  • 8/3/2019 5295750-Lenguaje-ensamblador

    6/20

    Los ensambladores son por lo general ms fciles de

    programar que los compiladores de lenguajes de alto nivel,

    y han estado disponibles desde la dcada de 1950. Los

    ensambladores modernos, especialmente para

    arquitecturas basadas en RISC, como por ejemplo MIPS,

    SPARC y PA-RISC optimizan las instrucciones para

    explotar al mximo la eficiencia de segmentacindel CPU.

    Los ensambladores de alto nivel ofrecen posibilidades de

    abstraccin que incluyen:

    Control avanzado de estructuras.

    Procedimientos de alto nivel, declaracin de

    funciones.

    Tipos de datos que incluyen estructuras, registros,uniones, clases y conjuntos.

    Sofisticado procesamiento de macros.

    Lenguaje

    Un programa escrito en lenguaje ensamblador consiste en

    una serie de instrucciones que corresponden al flujo de

    rdenes ejecutables que pueden ser cargadas en la

    memoria de una computadora. Por ejemplo, un procesador

    x86 puede ejecutar la siguiente instruccin binaria como se

    expresa en cdigo de mquina:

  • 8/3/2019 5295750-Lenguaje-ensamblador

    7/20

    Binario: 10110000 01100001 (Hexadecimal: 0xb061)

    La representacin equivalente en lenguaje ensamblador es

    ms fcil de recordar:

    MOV al, 061h

    Esta instruccin significa:

    Mueva el valorhexadecimal 61 (97 decimal) al registro

    "al".

    El mnemnico "mov" es un cdigo de operacin u

    "opcode", elegido por los diseadores de la coleccin de

    instrucciones para abreviar "move" (mover). El opcode es

    seguido por una lista de argumentos oparmetros,

    completando una instruccin de ensamblador tpica.

    La transformacin del lenguaje ensamblador en cdigo

    mquina la realiza un programa ensamblador, y la

    traduccin inversa la puede efectuar un desensamblador. A

    diferencia de los lenguajes de alto nivel, aqu hay

    usualmente una correspondencia 1 a 1 entre las

    instrucciones simples del ensamblador y el lenguaje de

    mquina. Sin embargo, en algunos casos, un ensamblador

    puede proveer "pseudo instrucciones" que se expanden en

    un cdigo de mquina ms extenso a fin de proveer la

    funcionalidad necesaria. Por ejemplo, para un cdigo

    http://es.wikipedia.org/wiki/Hexadecimalhttp://es.wikipedia.org/wiki/Opcodehttp://es.wikipedia.org/wiki/Hexadecimalhttp://es.wikipedia.org/wiki/Opcode
  • 8/3/2019 5295750-Lenguaje-ensamblador

    8/20

    mquina condicional como "si X mayor o igual que" , un

    ensamblador puede utilizar una pseudoinstruccin al grupo

    "haga si menor que" , y "si = 0" sobre el resultado de la

    condicin anterior. Los ensambladores ms completos

    tambin proveen un rico lenguaje de macros que se utiliza

    para generar cdigo ms complejo y secuencias de datos.

    Cada arquitectura de computadoras tiene su propio

    lenguaje de mquina, y en consecuencia su propio

    lenguaje ensamblador. Los ordenadores difieren en el tipo y

    nmero de operaciones que soportan; tambin pueden

    tener diferente cantidad de registros, y distinta

    representacin de los tipos de datos en memoria. Aunque

    la mayora de las computadoras son capaces de cumplir

    esencialmente las mismas funciones, la forma en que lo

    hacen difiere y los respectivos lenguajes ensambladores

    reflejan tal diferencia.

    Pueden existir mltiples conjuntos de mnemnicos o

    sintaxis de lenguaje ensamblador para un mismo conjunto

    de instrucciones, instanciados tpicamente en diferentes

    programas ensamblador. En estos casos, la alternativa ms

    popular es la provista por los fabricantes, y usada en los

    manuales del programa.

  • 8/3/2019 5295750-Lenguaje-ensamblador

    9/20

    Cdigo mquina (o lenguaje de mquina)

    El lenguaje de mquina est formado por instrucciones

    sencillas, que -dependiendo de la estructura del

    procesador- pueden especificar:

    Registros especficos para operaciones aritmticas,

    direccionamiento o control de funciones.

    Posiciones de memoria especficas (offset).

    Modos de direccionamiento usados para interpretar

    operandos.

    Las operaciones ms complejas se realizan combinando

    estas instrucciones sencillas, que pueden ser ejecutadas

    secuencialmente o mediante instrucciones de control de

    flujo.

    Las operaciones disponibles en la mayora de los conjuntos

    de instrucciones incluye:

    mover

    o llenar un registro con un valor constante

    o mover datos de una posicin de memoria a un

    registro o viceversa

    o escribir y leer datos de dispositivos

  • 8/3/2019 5295750-Lenguaje-ensamblador

    10/20

    computar

    o sumar, restar, multiplicar o dividir los valores de

    dos registros, colocando el resultado en uno de

    ellos o en otro registro

    o realizar operaciones binarias, incluyendo

    operaciones lgicas (AND/OR/XOR/NOT)

    o comparar valores entre registros (mayor, menor,

    igual)

    afectar el flujo del programa

    o saltar a otra posicin en el programa y ejecutar

    instrucciones all

    o saltar si se cumplen ciertas condiciones (IF)

    o saltar a otra posicin, pero guardar el punto de

    salida para retornar (CALL, llamada a subrutinas)

    Algunas computadoras incluyen instrucciones complejas

    dentro de sus capacidades. Una sola instruccin compleja

    hace lo mismo que en otras computadoras puede requerir

    una larga serie de instrucciones, por ejemplo:

    salvar varios registros en la pila de una sola vez

    mover grandes bloques de memoria

    operaciones aritmticas complejas o de punto flotante

    (seno, coseno, raz cuadrada )

    El nivel de lenguaje ensamblador tiene aspectos

    importantes de los niveles de microarquitectura, en los

  • 8/3/2019 5295750-Lenguaje-ensamblador

    11/20

    cuales se encuentra (ISA y sistema operativo) estos dos se

    utilizan para la traduccin en lugar de la interpretacin.

    Algunas caractersticas del lenguaje se describen a

    continuacin Los programas que sirven para traducir algn

    programa para el usuario se llama traductores, el lenguaje

    en que esta escrito el programa original se llama lenguaje

    fuente, el lenguaje original que sea modificado se llama

    lenguaje objeto.

    Se usa la traduccin cuando se cuenta con un procesador

    (ya sea hardware o un interprete) para el lenguaje objeto

    pero no para el lenguaje fuente, Si la traduccin se realiza

    correctamente, la ejecucin del programa traducido dar

    exactamente los mismos resultados que habra dado la

    ejecucin del programa fuente. Hay dos diferencias entre

    traduccin e interpretacin, en la traduccin no se ejecuta

    directamente el programa original, en el lenguaje fuente se

    convierte en un programa equivalente llamado programa

    objeto o programa binario ejecutable y este funciona solo

    cuando se ha acabado la traduccin.

    El cdigo mquina, un simple patrn de bits, es hecho

    legible reemplazando valores crudos por smbolos

    denominados mnemnicos. Se invent para facilitar la

    tarea de los primeros programadores que hasta ese

    momento tenan que escribir directamente en cdigo

  • 8/3/2019 5295750-Lenguaje-ensamblador

    12/20

    binario. Inicialmente el cdigo de ceros y unos (el

    programa) deba introducirse en una tarjeta perforada. La

    posicin ocupada por cada punto equivala a un "1" o a un

    "0" segn hubiera o no una perforacin. Lo cual supona

    una forma casi idntica en la que hoy se escriben los datos

    binaros en soportes tales como los CDs y DVDs.

    Mientras que una computadora reconoce la instruccin de

    mquina IA-32

    10110000 01100001

    para los programadores de microprocesadores x86 es

    mucho ms fcil reconocer dicha instruccin empleando

    lenguaje ensamblador :

    movb 0x61,%al

    (que significa mover el valorhexadecimal 61 (97 decimal) al

    registro 'al'.)

    Cada instruccin de la mquina se transforma en una nica

    instruccin en cdigo simblico.

    Pero adems, para mejorar la legibilidad del programa, el

    cdigo simblico introduce instrucciones adicionales, que

    no corresponden a ninguna instruccin de la mquina y que

    proporcionan informacin. Se llaman

    "pseudoinstrucciones".

    http://es.wikipedia.org/wiki/Hexadecimalhttp://es.wikipedia.org/wiki/Hexadecimal
  • 8/3/2019 5295750-Lenguaje-ensamblador

    13/20

    El cdigo simblico puede parecer de difcil acceso, pero

    es ms fcil de recordar e interpretar que el binario o el

    hexadecimal.

    Los lenguajes simblicos no resuelven definitivamente el

    problema de cmo programar un ordenador de la manera

    ms sencilla posible. Para utilizarlos, hay que conocer a

    fondo el microprocesador, los registros de trabajo de que

    dispone, la estructura de la memoria, y muchas cosas ms.

    Adems, el lenguaje ensamblador est muy ligado al

    microprocesador para que sea posible escribir programas

    independientes de la mquina en que van a ejecutarse.

    Este cdigo simblico no puede ser ejecutado

    directamente por un ordenador, por lo que es preciso

    traducirlo previamente. Pero la traduccin es un proceso

    mecnico y repetitivo, que se presta a su realizacin por un

    programa de ordenador.

    Los programas que traducen cdigo simblico al lenguaje

    de mquina se llaman ensambladores ("assembler", en

    ingls), porque son capaces de ensamblar el programa

    traducido a partir de varias piezas, procedimientos o

    subrutinas a cdigo binario ("1" y "0") que entiende el

    procesador.

    http://es.wikipedia.org/wiki/Hexadecimalhttp://es.wikipedia.org/wiki/Hexadecimal
  • 8/3/2019 5295750-Lenguaje-ensamblador

    14/20

    Relacin entre el cdigo binario y el lenguaje

    ensamblador

    En el cdigo binario se utilizan ceros y unos, mientras queel lenguaje ensamblador es una coleccin de smbolos

    mnemnicos que representan: operaciones, nombres

    simblicos, operadores y smbolos especiales.

    La relacin entre estos dos lenguajes sera que el binario

    es el lenguaje que la mquina entiende y el ensamblador

    se acerca mas lenguaje de esta.

    Manejo de la memoria: Direccionamiento (interno y

    externo)

    El manejo de la memoria depende de que procesador

    tenga la mquina, entre los cuales a continuacin se

    mencionan los siguientes:

    Memoria de Programa

    Memoria Externa de Datos

    Memoria Interna de Datos

    Registros de Funciones Especiales

    Memoria de Bit.

    El espacio de la Memoria de Programa contiene todas las

    instrucciones, datos, tablas y cadenas de caracteres

    (strings) usadas en los programas. Esta memoria se

    direcciona principalmente usando el registro de 16 bits

    llamado Data Pointer. El tamao mximo de la Memoria de

  • 8/3/2019 5295750-Lenguaje-ensamblador

    15/20

    Programa es de 64 Kbytes.

    La Memoria Externa de Datos contiene todas las variables

    y estructuras de datos que no caben en la memoria interna

    del Microprocesador. Esta memoria se direcciona

    principalmente por el registro de 16 bits Data Pointer ,

    aunque tambin se puede direccionar un banco de

    Memoria Externa de Datos de 256 bytes usando los dos

    primeros registros de propsito general .

    El espacio de Memoria Interna de Datos funcionalmente es

    la memoria de datos ms importante, ya que ah es donde

    residen cuatro bancos de registros de propsito general; la

    pila o stack del programa; 128 bits de los 256 bits de un

    rea de memoria direccionable por bit y todas las variables

    y estructuras de datos operadas directamente por elprograma. El tamao mximo de la Memoria Interna de

    Datos es de 256 bytes.

    Contiene un espacio para los denominados Registros de

    Funciones Especiales destinado para los puertos de

    entrada/salida, temporizadores y puerto serie del circuito

    integrado. Estos registros incluyen al Stack Pointer; al

    registro de la palabra de estado del programa y al

    Acumulador. La cantidad mxima de Registros de

    Funciones Especiales es 128.

    Todos los Registros de Funciones Especiales tienen

    direcciones mayores a 127 y se ubican en los 128 bytes

  • 8/3/2019 5295750-Lenguaje-ensamblador

    16/20

    superiores de la Memoria Interna de Datos. Estas dos

    reas de la Memoria Interna de Datos se diferencian por el

    modo de direccionamiento usado para accesarlas. Los

    Registros de Funciones Especiales solo se pueden accesar

    usando el modo de direccionamiento Directo, mientras que

    los 128 bytes superiores solo se pueden accesar con el

    modo de direccionamiento Indirecto.

    Por otra parte, el espacio de Memoria de Bit se usa para

    almacenar variables y banderas de un bit. El tamao

    mximo de la Memoria de Bit es de 256 bits, 128 de los bits

    comparten su espacio con 16 bytes del espacio de la

    Memoria Interna de Datos y los otros 128 bits lo hacen con

    los Registros de Funciones Especiales.

    Ejemplos de lenguaje ensamblador

    Ejemplo 1

    El siguiente es un ejemplo del programa clsico Hola

    mundo escrito para la arquitectura de procesador x86 (bajo

    el sistema operativo DOS).

    .model small

    .stack

    .data

    Cadena1 DB 'Hola Mundo.$'

    .code

  • 8/3/2019 5295750-Lenguaje-ensamblador

    17/20

    programa:

    mov ax, @data

    mov ds, ax

    mov dx, offset Cadena1

    mov ah, 9

    int 21h

    end programa

    Ejemplo 2

    Una seleccin de instrucciones para una computadora

    virtual) con las correspondientes direcciones de memoria

    en las que se ubicarn las instrucciones. Estas direccionesNO son estticas. Cada instruccin se acompaa del

    cdigo ensamblador generado (cdigo objeto) que coincide

    con la arquitectura de computador virtual, o conjunto de

    instrucciones ISA.

  • 8/3/2019 5295750-Lenguaje-ensamblador

    18/20

    Conclusin

    Dir. Etiqueta Instruccin Cdigo objeto

    .begin

    .org 2048

    a_start .equ 3000

    2048 ld length,%

    2064 be done00000010 1000000000000000 00000110

    2068 addcc %r1,-4,%r1

    10000010 10000000

    01111111 11111100

    2072 addcc %r1,%r2,%r410001000 1000000001000000 00000010

    2076 ld %r4,%r511001010 0000000100000000 00000000

    2080 ba loop00010000 10111111

    11111111 11111011

    2084 addcc %r3,%r5,%r310000110 1000000011000000 00000101

    2088 done: jmpl %r15+4,%r010000001 1100001111100000 00000100

    2092 length: 2000000000 0000000000000000 00010100

    2096 address: a_start00000000 0000000000001011 10111000

    .org a_start

    3000 a:

  • 8/3/2019 5295750-Lenguaje-ensamblador

    19/20

    El lenguaje ensambladores un tipo de lenguaje de bajo

    nivel utilizado para escribir programas informticos, y

    constituye la representacin ms directa del cdigo

    mquina especfico para cada arquitectura de

    computadoras legible por un programador.

    Introduccin

  • 8/3/2019 5295750-Lenguaje-ensamblador

    20/20

    En este trabajo se dar a conocer en que consiste el

    sistema ensamblador sus ventajas y desventajas sus

    caractersticas y la importancia de este.