You are on page 1of 9

LENGUAJE EMSAMBLADOR Un poco de Historia Los primeros lenguajes de programacin surgieron de la idea de Charles Babagge a mediados del siglo

XIX. Era un profesor matemtico de la universidad de Cambridge e inventor ingls, que al principio del siglo XIX predijo muchas de las teoras en que se basan los actuales ordenadores. Consista en lo que l denominaba la maquina analtica, pero que por motivos tcnicos no pudo construirse hasta mediados del siglo XX. Con l colaboro Ada Lovedby, la cual es considerada como la primera programadora de la historia, pues realiz programas para aqulla supuesta mquina de Babagge, en tarjetas perforadas. Como la mquina no lleg nunca a construirse, los programas de Ada, lgicamente, tampoco llegaron a ejecutarse, pero si suponen un punto de partida de la programacin, sobre todo si observamos que en cuanto se empez a programar, los programadores utilizaron las tcnicas diseadas por Charles Babagge, y Ada, que consistan entre otras, en la programacin mediante tarjetas perforadas. A pesar de ello, Ada ha permanecido como la primera programadora de la historia. Se dice por tanto que estos dos genios de antao, se adelantaron un siglo a su poca, lo cual describe la inteligencia de la que se hallaban dotados. En 1823 el gobierno Britnico lo apoyo para crear el proyecto de una mquina de diferencias, un dispositivo mecnico para efectuar sumas repetidas. Pero Babagge se dedic al proyecto de la mquina analtica, abandonando la mquina de diferencias, que se pudiera programar con tarjetas perforadas, gracias a la creacin de Charles Jacquard (francs). Este hombre era un fabricante de tejidos y haba creado un telar que poda reproducir automticamente patrones de tejidos, leyendo la informacin codificada en patrones de agujeros perforados en tarjetas de papel rgido. Entonces Babagge intento crear la mquina que se pudiera programar con tarjetas perforadas para efectuar cualquier clculo con una precisin de 20 dgitos. Pero la tecnologa de la poca no bastaba para hacer realidad sus ideas. Si bien las ideas de Babagge no llegaron a materializarse de forma definitiva, su contribucin es decisiva, ya que los ordenadores actuales responden a un esquema anlogo al de la mquina analtica. En su diseo, la mquina constaba de cinco unidades bsicas: 1) Unidad de entrada, para introducir datos e instrucciones; 2) Memoria, donde se almacenaban datos y resultados intermedios; 3) Unidad de control, para regular la secuencia de ejecucin de las operaciones; 4) Unidad Aritmtico-Lgica, que efecta las operaciones; 5) Unidad de salida, encargada de comunicar al exterior los resultados. Charles Babbage, conocido como el "Padre de la Informtica" no pudo completar en aquella poca la construccin del computador que haba soado, dado que faltaba algo fundamental: la electrnica. El camino sealado de Babbage, no fue nunca abandonado y siguindolo, se construyeron los primeros computadores. Cuando surgi el primer ordenador, el famoso ENIAC (Electronic Numerical Integrator And Calculator), su programacin se basaba en componentes fsicos, o sea, que se programaba, cambiando directamente el Hardware de la mquina, exactamente lo que s hacia era cambiar cables de sitio para conseguir as la programacin de la mquina. La entrada y salida de datos se realizaba mediante tarjetas perforadas.

En la actualidad En la actualidad hay muchos tipos de lenguajes de programacin, cada uno de ellos con su propia gramtica, su terminologa especial y una sintaxis particular. Por ejemplo, existen algunos creados especialmente para aplicaciones cientficas o matemticas generales (BASIC, FORTRAN, PASCAL, etc. ); otros, en cambio, se orientan al campo empresarial y al manejo de textos y archivos, es decir, son en realidad fundamentalmente gestores de informacin (COBOL, PL/1, etc. ), o muy relacionados con el lenguaje mquina del computador (como el C y el ASSEMBLER). El lenguaje Ensamblador, o Assembler (Assembly Language en ingls) 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). 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 los microcontroladores) an cuentan con el ensamblador como la nica manera de ser manipulados.

Caractersticas El cdigo escrito en lenguaje ensamblador posee una cierta dificultad de ser entendido ya que su estructura se acerca al lenguaje mquina, es decir, es un lenguaje de bajo nivel. El lenguaje ensamblador es difcilmente portable, es decir, un cdigo escrito para un microprocesador, puede necesitar ser modificado, para poder ser usado en otra mquina distinta. Al cambiar a una mquina con arquitectura diferente, generalmente es necesario reescribirlo completamente. Los programas hechos por un programador experto en lenguaje ensamblador son generalmente mucho ms rpidos y consumen menos recursos del sistema (memoria RAM y ROM) que el programa equivalente compilado desde un lenguaje de alto nivel. Al programar cuidadosamente en lenguaje ensamblador se pueden crear programas que se ejecutan ms rpidamente y ocupan menos espacio que con lenguajes de alto nivel. Con el lenguaje ensamblador se tiene un control muy preciso de las tareas realizadas por un microprocesador por lo que se pueden crear segmentos de cdigo difciles y/o muy ineficientes de programar en un lenguaje de alto nivel, ya que, entre otras cosas, en el lenguaje ensamblador se dispone de instrucciones del CPU que generalmente no estn disponibles en los lenguajes de alto nivel. Tambin se puede controlar el tiempo en que tarda una rutina en ejecutarse, e impedir que se interrumpa durante su ejecucin. El lenguaje ensamblador es un lenguaje de programacin que es una traduccin directa del cdigo de mquina (Este cdigo es interpretado por el microprocesador), para que pueda ser entendible por los seres humanos, por lo tanto es un lenguaje de bajo nivel. El lenguaje ensamblador permite una optimizacin que no se consigue con lenguajes de medio y alto nivel. Permite la creacin de programas muy rpidos y muy pequeos, adems se tiene un control que no se consigue con un lenguaje de alto nivel. Ventajas Permite conocer con mayor precisin la operacin de la PC, por lo tanto permite la creacin de software consistente, tambin se tiene un control total de la PC y permite la creacin de programas extremadamente rpidos y pequeos (Sin exigirle demasiado al microprocesador). Para la creacin de un programa primero se deben disear los algoritmos que utilizar el programa, luego se realiza su codificacin en algn lenguaje de programacin, luego se traduce a cdigo de mquina (Cuando se trabaja en assembler, ste proceso se llama ensamblar, cuando es otro lenguaje se llama compilar) y al formato que entiende el programa que cargar el programa a crear, se prueba el programa y si hay errores se depura es decir, se eliminan los errores que tenga el programa), cuando hay un error generalmente se vuelve a repetir el proceso.

Sintaxis El formato general de las lneas de instruccin es: [etiqueta: ] nemnico [operando] [,operando] [,operando] [;comentario] Donde el nmero de operandos (entre 0 y 3) depende de la instruccin en particular. Entre campos adyacentes pueden existir espacios en blanco o tabulaciones, que sern ignoradas por el ensamblador. El ensamblador no diferencia entre maysculas y minsculas. A continuacin se muestran los comandos existentes: 1) No numricos: Smbolos especficos del ensamblador. Son palabras reservadas que se emplean necesariamente en algunas instrucciones. Por ejemplo AB en la instruccin MUL AB. Son los siguientes: A AB C DPTR PC R0 RI R2 R3 R4 R5 R6 R7 El ensamblador reconoce tambin los smbolos $ (contador de posicin), y AR0,,AR7 utilizados en combinacin con la directiva USING (ver apartado 3). Direcciones indirectas. Utilizan el nombre de un registro para indicar la direccin de un dato. Por ejemplo @RO en la instruccin MOV A,@RO 2) Numricos: Los tipos numricos se pueden representar mediante expresiones simblicas, con la condicin de que puedan ser convertidas a un nmero. El proceso de conversin se denomina evaluacin de la expresin, y se dice que una expresin evala a un nmero. Datos inmediatos. Indican una constante. Por ejemplo #25 en la instruccin MOV A,#25. Direcciones de byte. Indican la posicin de la memoria en la que se encuentra un dato de tipo byte. Por ejemplo, 40 en la instruccin MOV A,40. Direcciones de bit. Indican la posicin de la memoria en la que se encuentra un dato de tipo bit. Por ejemplo 20H en la instruccin SETB 20H. Direcciones de programa (cdigo). Indican la posicin de la memoria en la que se encuentra una instruccin. Por ejemplo el nmero 346 en la instruccin AJMP 346.

Ejemplos MOV AL, [1000] Esta instruccin indica que se copie el valor de la porcin de la memoria que est en la ubicacin 1000 (En hexadecimal) a la parte baja del registro AX (AL). Cuando un operando es un valor de una direccin de memoria, sta direccin se escribe entre corchetes, recordar que el operando 1 es el destino y el operando 2 es el origen. Y cuando es una constante depender del ensamblador, en el caso del debug (Un programa que sirve para crear y editar aplicaciones que viene con el DOS) se interpretarn como hexadecimales, en los siguientes ejemplos se interpretar que las constantes son nmeros hexadecimales. Tambin se puede tomar un valor de la memoria apuntado por un registro, por ejemplo: MOV AL, [DI] DI est apuntado al valor que est en la memoria que ser copiado al registro AL. El nombre MOV viene de la palabra move, que es una palabra del ingls que significa mover. Justamente la instruccin mencionada significa, mover el valor apuntado por DI a AL. Tambin se puede copiar el valor de un registro a otro MOV AL, BL En este caso se copia el valor de BL a AL Igualmente se puede copiar el valor de la parte baja de un registro a la parte alta de otro registro MOV CH, DL As como tambin operar con las partes altas MOV AH, DH Inclusive se puede copiar el valor de un registro a una direccin de memoria MOV [1000], AL Igualmente apuntada la direccin de memoria a DI MOV [DI], AL Y tambin con los registros completos (Solamente completos en el procesador 8086) MOV AX, DX Tambin trabajar con los registros completos para todos los procesadores de 32 bits

MOV EBX, EDX En ste caso mueve la totalidad del registro DX a la totalidad del registro BX, en ste caso se est trabajando con los registros en forma extendida (32 bits), pero hay que tener precaucin ya que el procesador 8086 no interpretar correctamente sta instruccin (El procesador 8086 es obsoleto por sta desventaja y otras ms, por ejemplo slo puede direccionar 1 MB), adems el debug no puede interpretar sta instruccin. No se puede realizar lo siguiente porque no se pueden pasar valores en la memoria sin la intervencin de un registro, adems no se ha especificado el tamao MOV [1000], [2000] Igualmente no se puede hacer lo siguiente MOV [DI], [1000] As como tambin lo siguiente MOV [DI], [SI] Sin embargo lo siguiente es correcto MOV [1000], AX Pero no lo siguiente porque no se est especificando el tamao MOV [SI], 1F Lo correcto sera lo siguiente Si se quiere transferir un byte MOV byte [SI], 1F Si se quiere transferir una palabra (16 bits) MOV word [SI], 1F Si se quiere transferir una doble palabra (32 bits) MOV dword [SI], 1F

Direccionamientos Dado que es necesario transferir datos existen los siguientes tipos de direccionamiento. Valor de un registro Ejemplo: MOV AX, DX Constante Ejemplo: MOV BX, 1AB Valor apuntado por una constante Ejemplo: MOV AX, [1000] Apuntado por un registro de segmento y uno de offset (Solo puede ser BX, BP, DI o SI) Ejemplo: MOV CX, ES:[DI] Apuntado por DS y la suma de BX con una constante o apuntado por SS y la suma de BP con una constante Ejemplo: MOV DX, DS:[BP+1000] Apuntado por DS y la suma de DI o SI con una constante Ejemplo: MOV BX, DS:[SI+6F9] Apuntado por DS y la suma de BX y SI o BX y DI con una constante o apuntado por SS y la suma de BP y SI o BP y DI con una constante. MOV AX, DS:[BX][SI]+1FB9 MOV DX, SS:[BP][DI]+C9F8

CONCLUSIN Los computadores que conocemos, an no estn diseados para comprender nuestro idioma tal como un humano lo hace, son mquinas y por lo tanto necesitan un lenguaje especfico reducido y abstracto que permita la comunicacin eficaz entre el hombre y ellas. Adems, necesitan interpretar todas las instrucciones que reciben. A causa de la dificultad de comunicacin entre el computador y el programador, hemos visto aparecer varios lenguajes que permiten dar instrucciones al computador que hacen posible la comunicacin entre el hombre y los computadores, en nuestro caso con los microprocesadores, utilizando trminos y smbolos relacionados con el tipo de problema que se debe resolver. Estos lenguajes permiten escribir las operaciones que son necesarias realizar para resolver problemas de un modo parecido a como se escribira convencionalmente (es decir, se redacta un algoritmo que resuelve un problema) adems se encargan de traducir el algoritmo al lenguaje mquina (proceso conocido como compilacin) con lo que se le confiere al programa la capacidad de correr (ser ejecutado) en el computador. El computador es en realidad tan slo una mquina virtual, capaz de resolver todos los problemas que los usuarios seamos capaces de expresar mediante un algoritmo (programa).

BIBLIOGRAFA 1. http://es.wikipedia.org/wiki/Lenguaje_ensamblador_x86 2. http://es.wikipedia.org/wiki/Lenguaje_ensamblador 3. http://es.wikibooks.org/wiki/Programaci%C3%B3n_en_lenguaje_ensamblador/Primeros _conceptos 4. http://www.monografias.com/trabajos14/lenguaje-ensamblador/lenguaje-ensamblador.shtml 5. http://www.phatcode.net/res/226/files/pcasm-book-spanish.pdf 6. http://www.dte.us.es/tec_inf/itis/estr_comp/docweb/tema4/tema4ec-3.pdf 7. http://www.itescam.edu.mx/principal/sylabus/fpdb/recursos/r30015.PDF 8. http://es.scribd.com/doc/38641319/Normas-APA-2008 9. http://html.rincondelvago.com/lenguajes-de-programacion_historia-y-evolucion.html

You might also like