Sei sulla pagina 1di 20

Universidad Tecnolgica

Introduccin a la Programacin

Trabajo Lenguaje Ensamblador

Nombre Alumnos: Carlos Pichaud Jos Gonzlez Nombre Profesor: Marcelo Soto Fecha: 25 de Junio del 2008

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.

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 lgica se 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,

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

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 y direccionamiento 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.

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 segmentacin del 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:

Binario: 10110000 01100001 (Hexadecimal: 0xb061)

La representacin equivalente en lenguaje ensamblador es ms fcil de recordar:

MOV al, 061h

Esta instruccin significa:

Mueva el valor hexadecimal 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 o parmetros, 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

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.

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 o

llenar un registro con un valor constante mover datos de una posicin de memoria a un registro o viceversa escribir y leer datos de dispositivos

computar
o

sumar, restar, multiplicar o dividir los valores de dos registros, colocando el resultado en uno de ellos o en otro registro realizar operaciones binarias, incluyendo operaciones lgicas (AND/OR/XOR/NOT) comparar valores entre registros (mayor, menor, igual)

afectar el flujo del programa


o

saltar a otra posicin en el programa y ejecutar instrucciones all saltar si se cumplen ciertas condiciones (IF) saltar a otra posicin, pero guardar el punto de salida para retornar (CALL, llamada a subrutinas)

o o

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

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

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 valor hexadecimal 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".

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.

Relacin entre el cdigo binario y el lenguaje ensamblador En el cdigo binario se utilizan ceros y unos, mientras que el 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

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 el programa. 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

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

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 direcciones NO 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.

Dir. Etiqueta

a_start 2048 2064 2068 2072 2076 2080 2084 2088 done: 2092 length:

Instruccin .begin .org 2048 .equ 3000 ld length,% be done addcc %r1,-4,%r1 addcc %r1,%r2,%r4 ld %r4,%r5 ba loop addcc %r3,%r5,%r3 jmpl %r15+4,%r0 20

Cdigo objeto

00000010 10000000 00000000 00000110 10000010 10000000 01111111 11111100 10001000 10000000 01000000 00000010 11001010 00000001 00000000 00000000 00010000 10111111 11111111 11111011 10000110 10000000 11000000 00000101 10000001 11000011 11100000 00000100 00000000 00000000 00000000 00010100 00000000 00000000 00001011 10111000

2096 address: a_start 3000 .org a_start a:</tt

Conclusin

El lenguaje ensamblador es 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

En este trabajo se dar a conocer en que consiste el sistema ensamblador sus ventajas y desventajas sus caractersticas y la importancia de este.

Potrebbero piacerti anche