21
Lenguaje de máquina del Intel 8088. El código de máquina en hexadecimal se resalta en rojo, el equivalente en lenguaje assembler en magenta, y las direcciones de memoria donde se encuentra el código, en azul. Abajo se ve un texto en hexadecimal y ASCII. Lenguaje ensamblador De Wikipedia, la enciclopedia libre También ver: Ensamblador El lenguaje ensamblador, o assembler (assembly language en inglés ) es un lenguaje de programación de bajo nivel para los computadores, microprocesadores, microcontroladores, y otros circuitos integrados programables. Implementa una representación simbólica de los códigos de máquina binarios y otras constantes necesarias para programar una arquitectura dada de CPU y constituye la representación más directa del código máquina específico para cada arquitectura legible por un programador. Esta representación es usualmente definida por el fabricante de hardware, y está basada en los mnemónicos que simbolizan los pasos de procesamiento (las instrucciones), los registros del procesador, las posiciones de memoria, y otras características del lenguaje. Un lenguaje ensamblador es por lo tanto específico a cierta arquitectura de computador física (o virtual). Esto está en contraste con la mayoría de los lenguajes de programación de alto nivel, que, idealmente son portables. Un programa utilitario llamado ensamblador es usado para traducir sentencias del lenguaje ensamblador al código de máquina del computador objetivo. El ensamblador realiza una traducción más o menos isomorfa (un mapeo de uno a uno) desde las sentencias mnemónicas a las instrucciones y datos de máquina. Esto está en contraste con los lenguajes de alto nivel, en los cuales una sola declaración generalmente da lugar a muchas instrucciones de máquina. Muchos sofisticados ensambladores ofrecen mecanismos adicionales para facilitar el desarrollo del programa, controlar el proceso de ensamblaje, y la ayuda de depuración. Particularmente, la mayoría de los ensambladores modernos incluyen una facilidad de macro (descrita más abajo), y son llamados macro ensambladores. Fue usado principalmente en los inicios del desarrollo de software, cuando aún no se contaba con potentes lenguajes de alto nivel y los recursos eran limitados. Actualmente se utiliza con frecuencia en ambientes académicos y de investigación, especialmente cuando se requiere la manipulación directa de hardware, altos rendimientos, o un uso de recursos controlado y reducido. Muchos dispositivos programables (como los microcontroladores) aún cuentan con el ensamblador como la única manera de ser manipulados. Lenguaje ensamblador - Wikipedia, la enciclopedia libre http://es.wikipedia.org/wiki/Lenguaje_ensamblador 1 de 21 17/02/11 12:20 PM

Lenguaje Ensamblador - Wikipedia, La Enciclopedia Libre

Embed Size (px)

DESCRIPTION

lenguaje ensamblador

Citation preview

  • Lenguaje de mquina del Intel 8088. El cdigo de mquina enhexadecimal se resalta en rojo, el equivalente en lenguaje assembleren magenta, y las direcciones de memoria donde se encuentra elcdigo, en azul. Abajo se ve un texto en hexadecimal y ASCII.

    Lenguaje ensambladorDe Wikipedia, la enciclopedia libre

    Tambin ver: Ensamblador

    El lenguaje ensamblador, oassembler (assembly language eningls ) es un lenguaje deprogramacin de bajo nivel para loscomputadores, microprocesadores,microcontroladores, y otros circuitosintegrados programables.Implementa una representacinsimblica de los cdigos de mquinabinarios y otras constantes necesariaspara programar una arquitecturadada de CPU y constituye larepresentacin ms directa del cdigo mquina especfico para cada arquitectura legible por unprogramador. Esta representacin es usualmente definida por el fabricante de hardware, y est basada enlos mnemnicos que simbolizan los pasos de procesamiento (las instrucciones), los registros delprocesador, las posiciones de memoria, y otras caractersticas del lenguaje. Un lenguaje ensamblador espor lo tanto especfico a cierta arquitectura de computador fsica (o virtual). Esto est en contraste con lamayora de los lenguajes de programacin de alto nivel, que, idealmente son portables.

    Un programa utilitario llamado ensamblador es usado para traducir sentencias del lenguaje ensambladoral cdigo de mquina del computador objetivo. El ensamblador realiza una traduccin ms o menosisomorfa (un mapeo de uno a uno) desde las sentencias mnemnicas a las instrucciones y datos demquina. Esto est en contraste con los lenguajes de alto nivel, en los cuales una sola declaracingeneralmente da lugar a muchas instrucciones de mquina.

    Muchos sofisticados ensambladores ofrecen mecanismos adicionales para facilitar el desarrollo delprograma, controlar el proceso de ensamblaje, y la ayuda de depuracin. Particularmente, la mayora delos ensambladores modernos incluyen una facilidad de macro (descrita ms abajo), y son llamadosmacro ensambladores.

    Fue usado principalmente en los inicios del desarrollo de software, cuando an no se contaba conpotentes lenguajes de alto nivel y los recursos eran limitados. Actualmente se utiliza con frecuencia enambientes acadmicos y de investigacin, especialmente cuando se requiere la manipulacin directa dehardware, altos rendimientos, o un uso de recursos controlado y reducido.

    Muchos dispositivos programables (como los microcontroladores) an cuentan con el ensambladorcomo la nica manera de ser manipulados.

    Lenguaje ensamblador - Wikipedia, la enciclopedia libre http://es.wikipedia.org/wiki/Lenguaje_ensamblador

    1 de 21 17/02/11 12:20 PM

  • Contenido1 Caractersticas2 Programa ensamblador

    2.1 Nmero de pasos2.2 Ensambladores de alto nivel2.3 Uso del trmino

    3 Lenguaje3.1 Instrucciones de CPU3.2 Ensamblado3.3 Ejemplo

    4 Diseo del lenguaje4.1 Elementos bsicos

    4.1.1 Mnemnicos de opcode y mnemnicos extendidos4.1.2 Secciones de datos4.1.3 Directivas del ensamblador

    4.2 Macros4.3 Soporte para programacin estructurada

    5 Uso del lenguaje ensamblador5.1 Perspectiva histrica5.2 Uso actual5.3 Aplicaciones tpicas

    6 Detalles adicionales7 Ejemplos de lenguaje ensamblador

    7.1 Ejemplo para la arquitectura x867.2 Ejemplo para el computador virtual (POCA)7.3 Ejemplo para el C Intel 80517.4 Ejemplo para el Microchip PIC16F84

    8 Referencias9 Lectura adicional10 Vase tambin11 Enlaces externos

    CaractersticasEl cdigo escrito en lenguaje ensamblador posee una cierta dificultad de ser entendido ya que suestructura 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 unmicroprocesador, puede necesitar ser modificado, para poder ser usado en otra mquina distinta.Al cambiar a una mquina con arquitectura diferente, generalmente es necesario reescribirlocompletamente.Los programas hechos, por un programador experto, en lenguaje ensamblador, son generalmentemucho ms rpidos y consumen menos recursos del sistema (memoria RAM y ROM.) que el

    Lenguaje ensamblador - Wikipedia, la enciclopedia libre http://es.wikipedia.org/wiki/Lenguaje_ensamblador

    2 de 21 17/02/11 12:20 PM

  • programa equivalente compilado desde un lenguaje de alto nivel. Al programar cuidadosamenteen lenguaje ensamblador se pueden crear programas que se ejecutan ms rpidamente y ocupanmenos espacio que con lenguajes de alto nivel.Con el lenguaje ensamblador se tiene un control muy preciso de las tareas realizadas por unmicroprocesador por lo que se pueden crear segmentos de cdigo difciles y/o muy ineficientes deprogramar en un lenguaje de alto nivel, ya que, entre otras cosas, en el lenguaje ensamblador sedispone de instrucciones del CPU que generalmente no estn disponibles en los lenguajes de altonivel.Tambin se puede controlar el tiempo en que tarda una rutina en ejecutarse, e impedir que seinterrumpa durante su ejecucin.

    Programa ensambladorTpicamente, un programa ensamblador (assembler en ingls) moderno crea cdigo objeto traduciendoinstrucciones mnemnicas de lenguaje ensamblador en opcodes, y resolviendo los nombres simblicospara las localizaciones de memoria y otras entidades.1 El uso de referencias simblicas es unacaracterstica clave del lenguaje ensamblador, evitando tediosos clculos y actualizaciones manuales delas direcciones despus de cada modificacin del programa. La mayora de los ensambladores tambinincluyen facilidades de macros para realizar sustitucin textual - ej. generar cortas secuencias deinstrucciones como expansin en lnea en vez de llamar a subrutinas.

    Los ensambladores son generalmente ms simples de escribir que los compiladores para los lenguajes dealto nivel, y han estado disponibles desde los aos 1950. Los ensambladores modernos, especialmentepara las arquitecturas basadas en RISC, tales como MIPS, Sun SPARC, y HP PA-RISC, as comotambin para el x86 (-64), optimizan la planificacin de instrucciones para explotar la segmentacin delCPU eficientemente.

    En los compiladores para lenguajes de alto nivel, son el ltimo paso antes de generar el cdigoejecutable.

    Nmero de pasosHay dos tipos de ensambladores basados en cuntos pasos a travs de la fuente son necesarios paraproducir el programa ejecutable.

    Los ensambladores de un solo paso pasan a travs del cdigo fuente una vez y asumen que todoslos smbolos sern definidos antes de cualquier instruccin que los refiera.Los ensambladores del dos paso crean una tabla con todos los smbolos y sus valores en el primerpaso, despus usan la tabla en un segundo paso para generar cdigo. El ensamblador debe por lomenos poder determinar la longitud de cada instruccin en el primer paso para que puedan sercalculadas las direcciones de los smbolos.

    La ventaja de un ensamblador de un solo paso es la velocidad, que no es tan importante como lo fue enun momento dados los avances en velocidad y capacidades del computador. La ventaja del ensambladorde dos pasos es que los smbolos pueden ser definidos dondequiera en el cdigo fuente del programa.Esto permite a los programas ser definidos de maneras ms lgicas y ms significativas, haciendo losprogramas de ensamblador de dos paso ms fciles leer y mantener.2

    Lenguaje ensamblador - Wikipedia, la enciclopedia libre http://es.wikipedia.org/wiki/Lenguaje_ensamblador

    3 de 21 17/02/11 12:20 PM

  • Ensambladores de alto nivelLos ms sofisticados ensambladores de alto nivel proporcionan abstracciones del lenguaje tales como:

    Estructuras de control avanzadasDeclaraciones e invocaciones de procedimientos/funciones de alto nivelTipos de datos abstractos de alto nivel, incluyendo las estructuras/records, uniones, clases, yconjuntosProcesamiento de macros sofisticado (aunque est disponible en los ensambladores ordinariosdesde finales 1960 para el IBM/360, entre otras mquinas)Caractersticas de programacin orientada a objetos

    Uso del trminoNote que, en el uso profesional normal, el trmino ensamblador es frecuentemente usado tanto parareferirse al lenguaje ensamblador como tambin al programa ensamblador (que convierte el cdigofuente escrito en el lenguaje ensamblador a cdigo objeto que luego ser enlazado para producirlenguaje de mquina). Las dos expresiones siguientes utilizan el trmino "ensamblador":

    "El CP/CMS fue escrito en ensamblador del IBM S/360""El ASM-H fue un ensamblador del S/370 ampliamente usado"

    La primera se refiere al lenguaje y la segundo se refiere al programa.

    LenguajeEl lenguaje ensamblador refleja directamente la arquitectura y las instrucciones en lenguaje de mquinadel CPU, y pueden ser muy diferentes de una arquitectura de CPU a otra. Cada arquitectura demicroprocesador tiene su propio lenguaje de mquina, y en consecuencia su propio lenguajeensamblador ya que este se encuentra muy ligado al la estructura del hardware para el cual se programa.Los microprocesadores difieren en el tipo y nmero de operaciones que soportan; tambin pueden tenerdiferente cantidad de registros, y distinta representacin de los tipos de datos en memoria. Aunque lamayora de los microprocesadores son capaces de cumplir esencialmente las mismas funciones, la formaen que lo hacen difiere y los respectivos lenguajes ensamblador reflejan tal diferencia.

    Instrucciones de CPULa mayora de los CPU tienen ms o menos los mismos grupos de instrucciones, aunque nonecesariamente tienen todas las instrucciones de cada grupo. Las operaciones que se pueden realizarvaran de un CPU a otro. Un CPU particular puede tener instrucciones que no tenga otro y viceversa.Los primeros microprocesadores de 8 bits no tenan operaciones para multiplicar o dividir nmeros, porejemplo, y haba que hacer subrutinas para realizar esas operaciones. Otros CPU puede que no tenganoperaciones de punto flotante y habra que hacer o conseguir bibliotecas que realicen esas operaciones.

    Las instrucciones del CPU pueden agruparse, de acuerdo a su funcionalidad, en:

    Operaciones con enteros: (de 8, 16, 32 y 64 bits dependiendo de la arquitectura del CPU)

    Lenguaje ensamblador - Wikipedia, la enciclopedia libre http://es.wikipedia.org/wiki/Lenguaje_ensamblador

    4 de 21 17/02/11 12:20 PM

  • Estas son operaciones realizadas por la Unidad aritmtico lgica del CPU

    Operaciones aritmticas. Como suma, resta, multiplicacin, divisin, mdulo, cambio de signoOperaciones booleanas. Operaciones lgicas bit a bit como AND, OR, XOR, NOTOperaciones de bits. Como desplazamiento y rotaciones de bits (hacia la derecha o hacia laizquierda, a travs del bit del acarreo o sin l)Comparaciones

    Operaciones de mover datos:

    Entre los registros y la memoria:

    Aunque la instruccin se llama "mover", en el CPU, "mover datos" significa en realidad copiardatos, desde un origen a un destino, sin que el dato desaparezca del origen.

    Se pueden mover valores:desde un registro a otrodesde un registro a un lugar de la memoriadesde un lugar de la memoria a un registrodesde un lugar a otro de la memoriaun valor inmediato a un registroun valor inmediato a un lugar de memoria

    Operaciones de stack:

    PUSH (escribe datos hacia el tope del stack)POP (lee datos desde el tope del stack)

    Operaciones de entrada/salida:

    Son operaciones que mueven datos de un registro, desde y hacia un puerto; o de la memoria, desdey hacia un puerto

    INPUT Lectura desde un puerto de entradaOUTPUT Escritura hacia un puerto de salida

    Operaciones para el control del flujo del programa:

    Llamadas y retornos de subrutinasLlamadas y retornos de interrupcionesSaltos condicionales de acuerdo al resultado de la comparacionesSaltos incondicionales

    Operaciones con nmeros reales:

    El estndar para las operaciones con nmeros reales en los CPU est definido por el IEEE 754.

    Un CPU puede tener operaciones de punto flotante con nmeros reales mediante el coprocesadornumrico (si lo hay), como las siguientes:

    Lenguaje ensamblador - Wikipedia, la enciclopedia libre http://es.wikipedia.org/wiki/Lenguaje_ensamblador

    5 de 21 17/02/11 12:20 PM

  • Operaciones aritmticas. Suma, resta, multiplicacin, divisin, cambio de signo, valor absoluto,parte enteraOperaciones trascendentales

    Operaciones trigonomtricas. Seno, coseno, tangente, arcotangenteOperaciones con logaritmos, potencias y races

    Otras

    El lenguaje ensamblador tiene mnemnicos para cada una de las instrucciones del CPU en adicin aotros mnemnicos a ser procesados por el programa ensamblador (como por ejemplo macros y otrassentencias en tiempo de ensamblado).

    EnsambladoLa transformacin del lenguaje ensamblador en cdigo mquina la realiza un programa ensamblador, yla 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 ellenguaje de mquina. Sin embargo, en algunos casos, un ensamblador puede proveer "pseudoinstrucciones" que se expanden en un cdigo de mquina ms extenso a fin de proveer la funcionalidadnecesaria y simplificar la programacin. Por ejemplo, para un cdigo mquina condicional como "si Xmayor 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 tambinproveen un rico lenguaje de macros que se utiliza para generar cdigo ms complejo y secuencias dedatos.

    Para el mismo procesador y el mismo conjunto de instrucciones de CPU, diferentes programasensambladores pueden tener, cada uno de ellos, variaciones y diferencias en el conjunto de mnemnicoso en la sintaxis de su lenguaje ensamblador. Por ejemplo, en un lenguaje ensamblador para laarquitectura x86, se puede expresar la instruccin para mover 5 al registro AL de la siguiente manera: MOVAL, 5, mientras que para otro ensamblador para la misma arquitectura se expresara al revs: MOV 5,AL. Ambos lenguajes ensambladores haran exactamente lo mismo, solo que est expresado de maneradiferente. El primero usa la sintaxis de Intel, mientras que el segundo usa la sintaxis de AT&T

    El uso del ensamblador no resuelve definitivamente el problema de cmo programar un sistema basadoen microprocesador de modo sencillo ya que para hacer un uso eficiente del mismo, hay que conocer afondo el microprocesador, los registros de trabajo de que dispone, la estructura de la memoria, y muchascosas ms referentes a su estructura bsica de funcionamiento.

    EjemploUn programa escrito en lenguaje ensamblador consiste en una serie de instrucciones que corresponden alflujo de rdenes ejecutables por un microprocesador.

    Por ejemplo, en el lenguaje ensamblador para un procesador x86:

    La sentencia

    MOV AL, 061h

    Lenguaje ensamblador - Wikipedia, la enciclopedia libre http://es.wikipedia.org/wiki/Lenguaje_ensamblador

    6 de 21 17/02/11 12:20 PM

  • Asigna el valor hexadecimal 61 (97 decimal) al registro "AL".

    El programa ensamblador lee la sentencia de arriba y produce su equivalente binario en lenguaje demquina

    Binario: 10110000 01100001 (hexadecimal: B061)

    El mnemnico MOV es un cdigo de operacin u "opcode". El opcode es seguido por una lista deargumentos o parmetros, completando una tpica instruccin de ensamblador. En el ejemplo, AL es unregistro de 8 bits del procesador, al cual se le asignar el valor hexadecimal 61 especificado.

    El cdigo de mquina generado por el ensamblador consiste de 2 bytes. El primer byte contieneempaquetado la instruccin MOV y el cdigo del registro hacia donde se va a mover el dato:

    10110 000 01100001 | | | | | +---- Nmero 61h en binario | | | +--- Registro AL +-------- Intruccin MOV

    En el segundo byte se especifica el nmero 61h, escrito en binario como 01100001, que se asignar alregistro AL, quedando la sentencia ejecutable como:

    10110000 01100001

    La cual puede ser entendida y ejecutada directamente por el procesador.

    Diseo del lenguajeElementos bsicosHay un grado grande de diversidad en la manera en que los autores de los ensambladores categorizan lassentencias y en la nomenclatura que usan. En particular, algunos describen cualquier cosa como pseudo-operacin (pseudo-Op), con excepcin del mnemnico de mquina o del mnemnico extendido.

    Un tpico lenguaje ensamblador consiste en 3 tipos de sentencias de instruccin que son usadas paradefinir las operaciones del programa:

    Mnemnicos de opcodeSecciones de datosDirectivas de ensamblador

    Mnemnicos de opcode y mnemnicos extendidos

    A diferencia de las instrucciones (sentencias) de los lenguajes de alto nivel, instrucciones en el lenguajeensamblador son generalmente muy simples. Generalmente, una mnemnico es un nombre simblicopara una sola instruccin en lenguaje de mquina ejecutable (un opcode), y hay por lo menos un

    Lenguaje ensamblador - Wikipedia, la enciclopedia libre http://es.wikipedia.org/wiki/Lenguaje_ensamblador

    7 de 21 17/02/11 12:20 PM

  • mnemnico de opcode definido para cada instruccin en lenguaje de mquina. Cada instruccin consistetpicamente en una operacin u opcode ms cero o ms operandos. La mayora de las instruccionesrefieren a un solo valor, o a un par de valores. Los operandos pueden ser inmediatos (tpicamente valoresde un byte, codificados en la propia instruccin), registros especificados en la instruccin, implcitos olas direcciones de los datos localizados en otra parte de la memoria. Esto est determinado por laarquitectura subyacente del procesador, el ensamblador simplemente refleja cmo trabaja estaarquitectura. Los mnemnicos extendidos son frecuentemente usados para especificar una combinacinde un opcode con un operando especfico, ej, el ensamblador del System/360 usa a B como unmnemnico extendido para el BC con una mscara de 15 y NOP al BC con una mscara de 0.

    Los mnemnicos extendidos son frecuentemente usados para soportar usos especializados deinstrucciones, a menudo para propsitos no obvios con respecto al nombre de la instruccin. Porejemplo, muchos CPU no tienen una instruccin explcita de NOP (No Operacin), pero tieneninstrucciones que puedan ser usadas para tal propsito. En el CPU 8086, la instruccin XCHG AX,AX(intercambia el registro AX consigo mismo) es usada para el NOP, con NOP siendo un pseudo-opcode paracodificar la instruccin XCHG AX,AX. Algunos desensambladores reconocen esto y decodificarn lainstruccin XCHG AX,AX como NOP. Similarmente, los ensambladores de IBM para el System/360 usanlos mnemnicos extendidos NOP y NOPR con las mscaras cero para BC y BCR.

    Algunos ensambladores tambin soportan simples macroinstrucciones incorporadas que generan dos oms instrucciones de mquina. Por ejemplo, con algunos ensambladores para el Z80, la instruccin

    LD HL, BC

    genera las instrucciones

    LD L, C

    LD H, B.3

    LD HL, BC es un pseudo-opcode, que en este caso simula ser una instruccin de 16 bits, cuando seexpande se producen dos instrucciones de 8 bits que equivalen a la simulada de 16 bits.

    Secciones de datos

    Hay instrucciones usadas para definir elementos de datos para manejar datos y variables. Definen el tipode dato, la longitud y la alineacin de los datos. Estas instrucciones tambin pueden definir si los datosestn disponibles para programas exteriores (programas ensamblados separadamente) o solamente parael programa en el cual la seccin de datos est definida. Algunos ensambladores clasifican estasinstrucciones como pseudo-ops.

    Directivas del ensamblador

    Los directivas del ensamblador, tambin llamadas los pseudo opcodes, pseudo-operaciones opseudo-ops, son instrucciones que son ejecutadas por un ensamblador en el tiempo de ensamblado, nopor un CPU en el tiempo de ejecucin. Pueden hacer al ensamblado del programa dependiente deparmetros entrados por un programador, de modo que un programa pueda ser ensamblado de diferentesmaneras, quizs para diversos aplicaciones. Tambin pueden ser usadas para manipular la presentacin

    Lenguaje ensamblador - Wikipedia, la enciclopedia libre http://es.wikipedia.org/wiki/Lenguaje_ensamblador

    8 de 21 17/02/11 12:20 PM

  • de un programa para hacerlo ms fcil leer y mantener.

    Por ejemplo, las directivas pudieran ser usadas para reservar reas de almacenamiento y opcionalmentesu para asignar su contenido inicial. Los nombres de las directivas a menudo comienzan con un puntopara distinguirlas de las instrucciones de mquina.

    Los ensambladores simblicos le permiten a los programadores asociar nombres arbitrarios (etiquetas osmbolos) a posiciones de memoria. Usualmente, cada constante y variable tiene un nombre para que lasinstrucciones pueden referir a esas ubicaciones por nombre, as promoviendo el cdigoautodocumentado. En el cdigo ejecutable, el nombre de cada subprograma es asociado a su punto deentrada, as que cualquier llamada a un subprograma puede usar su nombre. Dentro de subprogramas, alos destinos GOTO se le dan etiquetas. Algunos ensambladores soportan smbolos locales que sonlxicamente distintos de los smbolos normales (ej, el uso de "10$" como un destino GOTO).

    La mayoraPlantilla:Dubious de los ensambladores proporcionan un manejo flexible de smbolos,permitiendo a los programadores manejar diversos espacios de nombres, calcular automticamenteoffsets dentro de estructuras de datos, y asignar etiquetas que refieren a valores literales o al resultado declculos simples realizados por el ensamblador. Las etiquetas tambin pueden ser usadas para inicializarconstantes y variables con direcciones relocalizables.

    Los lenguajes ensambladores, como la mayora de los otros lenguajes de computador, permiten quecomentarios sean aadidos al cdigo fuente, que son ignorados por el programa ensamblador. El buenuso de los comentarios es an ms importante con cdigo ensamblador que con lenguajes de alto nivel,pues el significado y el propsito de una secuencia de instrucciones es ms duro de descifrar a partir delcdigo en s mismo.

    El uso sabio de estas facilidades puede simplificar grandemente los problemas de codificar y mantener elcdigo de bajo nivel. El cdigo fuente de lenguaje ensamblador crudo generado por compiladores odesensambladores - cdigo sin ningn comentario, ni smbolos con algn sentido, ni definiciones dedatos - es muy difcil de leer cuando deben hacerse cambios.

    MacrosMuchos ensambladores soportan macros predefinidos, y otras soportan macros definidos (yrepetidamente redefinibles) por el programador que implican secuencias de lneas del texto en las cualeslas variables y las constantes estn empotradas. Esta secuencia de lneas de texto puede incluir opcodes odirectivas. Una vez un macro ha sido definido, su nombre puede ser usado en lugar de un mnemnico.Cuando el ensamblador procesa tal sentencia, reemplaza la sentencia por las lneas del texto asociadas aese macro, entonces las procesa como si hubieran existido en el archivo del cdigo fuente original(incluyendo, en algunos ensambladores, la expansin de cualquier macro que exista en el texto dereemplazo).

    Puesto que las macros pueden tener nombres "cortos" pero se expanden a varias o de hecho muchaslneas de cdigo, pueden ser usados para hacer que los programas en lenguaje ensamblador parezcan sermucho ms cortos, requiriendo menos lneas de cdigo fuente, como sucede con los lenguajes de altonivel. Tambin pueden ser usados para aadir niveles de estructura ms altos a los programasensamblador, opcionalmente introducen cdigo de depuracin empotrado va parmetros y otrascaractersticas similares.

    Lenguaje ensamblador - Wikipedia, la enciclopedia libre http://es.wikipedia.org/wiki/Lenguaje_ensamblador

    9 de 21 17/02/11 12:20 PM

  • Muchos ensambladores tienen macros incorporados (o predefinidos) para las llamadas de sistema y otrassecuencias especiales de cdigo, tales como la generacin y el almacenamiento de los datos realizados atravs de avanzadas operaciones bitwise y booleanas usadas en juegos, software de seguridad, gestin dedatos, y criptografa.

    Los macro ensambladores a menudo permiten a los macros tomar parmetros. Algunos ensambladoresincluyen lenguajes macro muy sofisticados, incorporando elementos de lenguajes de alto nivel talescomo parmetros opcionales, variables simblicas, condiciones, manipulaciones de strings operacionesaritmticas, todos usables durante la ejecucin de un macro dado, y permitiendo a los macros guardar elcontexto o intercambiar informacin. As un macro puede generar un gran nmero de instrucciones odefiniciones de datos en lenguaje ensamblador, basadas en los argumentos del macro. Esto pudiera serusado para generar, por ejemplo, estructuras de datos de estilo de records o bucles "desenrrollados", opodra generar algoritmos enteros basados en parmetros complejos. Una organizacin, usando lenguajeensamblador, que ha sido fuertemente extendido usando tal suite de macros, puede ser considerada quese est trabajando en un lenguaje de alto nivel, puesto que tales programadores no estn trabajando conlos elementos conceptuales de ms bajo nivel del computador.

    Las macros fueron usados para adaptar sistemas de software de gran escala para clientes especficos enla era del mainframe, y tambin fueron usados por el personal del cliente para satisfacer las necesidadesde sus patrones haciendo versiones especficas de los sistemas operativos del fabricante. Esto fue hecho,por ejemplo, por los programadores de sistema que trabajaban con el Conversational Monitor System /Virtual Machine (CMS/VM) de IBM y con los add-ons "real time transaction processing" de IBM,CICS, Customer Information Control System, y ACP/TPF, el airline/financial system que comenz enlos aos 1970 y todava corre con muchos sistemas de reservaciones computarizados (CRS) y sistemasde tarjeta de crdito de hoy.

    Tambin es posible usar solamente las habilidades de procesamiento de macros de un ensamblador paragenerar cdigo escrito en lenguajes completamente diferentes, por ejemplo, para generar una versin deun programa en COBOL usando un programa macro ensamblador puro conteniendo lneas de cdigoCOBOL dentro de operadores de tiempo ensamblaje dando instrucciones al ensamblador para generarcdigo arbitrario.

    Esto era porque, como en los aos 1970 fue observado, el concepto de "procesamiento de macro" esindependiente del concepto de "ensamblaje", siendo el anterior, en trminos modernos, ms unprocesamiento de textos, que una generacin de cdigo objeto. El concepto de procesamiento de macroapareci, y aparece, en el lenguaje de programacin C, que soporta "instrucciones de preprocesador" defijar variables, y hace pruebas condicionales en sus valores. Observe que a diferencia de ciertosmacroprocesadores previos dentro de los ensambladores, el preprocesador de C no es Turing-completoporque careca la capacidad de bucle o "go to", esto ltimo permitiendo a los programas hacer bucles.

    A pesar del poder del procesamiento macro, ste dej de usarse en muchos lenguajes de alto nivel (unaimportante excepcin es C/C++) mientras que segua siendo perenne para los ensambladores. Esto eraporque muchos programadores estaban bastante confundidos por la sustitucin de parmetros macro yno distinguan la diferencia entre procesamiento macro, el ensamblaje y la ejecucin.Plantilla:Dubious

    La sustitucin de parmetros macro es estrictamente por nombre: en el tiempo de procesamiento macro,el valor de un parmetro es sustituido textualmente por su nombre. La clase ms famosa de bugsresultantes era el uso de un parmetro que en s mismo era una expresin y no un nombre primario

    Lenguaje ensamblador - Wikipedia, la enciclopedia libre http://es.wikipedia.org/wiki/Lenguaje_ensamblador

    10 de 21 17/02/11 12:20 PM

  • cuando el escritor macro esperaba un nombre. En el macro:

    foo: macro aload a*b

    la intencin era que la rutina que llama proporcionara el nombre de una variable, y la variable oconstante "global" b sera usada para multiplicar a "a". Si foo es llamado con el parmetro a-c, ocurre laexpansin macro load a-c*b. Para evitar cualquier posible ambigedad, los usuarios de macroprocesadores pueden encerrar en parntesis los parmetros formales dentro de las definiciones demacros, o las rutinas que llaman pueden envolver en parntesis los parmetos de entrada.4 As, el macrocorrecto, con los parntesis, sera:

    foo: macro aload (a)*b

    y su expansin, dara como resultado: load (a-c)*b

    El PL/I y el C/C++ ofrecen macros, pero la esta facilidad solo puede manipular texto. Por otra parte, loslenguajes homoicnicos, tales como Lisp, Prolog, y Forth, retienen el poder de los macros de lenguajeensamblador porque pueden manipular su propio cdigo como datos.

    Soporte para programacin estructuradaAlgunos ensambladores han incorporado elementos de programacin estructurada para codificar el flujode la ejecucin. El ejemplo ms temprano de este acercamiento estaba en el Concept-14 macro set,originalmente propuesto por el Dr. H.D. Mills (marzo de 1970), e implementado por Marvin Kessler enla Federal Systems Division de IBM, que extendi el macro ensamblador del S/360 con bloques decontrol de flujo IF/ELSE/ENDIF y similares.5 Esto era una manera de reducir o eliminar el uso deoperaciones GOTO en el cdigo en lenguaje ensamblador, uno de los principales factores que causabancdigo espagueti en el lenguaje ensamblador. Este acercamiento fue ampliamente aceptado a principiosde los aos 1980 (los ltimos das del uso de lenguaje ensamblador en gran escala).

    Un curioso diseo fue A-natural, un ensamblador "orientado a la corriente" (stream-oriented) para losprocesadores 8080/Z80[cita requerida] de Whitesmiths Ltd. (desarrolladores del sistema operativo Idris,similar al Unix), y lo que fue reportado como el primer compilador C comercial). El lenguaje fueclasificado como un ensamblador, porque trabajaba con elementos de mquina crudos tales comoopcodes, registros, y referencias de memoria; pero incorporaba una sintaxis de expresin para indicar elorden de ejecucin. Los parntesis y otros smbolos especiales, junto con construcciones deprogramacin estructurada orientadas a bloques, controlaban la secuencia de las instrucciones generadas.A-natural fue construido como el lenguaje objeto de un compilador C, en vez de la codificacin manual,pero su sintaxis lgica gan algunos seguidores.

    Ha habido poca demanda aparente para ensambladores ms sofisticados debido a la declinacin deldesarrollo de lenguaje ensamblador de larga escala.6 A pesar de eso, todava se estn desarrollando yaplicando en casos donde las limitaciones de recursos o las particularidades en la arquitectura de sistemaobjetivo previenen el efectivo uso de lenguajes de alto nivel.7

    Lenguaje ensamblador - Wikipedia, la enciclopedia libre http://es.wikipedia.org/wiki/Lenguaje_ensamblador

    11 de 21 17/02/11 12:20 PM

  • Uso del lenguaje ensambladorPerspectiva histricaLos lenguajes ensambladores fueron primero desarrollados en los aos 1950, cuando fueron referidoscomo lenguajes de programacin de segunda generacin. Por ejemplo, el SOAP (Symbolic OptimalAssembly Program) era un lenguaje ensamblador de 1957 para el computador IBM 650. Los lenguajesensambladores eliminaron mucha de la propensin a errores y del consumo de tiempo de laprogramacin de los lenguajes de primera generacin que se necesitaba con los primeros computadores,liberando a los programadores del tedio tal como recordar cdigos numricos y clculo de direcciones.Una vez fueron ampliamente usados para todo tipo de programacin. Sin embargo, por los aos 1980(1990 en los microcomputadores), su uso haba sido en gran parte suplantado por los lenguajes de altonivel,[cita requerida] en la bsqueda de una mejorada productividad en programacin. Hoy en da, aunqueel lenguaje ensamblador es casi siempre manejado y generado por los compiladores, todava se usa parala manipulacin directa del hardware, acceso a instrucciones especializadas del procesador, o pararesolver problemas de desempeo crtio. Los usos tpicos son drivers de dispositivo, sistemas embebidosde bajo nivel, y sistemas de tiempo real.

    Histricamente, un gran nmero de programas han sido escritos enteramente en lenguaje ensamblador.Los sistemas operativos fueron casi exclusivamente escritos en lenguaje ensamblador hasta la aceptacinmplia del lenguaje de programacin C en los aos 1970 y principios de los 1980. Tambin, muchasaplicaciones comerciales fueron escritas en lenguaje ensamblador, incluyendo una gran cantidad delsoftware escrito por grandes corporaciones para mainframes de IBM. Los lenguajes COBOL yFORTRAN eventualmente desplazaron mucho de este trabajo, aunque un nmero de organizacionesgrandes conservaran las infraestructuras de aplicaciones en lenguaje ensamblador hasta bien entrados losaos 1990.

    La mayora de los primeros microcomputadores confiaron en el lenguaje ensamblador codificado amano, incluyendo la mayora de los sistemas operativos y de las aplicaciones grandes. Esto era porqueestos sistemas tenan limitaciones severas de recursos, impusieron idiosincrticas arquitecturas dememoria y de pantalla, y proporcionaron servicios de sistema limitados y con errores. Quizs msimportante era la falta de compiladores de primera clase de lenguajes de alto nivel adecuados para el usoen el microcomputador. Un factor psicolgico tambin pudo haber jugado un papel: la primerageneracin de programadores de los microcomputadores conserv una actitud de aficionado de"alambres y alicates".

    En un contexto ms comercial, las ms grandes razones para usar el lenguaje ensamblador era hacerprogramas con mnimo tamao, mnima sobrecarga, mayor velocidad y confiabilidad.

    Los tpicos ejemplos de programas grandes en lenguaje ensamblador de ese tiempo son los sistemasoperativos IBM PC DOS y aplicaciones tempranas tales como la hoja de clculo Lotus 1-2-3, y casitodos los juegos populares para la familia Atari 800 de computadores personales. Incluso en los aos1990, la mayora de los videojuegos de cnsola fueron escritos en ensamblador, incluyendo la mayorade los juegos para la Mega Drive/Genesis y el Super Nintendo Entertainment System.[cita requerida]Segn algunos insiders de la industria, el lenguaje ensamblador era el mejor lenguaje de programacin ausar para obtener el mejor desempeo del Sega Saturn, una cnsola para la cual era notoriamentedesafiante desarrollar y programar juegos.8 El popular juego de arcade NBA Jam (1993) es otro ejemplo.

    Lenguaje ensamblador - Wikipedia, la enciclopedia libre http://es.wikipedia.org/wiki/Lenguaje_ensamblador

    12 de 21 17/02/11 12:20 PM

  • El ensamblador ha sido por largo trecho, el lenguaje de desarrollo primario en los computadoreshogareos Commodore 64, Atari ST, as como el ZX Spectrum. Esto fue as en gran parte porque losdialectos del BASIC en estos sistemas ofrecieron insuficiente velocidad de ejecucin, as comoinsuficientes caractersticas para aprovechar completamente el hardware disponible. Algunos sistemas,ms notablemente el Amiga, incluso tienen IDEs con caractersticas de depuracin y macros altamenteavanzados, tales como el freeware ASM-One assembler (http://www.theflamearrows.info/homepage.html) , comparable a las del Microsoft Visual Studio (el ASM-Uno precede al MicrosoftVisual Studio).

    El ensamblador para el VIC-20 fue escrito por Don French y publicado por French Silk. Con 1639 bytesde longitud, su autor cree que es el ms pequeo ensamblador simblico jams escrito. El ensambladorsoportaba el direccionamiento simblico usual y la definicin de cadenas de caracteres o cadenashexadecimales. Tambin permita expresiones de direcciones que podan combinarse con lasoperaciones de adicin, substraccin, multiplicacin, divisin, AND lgico, OR lgico, yexponenciacin.9

    Uso actualHan habido siempre debates sobre la utilidad y el desempeo del lenguaje ensamblador relativo alenguajes de alto nivel. El lenguaje ensamblador tiene nichos especficos donde es importante; ver abajo.Pero, en general, los modernos compiladores de optimizacin[cita requerida] para traducir lenguajes dealto nivel en cdigo que puede correr tan rpidamente como el lenguaje ensamblador escrito a mano, apesar de los contraejemplos que pueden ser encontrados.10 11 12 La complejidad de los procesadoresmodernos y del subsistema de memoria hace la optimizacin efectiva cada vez ms difcil para loscompiladores, as como para los programadores en ensamblador.13 14 Adicionalmente, y para laconsternacin de los amantes de la eficiencia, el desempeo cada vez mayor del procesador hasignificado que la mayora de los CPU estn desocupados la mayor parte del tiempo, con retardoscausados por embotellamientos predecibles tales como operaciones de entrada/salida y paginacin dememoria. Esto ha hecho la velocidad de ejecucin cruda del cdigo un no-problema para muchosprogramadores.

    Hay algunas situaciones en las cuales los profesionales pudieran elegir utilizar el lenguaje ensamblador.Por ejemplo cuando:

    es requerido un ejecutable binario independiente (stand-alone), es decir uno que deba ejecutarsesin recursos a componentes de tiempo de ejecucin o a bibliotecas asociadas con un lenguaje dealto nivel; sta es quizs la situacin ms comn. Son programas empotrados que solo almacenanuna pequea cantidad de memoria y el dispositivo est dirigido para hacer tareas para un simplepropsito. Ejemplos consisten en telfonos, sistemas de combustible e ignicin para autombiles,sistemas de control del aire acondicionado, sistemas de seguridad, y sensoresinteractuando directamente con el hardware, por ejemplo en drivers de dispositivo y manejadoresde interrupcinusando instrucciones especficas del procesador no explotadas o disponibles por el compilador. Unejemplo comn es la instruccin de rotacin bitwise en el ncleo de muchos algoritmos de cifradocreando funciones vectorizadas para programas en lenguajes de alto nivel como C. En el lenguajede alto nivel esto es a veces ayudado por funciones intrnsecas del compilador que mapeandirectamente a los mnemnicos del SIMD, pero sin embargo resulta en una conversin de

    Lenguaje ensamblador - Wikipedia, la enciclopedia libre http://es.wikipedia.org/wiki/Lenguaje_ensamblador

    13 de 21 17/02/11 12:20 PM

  • ensamblador de uno a uno para un procesador de vector asociadoes requerida la optimizacin extrema, ej, en un bucle interno en un algoritmo intensivo en el usodel procesador. Los programadores de juegos toman ventaja de las habilidades de lascaractersticas del hardware en los sistemas, permitiendo a los juegos correr ms rpidamente.Tambin las grandes simulaciones cientficas requieren algoritmos altamente optimizados, ej,lgebra lineal con BLAS10 15 o la transformada de coseno discreta (ej, la versin SIMD enensamblador del x264,16 (una biblioteca para codificar streams de video)un sistema con severas limitaciones de recursos (ej, un sistema empotrado) debe ser codificado amano para maximizar el uso de los limitados recursos; pero esto est llegando a ser menos comna medida que el precio del procesador decrece y el desempeo mejorano existe ningn lenguaje de alto nivel, en un procesador nuevo o especializado, por ejemploescribiendo programas de tiempo real que necesitan sincronizacin y respuestas precisas, talescomo sistemas de navegacin de vuelo, y equipo mdico. Por ejemplo, en un sistema fly-by-wire(vuelo por mandos elctricos), la telemetra debe ser interpretada y hay que actuar dentro delimitaciones estrictas de tiempo. Tales sistemas deben eliminar fuentes de retrasos impredecibles,que pueden ser creados por (algunos) lenguajes interpretados, recoleccin de basura automtica,operaciones de paginacin, o multitarea preventiva. Sin embargo, algunos lenguajes de alto nivelincorporan componentes de tiempo de ejecucin e interfaces de sistema operativo que puedenintroducir tales retrasos. Elegir el ensamblador o lenguajes de bajo nivel para tales sistemas da alos programadores mayor visibilidad y control sobre el proceso de los detalleses requerido control total sobre el ambiente, en situaciones de seguridad extremadamente altadonde nada puede darse por sentado.se escriben virus de computadora, bootloaders, ciertos drivers de dispositivo, u otros elementosmuy cerca del hardware o al sistema operativo de bajo nivelse escriben simuladores del conjunto de instrucciones para monitoreo, trazado y depuracin deerrores donde la sobrecarga adicional es mantenida al mnimose hace ingeniera inversa en binarios existentes que pueden o no haber sido escritos originalmenteen un lenguaje de alto nivel, por ejemplo al crackear la proteccin anticopia del softwarepropietario.se hace ingeniera inversa y modificacin de video juegos (tambin denominado ROM hacking),que es posible por medio de varios mtodos. El ms ampliamente implementado es alterando elcdigo del programa a nivel de lenguaje ensambladorse escribe cdigo automodificable, algo para lo que el lenguaje ensamblador se presta biense escriben juegos y otros softwares para calculadoras grficas17se escribe software compilador que genera cdigo ensamblador, y por lo tanto los desarrolladoresdeben ser programadores de lenguaje ensambladorse escriben algoritmos criptogrficos que siempre deben tomar estrictamente el mismo tiempopara ejecutar, previniendo ataques de tiempo

    Sin embargo, el lenguaje ensamblador es todava enseado en la mayora de los programas de cienciasde la computacin e ingeniera electrnica. Aunque hoy en da, pocos programadores trabajanregularmente con el lenguaje ensamblador como una herramienta, los conceptos fundamentalescontinan siendo muy importantes. Tales tpicos fundamentales, como aritmtica binaria, asignacin dememoria, procesamiento del stack, codificacin de conjunto de caracteres, procesamiento deinterrupciones, y diseo de compiladores, seran duros de estudiar en detalle sin la comprensin de cmoel computador opera a nivel del hardware. Puesto que el comportamiento del computador es

    Lenguaje ensamblador - Wikipedia, la enciclopedia libre http://es.wikipedia.org/wiki/Lenguaje_ensamblador

    14 de 21 17/02/11 12:20 PM

  • fundamentalmente definido por su conjunto de instrucciones, la manera lgica de aprender talesconceptos es estudiar un lenguaje ensamblador. La mayora de los computadores modernos tienen unconjunto de instrucciones similares. Por lo tanto, estudiar un solo lenguaje ensamblador es suficientepara aprender: i) los conceptos bsicos; ii) reconocer situaciones donde el uso de lenguaje ensambladorpuede ser apropiado; y iii) ver cmo el cdigo ejecutable eficiente puede ser creado por los lenguajes dealto nivel18

    Aplicaciones tpicasEl lenguaje ensamblador hard-coded es tpicamente usado en el ROM de arranque del sistema (BIOS enlos sistemas compatible IBM PC). Este cdigo de bajo nivel es usado, entre otras cosas, para inicializary probar el hardware del sistema antes de cargar el sistema operativo, y est almacenado en el ROM.Una vez que ha tomado lugar un cierto nivel de inicializacin del hardware, la ejecucin se transfiere aotro cdigo, tpicamente escrito en lenguajes de alto nivel; pero el cdigo corriendo inmediatamentedespus de que es aplicada la energa usualmente est escrito en lenguaje ensamblador. Lo mismo escierto para los boot loaders.

    Muchos compiladores traducen lenguajes de alto nivel a lenguaje ensamblador primero, antes de lacompilacin completa, permitiendo que el cdigo en ensamblador sea visto para propsitos dedepuracin y optimizacin. Lenguajes de relativo bajo nivel, como C, con frecuencia proveen sintaxisespecial para empotrar lenguaje ensamblador en cada plataforma de hardware. El cdigo portable delsistema entonces puede usar estos componentes especficos a un procesador a travs de una interfaceuniforme.

    El lenguaje ensamblador tambin es valioso en ingeniera inversa, puesto que muchos programassolamente son distribuidos en una forma de cdigo de mquina. El cdigo de mquina es usualmentefcil de trasladar hacia lenguaje ensamblador para luego ser cuidadosamente examinado en esta forma,pero es muy difcil de trasladar hacia un lenguaje de alto nivel. Herramientas como InteractiveDisassembler, hacen uso extenso del desensamblador para tales propsitos.

    Un nicho que hace uso del lenguaje ensamblador es el demoscene. Ciertas competiciones requieren a losconcursantes restringir sus creaciones a un muy pequeo tamao (ej, 256 bytes, 1 KB, 4 KB 64 KB), yel lenguaje ensamblador es el lenguaje de preferencia para alcanzar este objetivo.19 Cuando los recursosson una preocupacin, es una necesidad la codificacin en ensamblador, especialmente en sistemasconstreidos por el procesamiento del CPU, como los primeros modelos del Amiga, y el Commodore64. El cdigo optimizado en ensamblador es escrito "a mano" por los programadores en un intento deminimizar el nmero de ciclos de CPU usados. Las limitaciones del CPU son tan grandes que cada ciclocuenta. Usar tales mtodos ha habilitado, a sistemas como el Commodore 64, para producir grficos en3D en tiempo real con efectos avanzados, una hazaa que puede ser considerada improbable o inclusoimposible para un sistema con un procesador de 0.99 MHz.[cita requerida]

    Detalles adicionalesPara un determinado computador personal, mainframe, sistema empotrado, y cnsola de juegos, tantodel pasado como del presente, ha sido escrito al menos uno, y posiblemente docenas de ensambladores.Para algunos ejemplos, vea la lista de ensambladores.

    Lenguaje ensamblador - Wikipedia, la enciclopedia libre http://es.wikipedia.org/wiki/Lenguaje_ensamblador

    15 de 21 17/02/11 12:20 PM

  • En los sistemas Unix, el ensamblador es llamado tradicionalmente as, aunque no es un simple cuerpo decdigo, siendo tpicamente escrito uno nuevo por cada port. Un nmero de variantes de Unix usan elGAS

    Dentro de los grupos de procesadores, cada ensamblador tiene su propio dialecto. A veces, algunosensambladores pueden leer el dialecto de otro, por ejemplo, TASM puede leer el viejo cdigo delMASM, pero no al revs. FASM y NASM tienen una sintaxis similar, pero cada uno soporta diferentesmacros que pueden ser difcil de trasladar de uno al otro. Las cosas bsicas son siempre las mismas, perolas caractersticas avanzadas sern diferentes20

    Tambin, los lenguajes ensambladores a veces pueden ser portables a travs de diferentes sistemasoperativos en el mismo tipo de CPU. Las convenciones de llamadas entre los sistemas operativos confrecuencia difieren ligeramente o en nada. y con cuidado es posible ganar portabilidad en el lenguajeensamblador, usualmente al enlazar con una biblioteca de lenguaje C que no cambia entre sistemasoperativos. Un simulador de conjunto de instrucciones (que idealmente sera escrito en lenguajeensamblador) puede, en teora, procesar el cdigo objeto/binario de cualquier ensamblador) para lograrla portabilidad incluso a travs de plataformas (con una sobrecargue no mayor que la de un interpretadorde bytecode tpico). Esto es esencialmente lo que logra el microcdigo cuando una plataforma dehardware cambia internamente.

    Por ejemplo, muchas cosas en libc dependen del preprocesador para hacer, al programa antes decompilar, cosas que son especficas del sistema operativo o especficas del C. De hecho, algunasfunciones y smbolos ni siquiera estn garantizados que existan fuera del preprocesador. Peor an, eltamao y el orden de los campos de las estructuras, tanto como el tamao de ciertas typedefs como off_t,no estn disponibles en lenguaje ensamblador sin la ayuda de un script de configuracin, y difierenincluso entre versiones de Linux, haciendo imposible portar llamadas de funciones en libc diferentes delos que toman simples enteros o punteros como parmetros. Para manejar estos problemas, el proyectoFASMLIB provee una biblioteca de lenguaje ensamblador portable para las plataformas Win32 y Linux,pero todava est muy incompleta.21

    Algunos lenguajes de muy alto nivel, como C y Borland Pascal, soportan ensamblado en lnea, donderelativamente secciones cortas de cdigo en ensamblador puede ser empotradas dentro del cdigo dellenguaje de alto nivel. El lenguaje Forth comnmente contiene un ensamblador usado para codificarpalabras.

    La mayora de la gente usa un emulador para depurar sus programas en lenguaje ensamblador.

    Ejemplos de lenguaje ensambladorEjemplo para la arquitectura x86El siguiente es un ejemplo del programa clsico Hola mundo escrito para la arquitectura de procesadorx86 (bajo el sistema operativo DOS).

    Lenguaje ensamblador - Wikipedia, la enciclopedia libre http://es.wikipedia.org/wiki/Lenguaje_ensamblador

    16 de 21 17/02/11 12:20 PM

  • ; ---------------------------------------------; Programa que imprime un string en la pantalla; ---------------------------------------------

    .model small ; modelo de memoria

    .stack ; segmento del stack

    .data ; segmento de datosCadena1 DB 'Hola Mundo.$' ; string a imprimir (finalizado en $).code ; segmento del cdigo

    ; ---------------------------------------------; Inicio del programa; ---------------------------------------------

    programa:MOV AX, @data ; carga en AX la direccin del segmento de datosMOV DS, AX ; mueve la direccin al registro de segmento por medio de AXMOV DX, offset Cadena1 ; mueve a DX la direccin del string a imprimirMOV AH, 9 ; AH = cdigo de la funcin del MS DOS para imprimir un string INT 21h ; llamada al MS DOS para imprimir un string en la pantallaINT 20h ; llamada al MS DOS para finalizar el programa

    end programa

    Ejemplo para el computador virtual (POCA)

    Una seleccin de instrucciones para una computadora virtual22 ) con las correspondientes direcciones dememoria en las que se ubicarn las instrucciones. Estas direcciones NO son estticas. Cada instruccinse acompaa del cdigo en lenguaje ensamblador generado (cdigo objeto) que coincide con laarquitectura de computador virtual, o conjunto de instrucciones ISA.

    Dir. Etiqueta Instruccin Cdigo mquina23.begin

    .org 2048

    a_start .equ 3000

    2048 ld length,%

    2064 be done 00000010 10000000 00000000 00000110

    2068 addcc %r1,-4,%r1 10000010 10000000 01111111 11111100

    2072 addcc %r1,%r2,%r4 10001000 10000000 01000000 00000010

    2076 ld %r4,%r5 11001010 00000001 00000000 00000000

    2080 ba loop 00010000 10111111 11111111 11111011

    2084 addcc %r3,%r5,%r3 10000110 10000000 11000000 00000101

    2088 done: jmpl %r15+4,%r0 10000001 11000011 11100000 00000100

    2092 length: 20 00000000 00000000 00000000 00010100

    2096 address: a_start 00000000 00000000 00001011 10111000

    .org a_start

    3000 a:

  • Cdigo en lenguaje ensamblador para C Intel 80C51:

    ORG 8030H T05SEG:

    SETB TR0JNB uSEG,T05SEG ;esta subrutina es utilizadaCLR TR0 ;para realizar una cuenta deCPL uSEG ;0,5 segundos mediante laMOV R1,DPL ;interrupcin del timer 0.MOV R2,DPHCJNE R2,#07H,T05SEGCJNE R1,#78H,T05SEGMOV DPTR,#0000H

    RET

    Ejemplo para el Microchip PIC16F84Cdigo en lenguaje ensamblador para el microcontrolador 16F84 de Microchip:

    ORG 0 Inicio bsf STATUS,RP0 clrf PORTB movlw 0xFF movwf PORTA bcf STATUS,RP0 Principal movf PORTA,W movwf Contador movf Contador,F btfsc STATUS,Z goto PuntoDecimal sublw d'9' btfss STATUS,C END

    Referencias David Salomon (1993). Assemblers and Loaders (http://www.davidsalomon.name/assem.advertis/asl.pdf)1. Beck, Leland L. (1996). 2. System Software: An Introduction to Systems Programming. Addison Wesley.2. http://www.z80.de/z80/z80code.htm3. Macros (C/C++), MSDN Library for Visual Studio 2008 (http://msdn.microsoft.com/en-us/library/503x3e3s%28v=VS.90%29.aspx) . Microsoft Corp.. Consultado el 2010-06-22.

    4.

    Concept 14 Macros (http://skycoast.us/pscott/software/mvs/concept14.html) . MVS Software.Consultado el May 25, 2009.

    5.

    Answers.com. assembly language: Definition and Much More from Answers.com(http://www.answers.com/topic/assembly-language?cat=technology) . Consultado el 2008-06-19.

    6.

    NESHLA: The High Level, Open Source, 6502 Assembler for the Nintendo Entertainment System7.

    Lenguaje ensamblador - Wikipedia, la enciclopedia libre http://es.wikipedia.org/wiki/Lenguaje_ensamblador

    18 de 21 17/02/11 12:20 PM

  • (http://neshla.sourceforge.net/) Eidolon's Inn : SegaBase Saturn (http://www.eidolons-inn.net/tiki-index.php?page=SegaBase+Saturn)8. Jim Lawless (2004-05-21). Speaking with Don French : The Man Behind the French Silk AssemblerTools (http://www.radiks.net/~jimbo/art/int7.htm) . Consultado el 2008-07-25.

    9.

    a b Writing the Fastest Code, by Hand, for Fun: A Human Computer Keeps Speeding Up Chips(http://www.nytimes.com/2005/11/28/technology/28super.html?_r=1) . New York Times, John Markoff(2005-11-28). Consultado el 2010-03-04.

    10.

    Bit-field-badness (http://hardwarebug.org/2010/01/30/bit-field-badness/) . hardwarebug.org(2010-01-30). Consultado el 2010-03-04.

    11.

    GCC makes a mess (http://hardwarebug.org/2009/05/13/gcc-makes-a-mess/) . hardwarebug.org(2009-05-13). Consultado el 2010-03-04.

    12.

    Randall Hyde. The Great Debate (http://webster.cs.ucr.edu/Page_TechDocs/GreatDebate/debate1.html) .Consultado el 2008-07-03.

    13.

    Code sourcery fails again (http://hardwarebug.org/2008/11/28/codesourcery-fails-again/) .hardwarebug.org (2010-01-30). Consultado el 2010-03-04.

    14.

    BLAS Benchmark-August2008 (http://eigen.tuxfamily.org/index.php?title=Benchmark-August2008) .eigen.tuxfamily.org (2008-08-01). Consultado el 2010-03-04.

    15.

    x264.git/common/x86/dct-32.asm (http://git.videolan.org/?p=x264.git;a=tree;f=common/x86;hb=HEAD). git.videolan.org (2010-09-29). Consultado el 2010-09-29.

    16.

    68K Programming in Fargo II (http://tifreakware.net/tutorials/89/a/calc/fargoii.htm) . Consultado el2008-07-03.

    17.

    Hyde, Randall (1996-09-30). Foreword ("Why would anyone learn this stuff?"), op. cit.(http://www.arl.wustl.edu/~lockwood/class/cs306/books/artofasm/fwd.html) . Consultado el 2010-03-05.

    18.

    256bytes demos archives (http://web.archive.org/web/20080211025322rn_1/www.256b.com/home.php). Consultado el 2008-07-03.

    19.

    Randall Hyde. Which Assembler is the Best? (http://webster.cs.ucr.edu/AsmTools/WhichAsm.html) .Consultado el 2007-10-19.

    20.

    "vid". FASMLIB: Features (http://fasmlib.x86asm.net/features.html) . Consultado el 2007-10-19.21. Principles of Computer Architecture (http://iiusaedu.com/~murdocca/POCA) (POCA) ARCToolscomputadora virtual disponible para descarga y ejecucin del cdigo, acceso el 24 de agosto de 2005

    22.

    Murdocca, Miles J. y Heuring, Vincent P.:Principles of Computer Architecture (2000), Prentice Hall, ISBN0-201-43664-7

    23.

    Lectura adicionalDominic Sweetman: See MIPS Run. Morgan Kaufmann Publishers, 1999. ISBN 1-55860-410-3Robert Britton: MIPS Assembly Language Programming. Prentice Hall, 2003. ISBN0-13-142044-5John Waldron: Introduction to RISC Assembly Language Programming. Addison Wesley, 1998.ISBN 0-201-39828-1ASM Community Book (http://www.asmcommunity.net/book/) "An online book full of helpfulASM info, tutorials and code examples" by the ASM CommunityJonathan Bartlett: Programming from the Ground Up(http://programminggroundup.blogspot.com/) . Bartlett Publishing, 2004. ISBN 0-9752838-4-7Also available online as PDF (http://download.savannah.gnu.org/releases-noredirect/pgubook/ProgrammingGroundUp-1-0-booksize.pdf)Paul Carter: PC Assembly Language. Free ebook, 2001.Website (http://drpaulcarter.com/pcasm/)Jeff Duntemann: Assembly Language Step-by-Step. Wiley, 2000. ISBN 0-471-37523-3Randall Hyde: The Art of Assembly Language. No Starch Press, 2003. ISBN 1-886411-97-2Draft versions available online (http://webster.cs.ucr.edu/AoA/index.html) as PDF and HTML

    Lenguaje ensamblador - Wikipedia, la enciclopedia libre http://es.wikipedia.org/wiki/Lenguaje_ensamblador

    19 de 21 17/02/11 12:20 PM

  • Peter Norton, John Socha, Peter Norton's Assembly Language Book for the IBM PC, BradyBooks, NY: 1986.Michael Singer, PDP-11. Assembler Language Programming and Machine Organization, JohnWiley & Sons, NY: 1980.

    Vase tambinLenguaje ensamblador x86EnsambladorMacro ensambladorEnsamblador de alto nivelLenguaje ensambladortipeadoDesensambladorCompiladorDecompiladorIntrprete (informtica)DepuradorLenguaje de alto nivelLenguaje de bajo nivelLenguaje de mquinaConjunto de instruccionesTipos de datos mquina

    Little man computer

    Ensambladores

    Comparacin deensambladoresHigh Level AssemblyNetwide AssemblerFlat assemblerGNU AssemblerMicrosoft MacroAssemblerRosASMGoASMA86 y A386 assemblersTurbo Assembler

    GNU toolchain

    Desensambladores

    Interactive Disassembler

    Depuradores

    SoftICEGNU DebuggerOllyDbgValgrindRosASMA86 y A386 assemblersData Display Debuggerdebug (comando)

    Enlaces externos Wikilibros alberga un libro o manual sobre Programacin en lenguaje ensamblador.

    The Art of Assembly Language Programming (http://cs.smith.edu/~thiebaut/ArtOfAssembly/artofasm.html) , [1] (http://www.arl.wustl.edu/~lockwood/class/cs306/books/artofasm/toc.html)by Randall HydeComputer-Books.us (http://www.computer-books.us/assembler.php) , Online Assembly LanguageBrooksPC Assembly Language(espaol) (http://www.drpaulcarter.com/pcasm/pcasm-book-spanish.zip)by Dr Paul Carter; *PC Assembly Tutorial using NASM and GCC (http://drpaulcarter.com/pcasm/) by Paul CarterProgramming from the Ground Up (http://savannah.nongnu.org/projects/pgubook/) by JonathanBartlettThe ASM Book (http://www.asmcommunity.net/book/) by the ASM Community(http://www.asmcommunity.net)Inline::ASM (http://search.cpan.org/perldoc?Inline::ASM) mdulo Perl en CPAN para programaren lenguaje ensamblador dentro de programas Perl (en ingls)Ejemplos prcticos de ensamblador en GNU/Linux (http://snippets-tricks.org/topico/programacion/ensamblador/)

    Obtenido de "http://es.wikipedia.org/wiki/Lenguaje_ensamblador"Categoras: Ensambladores | Lenguajes de bajo nivel

    Lenguaje ensamblador - Wikipedia, la enciclopedia libre http://es.wikipedia.org/wiki/Lenguaje_ensamblador

    20 de 21 17/02/11 12:20 PM

  • Esta pgina fue modificada por ltima vez el 6 feb 2011, a las 01:05.El texto est disponible bajo la Licencia Creative Commons Atribucin Compartir Igual 3.0;podran ser aplicables clusulas adicionales. Lee los trminos de uso para ms informacin.

    Lenguaje ensamblador - Wikipedia, la enciclopedia libre http://es.wikipedia.org/wiki/Lenguaje_ensamblador

    21 de 21 17/02/11 12:20 PM