Anda di halaman 1dari 20

Lenguaje ensamblador

Para otros usos de este trmino, vase Ensamblador (desambiguacin). Tambin ver: Ensamblador

Lenguaje de mquina del Intel 8088. El cdigo de mquina en hexadecimal se resalta en rojo, el equivalente en lenguaje assembler en magenta, y las direcciones de memoria donde se encuentra el cdigo, en a ul. !bajo se ve un texto en hexadecimal y !"#II. El lenguaje ensamblador, o assembler $assembly language en ingl%s & es un lenguaje de 'rogramacin de bajo nivel 'ara los com'utadores, micro'rocesadores, microcontroladores, y otros circuitos integrados 'rogramables. Im'lementa una re'resentacin simblica de los cdigos de mquina binarios y otras constantes necesarias 'ara 'rogramar una arquitectura dada de #() y constituye la re'resentacin ms directa del cdigo mquina es'ec*+ico 'ara cada arquitectura legible 'or un 'rogramador. Esta re'resentacin es usualmente de+inida 'or el +abricante de hard,are, y est basada en los mnemnicos que simboli an los 'asos de 'rocesamiento $las instrucciones&, los registros del 'rocesador, las 'osiciones de memoria, y otras caracter*sticas del lenguaje. )n lenguaje ensamblador es 'or lo tanto es'ec*+ico a cierta arquitectura de com'utador +*sica $o virtual&. Esto est en contraste con la mayor*a de los lenguajes de 'rogramacin de alto nivel, que, idealmente son 'ortables. )n 'rograma utilitario llamado ensamblador es usado 'ara traducir sentencias del lenguaje ensamblador al cdigo de mquina del com'utador objetivo. El ensamblador reali a una traduccin ms o menos isomor+a $un ma'eo 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. -uchos so+isticados ensambladores o+recen mecanismos adicionales 'ara +acilitar el desarrollo del 'rograma, controlar el 'roceso de ensamblaje, y la ayuda de de'uracin. (articularmente, la mayor*a de los ensambladores modernos incluyen una +acilidad de macro $descrita ms abajo&, y son llamados macro ensambladores. .ue usado 'rinci'almente en los inicios del desarrollo de so+t,are, cuando a/n no se contaba con 'otentes lenguajes de alto nivel y los recursos eran limitados. !ctualmente se utili a con +recuencia en ambientes acad%micos y de investigacin, es'ecialmente cuando se requiere la mani'ulacin directa de hard,are, altos rendimientos, o un uso de recursos controlado y reducido. -uchos dis'ositivos 'rogramables $como los microcontroladores& a/n cuentan con el ensamblador como la /nica manera de ser mani'ulados.

Contenido
0ocultar1 2 #aracter*sticas 3 (rograma ensamblador
o o o

3.2 4/mero de 'asos 3.3 Ensambladores de alto nivel 3.5 )so del t%rmino

5 Lenguaje
o o o

5.2 Instrucciones de #() 5.3 Ensamblado 5.5 Ejem'lo

6 7ise8o del lenguaje


o

6.2 Elementos bsicos


6.2.2 -nemnicos de o'code y mnemnicos extendidos 6.2.3 "ecciones de datos 6.2.5 7irectivas del ensamblador

o o

6.3 -acros 6.5 "o'orte 'ara 'rogramacin estructurada

9 )so del lenguaje ensamblador


o o o

9.2 (ers'ectiva histrica 9.3 )so actual 9.5 !'licaciones t*'icas

: 7etalles adicionales ; Ejem'los de lenguaje ensamblador


o o o o

;.2 Ejem'lo 'ara la arquitectura x8: ;.3 Ejem'lo 'ara el com'utador virtual $(<#!& ;.5 Ejem'lo 'ara el =# Intel 8092 ;.6 Ejem'lo 'ara el -icrochi' (I#2:.86

8 >e+erencias

? Lectura adicional 20 @%ase tambi%n 22 Enlaces externos

[editar] Caractersticas

El cdigo escrito en lenguaje ensamblador 'osee una cierta di+icultad de ser entendido ya que su estructura se acerca al lenguaje mquina, es decir, es un lenguaje de bajo nivel. El lenguaje ensamblador es di+*cilmente 'ortable, es decir, un cdigo escrito 'ara un micro'rocesador, 'uede necesitar ser modi+icado, 'ara 'oder ser usado en otra mquina distinta. !l cambiar a una mquina con arquitectura di+erente, generalmente es necesario reescribirlo com'letamente. Los 'rogramas hechos 'or un 'rogramador ex'erto en lenguaje ensamblador son generalmente mucho ms r'idos y consumen menos recursos del sistema $memoria >!- y ><-& que el 'rograma equivalente com'ilado desde un lenguaje de alto nivel. !l 'rogramar cuidadosamente en lenguaje ensamblador se 'ueden crear 'rogramas que se ejecutan ms r'idamente y ocu'an menos es'acio que con lenguajes de alto nivel. #on el lenguaje ensamblador se tiene un control muy 'reciso de las tareas reali adas 'or un micro'rocesador 'or lo que se 'ueden crear segmentos de cdigo di+*ciles yAo muy ine+icientes de 'rogramar en un lenguaje de alto nivel, ya que, entre otras cosas, en el lenguaje ensamblador se dis'one de instrucciones del #() que generalmente no estn dis'onibles en los lenguajes de alto nivel. Bambi%n se 'uede controlar el tiem'o en que tarda una rutina en ejecutarse, e im'edir que se interrum'a durante su ejecucin.

[editar] Programa ensamblador


Artculo principal: Ensamblador

B*'icamente, un 'rograma ensamblador $assembler en ingl%s& moderno crea cdigo objeto traduciendo instrucciones mnemnicas de lenguaje ensamblador en o'codes, y resolviendo los nombres simblicos 'ara las locali aciones de memoria y otras entidades.2 El uso de re+erencias simblicas es una caracter*stica clave del lenguaje ensamblador, evitando tediosos clculos y actuali aciones manuales de las direcciones des'u%s de cada modi+icacin del 'rograma. La mayor*a de los ensambladores tambi%n incluyen +acilidades de macros 'ara reali ar sustitucin textual C ej. generar cortas secuencias de instrucciones como ex'ansin en l*nea en ve de llamar a subrutinas. Los ensambladores son generalmente ms sim'les de escribir que los com'iladores 'ara los lenguajes de alto nivel, y han estado dis'onibles desde los a8os 2?90. Los ensambladores modernos, es'ecialmente 'ara las arquitecturas basadas en >I"#, tales como -I(", "un "(!>#, y D( (!C>I"#, as* como tambi%n 'ara el x8: $C:6&,

o'timi an la 'lani+icacin de instrucciones 'ara ex'lotar la segmentacin del #() e+icientemente. En los com'iladores 'ara lenguajes de alto nivel, son el /ltimo 'aso antes de generar el cdigo ejecutable.

[editar] Nmero de pasos


Day dos ti'os de ensambladores basados en cuntos 'asos a trav%s de la +uente son necesarios 'ara 'roducir el 'rograma ejecutable.

Los ensambladores de un solo 'aso 'asan a trav%s del cdigo +uente una ve y asumen que todos los s*mbolos sern de+inidos antes de cualquier instruccin que los re+iera. Los ensambladores del dos 'asos crean una tabla con todos los s*mbolos y sus valores en el 'rimer 'aso, des'u%s usan la tabla en un segundo 'aso 'ara generar cdigo. El ensamblador debe 'or lo menos 'oder determinar la longitud de cada instruccin en el 'rimer 'aso 'ara que 'uedan ser calculadas las direcciones de los s*mbolos.

La ventaja de un ensamblador de un solo 'aso es la velocidad, que no es tan im'ortante como lo +ue en un momento dados los avances en velocidad y ca'acidades del com'utador. La ventaja del ensamblador de dos 'asos es que los s*mbolos 'ueden ser de+inidos dondequiera en el cdigo +uente del 'rograma. Esto 'ermite a los 'rogramas ser de+inidos de maneras ms lgicas y ms signi+icativas, haciendo los 'rogramas de ensamblador de dos 'aso ms +ciles leer y mantener.3

[editar] Ensambladores de alto nivel


Los ms so+isticados ensambladores de alto nivel 'ro'orcionan abstracciones del lenguaje tales comoE

Estructuras de control avan adas 7eclaraciones e invocaciones de 'rocedimientosA+unciones de alto nivel Bi'os de datos abstractos de alto nivel, incluyendo las estructurasArecords, uniones, clases, y conjuntos (rocesamiento de macros so+isticado $aunque est dis'onible en los ensambladores ordinarios desde +inales 2?:0 'ara el IF-A5:0, entre otras mquinas& #aracter*sticas de 'rogramacin orientada a objetos

[editar] Uso del trmino


4ote que, en el uso 'ro+esional normal, el t%rmino ensamblador es +recuentemente usado tanto 'ara re+erirse al lenguaje ensamblador como tambi%n al 'rograma ensamblador $que convierte el cdigo +uente escrito en el lenguaje ensamblador a

cdigo objeto que luego ser enla ado 'ara 'roducir lenguaje de mquina&. Las dos ex'resiones siguientes utili an el t%rmino GensambladorGE

GEl #(A#-" +ue escrito en ensamblador del IF- "A5:0G GEl !"-CD +ue un ensamblador del "A5;0 am'liamente usadoG

La 'rimera se re+iere al lenguaje y la segundo se re+iere al 'rograma.

[editar] Lenguaje
El lenguaje ensamblador re+leja directamente la arquitectura y las instrucciones en lenguaje de mquina de la #(), y 'ueden ser muy di+erentes de una arquitectura de #() a otra. #ada arquitectura de micro'rocesador tiene su 'ro'io lenguaje de mquina, y en consecuencia su 'ro'io lenguaje ensamblador ya que este se encuentra muy ligado al la estructura del hard,are 'ara el cual se 'rograma. Los micro'rocesadores di+ieren en el ti'o y n/mero de o'eraciones que so'ortanH tambi%n 'ueden tener di+erente cantidad de registros, y distinta re'resentacin de los ti'os de datos en memoria. !unque la mayor*a de los micro'rocesadores son ca'aces de cum'lir esencialmente las mismas +unciones, la +orma en que lo hacen di+iere y los res'ectivos lenguajes ensamblador re+lejan tal di+erencia.

[editar] nstrucciones de CPU


La mayor*a de los #() tienen ms o menos los mismos gru'os de instrucciones, aunque no necesariamente tienen todas las instrucciones de cada gru'o. Las o'eraciones que se 'ueden reali ar var*an de un #() a otro. )n #() 'articular 'uede tener instrucciones que no tenga otro y viceversa. Los 'rimeros micro'rocesadores de 8 bits no ten*an o'eraciones 'ara multi'licar o dividir n/meros, 'or ejem'lo, y hab*a que hacer subrutinas 'ara reali ar esas o'eraciones. <tros #() 'uede que no tengan o'eraciones de 'unto +lotante y habr*a que hacer o conseguir bibliotecas que realicen esas o'eraciones. Las instrucciones del #() 'ueden agru'arse, de acuerdo a su +uncionalidad, enE !peraciones con enteros" $de 8, 2:, 53 y :6 bits de'endiendo de la arquitectura del #()& Estas son o'eraciones reali adas 'or la )nidad aritm%tico lgica del #()

<'eraciones aritm%ticas. #omo suma, resta, multi'licacin, divisin, mdulo, cambio de signo <'eraciones booleanas. <'eraciones lgicas bit a bit como !47, <>, I<>, 4<B <'eraciones de bits. #omo des'la amiento y rotaciones de bits $hacia la derecha o hacia la i quierda, a trav%s del bit del acarreo o sin %l& #om'araciones

!peraciones de mover datos"

Entre los registros y la memoria" !unque la instruccin se llama GmoverG, en el #(), Gmover datosG signi+ica en realidad co'iar datos, desde un origen a un destino, sin que el dato desa'are ca del origen. "e 'ueden mover valoresE desde un registro a otro desde un registro a un lugar de la memoria

desde un lugar de la memoria a un registro desde un lugar a otro de la memoria un valor inmediato a un registro un valor inmediato a un lugar de memoria

!peraciones de stac#" ()"D $escribe datos hacia el to'e del stacJ& (<( $lee datos desde el to'e del stacJ& !peraciones de entrada$salida" "on o'eraciones que mueven datos de un registro, desde y hacia un 'uertoH o de la memoria, desde y hacia un 'uerto I4()B Lectura desde un 'uerto de entrada <)B()B Escritura hacia un 'uerto de salida !peraciones para el control del %lujo del programa"

Llamadas y retornos de subrutinas Llamadas y retornos de interru'ciones "altos condicionales de acuerdo al resultado de la com'araciones "altos incondicionales

!peraciones con nmeros reales" El estndar 'ara las o'eraciones con n/meros reales en los #() est de+inido 'or el IEEE ;96. )n #() 'uede tener o'eraciones de 'unto +lotante con n/meros reales mediante el co'rocesador num%rico $si lo hay&, como las siguientesE

<'eraciones aritm%ticas. "uma, resta, multi'licacin, divisin, cambio de signo, valor absoluto, 'arte entera <'eraciones trascendentales
o o

<'eraciones trigonom%tricas. "eno, coseno, tangente, arcotangente <'eraciones con logaritmos, 'otencias y ra*ces

<tras

El lenguaje ensamblador tiene mnemnicos 'ara cada una de las instrucciones del #() en adicin a otros mnemnicos a ser 'rocesados 'or el 'rograma ensamblador $como 'or ejem'lo macros y otras sentencias en tiem'o de ensamblado&.

[editar] Ensamblado
La trans+ormacin del lenguaje ensamblador en cdigo mquina la reali a un 'rograma ensamblador, y la traduccin inversa la 'uede e+ectuar un desensamblador. ! di+erencia de los lenguajes de alto nivel, aqu* hay usualmente una corres'ondencia 2 a 2 entre las instrucciones sim'les del ensamblador y el lenguaje de mquina. "in embargo, en algunos casos, un ensamblador 'uede 'roveer G'seudo instruccionesG que se ex'anden en un cdigo de mquina ms extenso a +in de 'roveer la +uncionalidad necesaria y sim'li+icar la 'rogramacin. (or ejem'lo, 'ara un cdigo mquina condicional como Gsi I mayor o igual queG, un ensamblador 'uede utili ar una 'seudoinstruccin al gru'o Ghaga si menor queG, y Gsi K 0G sobre el resultado de la condicin anterior. Los Ensambladores ms com'letos tambi%n 'roveen un rico lenguaje de macros que se utili a 'ara generar cdigo ms com'lejo y secuencias de datos. (ara el mismo 'rocesador y el mismo conjunto de instrucciones de #(), di+erentes 'rogramas ensambladores 'ueden tener, cada uno de ellos, variaciones y di+erencias en el conjunto de mnemnicos o en la sintaxis de su lenguaje ensamblador. (or ejem'lo, en un lenguaje ensamblador 'ara la arquitectura x8:, se 'uede ex'resar la instruccin 'ara mover 5 al registro AL de la siguiente maneraE MOV AL, 5, mientras que 'ara otro ensamblador 'ara la misma arquitectura se ex'resar*a al rev%sE MOV 5, AL. !mbos lenguajes ensambladores har*an exactamente lo mismo, solo que est ex'resado de manera di+erente. El 'rimero usa la sintaxis de Intel, mientras que el segundo usa la sintaxis de !BLB El uso del ensamblador no resuelve de+initivamente el 'roblema de cmo 'rogramar un sistema basado en micro'rocesador de modo sencillo ya que 'ara hacer un uso e+iciente del mismo, hay que conocer a +ondo el micro'rocesador, los registros de trabajo de que dis'one, la estructura de la memoria, y muchas cosas ms re+erentes a su estructura bsica de +uncionamiento.

[editar] Ejemplo
)n 'rograma escrito en lenguaje ensamblador consiste en una serie de instrucciones que corres'onden al +lujo de rdenes ejecutables 'or un micro'rocesador. (or ejem'lo, en el lenguaje ensamblador 'ara un 'rocesador x8:E La sentencia
MOV AL, 061h

!signa el valor hexadecimal 61 $?; decimal& al registro GALG. El 'rograma ensamblador lee la sentencia de arriba y 'roduce su equivalente binario en lenguaje de mquina

FinarioE 10110000 01100001 $hexadecimalE B061&

El mnemnico MOV es un cdigo de operacin u Go'codeG. El opcode es seguido 'or una lista de argumentos o parmetros, com'letando una t*'ica instruccin de ensamblador. En el ejem'lo, AL es un registro de 8 bits del 'rocesador, al cual se le asignar el valor hexadecimal :2 es'eci+icado. El cdigo de mquina generado 'or el ensamblador consiste de 3 bytes. El 'rimer byte contiene em'aquetado la instruccin -<@ y el cdigo del registro hacia donde se va a mover el datoE
10110 000 01100001 | | | | | +---- Nmero 61h en binario | | | +--- Registro AL +-------- Intr !!i"n MOV

En el segundo byte se es'eci+ica el n/mero :2h, escrito en binario como 01100001, que se asignar al registro AL, quedando la sentencia ejecutable comoE
10110000 01100001

La cual 'uede ser entendida y ejecutada directamente 'or el 'rocesador.

[editar] &ise'o del lenguaje


[editar] Elementos b(sicos
Day un grado grande de diversidad en la manera en que los autores de los ensambladores categori an las sentencias y en la nomenclatura que usan. En 'articular, algunos describen cualquier cosa como 'seudoCo'eracin $'seudoC<'&, con exce'cin del mnemnico de mquina o del mnemnico extendido. )n t*'ico lenguaje ensamblador consiste en 5 ti'os de sentencias de instruccin que son usadas 'ara de+inir las o'eraciones del 'rogramaE

-nemnicos de o'code "ecciones de datos 7irectivas de ensamblador

[editar] )nem*nicos de opcode y mnem*nicos e+tendidos ! di+erencia de las instrucciones $sentencias& de los lenguajes de alto nivel, instrucciones en el lenguaje ensamblador son generalmente muy sim'les. Meneralmente, una mnemnico es un nombre simblico 'ara una sola instruccin en lenguaje de mquina ejecutable $un o'code&, y hay 'or lo menos un mnemnico de o'code de+inido 'ara cada instruccin en lenguaje de mquina. #ada instruccin consiste t*'icamente en una o'eracin u o'code ms cero o ms o'erandos. La mayor*a de las instrucciones re+ieren a un solo valor, o a un 'ar de valores. Los o'erandos 'ueden ser inmediatos

$t*'icamente valores de un byte, codi+icados en la 'ro'ia instruccin&, registros es'eci+icados en la instruccin, im'l*citos o las direcciones de los datos locali ados en otra 'arte de la memoria. Esto est determinado 'or la arquitectura subyacente del 'rocesador, el ensamblador sim'lemente re+leja cmo trabaja esta arquitectura. Los mnemnicos extendidos son +recuentemente usados 'ara es'eci+icar una combinacin de un o'code con un o'erando es'ec*+ico, ej, el ensamblador del "ystemA5:0 usa a B como un mnemnico extendido 'ara el B# con una mscara de 29 y NO$ al B# con una mscara de 0. Los mnemnicos extendidos son +recuentemente usados 'ara so'ortar usos es'eciali ados de instrucciones, a menudo 'ara 'ro'sitos no obvios con res'ecto al nombre de la instruccin. (or ejem'lo, muchos #() no tienen una instruccin ex'l*cita de NO$ $4o <'eracin&, 'ero tienen instrucciones que 'uedan ser usadas 'ara tal 'ro'sito. En el #() 808:, la instruccin %#&' A%,A% $intercambia el registro !I consigo mismo& es usada 'ara el NO$, con NO$ siendo un 'seudoCo'code 'ara codi+icar la instruccin %#&' A%,A%. !lgunos desensambladores reconocen esto y decodi+icarn la instruccin %#&' A%,A% como NO$. "imilarmente, los ensambladores de IF- 'ara el "ystemA5:0 usan los mnemnicos extendidos NO$ y NO$R con las mscaras cero 'ara B# y B#R. !lgunos ensambladores tambi%n so'ortan sim'les macroinstrucciones incor'oradas que generan dos o ms instrucciones de mquina. (or ejem'lo, con algunos ensambladores 'ara el N80, la instruccin
L( &L, B#

genera las instrucciones


L( L, # L( &, B.5

es un pseudo opcode, que en este caso simula ser una instruccin de 2: bits, cuando se ex'ande se 'roducen dos instrucciones de 8 bits que equivalen a la simulada de 2: bits.
L( &L, B#

[editar] ,ecciones de datos Day instrucciones usadas 'ara de+inir elementos de datos 'ara manejar datos y variables. 7e+inen el ti'o de dato, la longitud y la alineacin de los datos. Estas instrucciones tambi%n 'ueden de+inir si los datos estn dis'onibles 'ara 'rogramas exteriores $'rogramas ensamblados se'aradamente& o solamente 'ara el 'rograma en el cual la seccin de datos est de+inida. !lgunos ensambladores clasi+ican estas instrucciones como 'seudoCo's. [editar] &irectivas del ensamblador Los directivas del ensamblador, tambi%n llamadas los 'seudo o'codes, 'seudoC o'eraciones o 'seudoCo's, son instrucciones que son ejecutadas 'or un ensamblador en el tiem'o de ensamblado, no 'or un #() en el tiem'o de ejecucin. (ueden hacer al ensamblado del 'rograma de'endiente de 'armetros entrados 'or un 'rogramador, de

modo que un 'rograma 'ueda ser ensamblado de di+erentes maneras, qui s 'ara diversos a'licaciones. Bambi%n 'ueden ser usadas 'ara mani'ular la 'resentacin de un 'rograma 'ara hacerlo ms +cil leer y mantener. (or ejem'lo, las directivas 'udieran ser usadas 'ara reservar reas de almacenamiento y o'cionalmente su 'ara asignar su contenido inicial. Los nombres de las directivas a menudo comien an con un 'unto 'ara distinguirlas de las instrucciones de mquina. Los ensambladores simblicos le 'ermiten a los 'rogramadores asociar nombres arbitrarios $etiquetas o s*mbolos& a 'osiciones de memoria. )sualmente, cada constante y variable tiene un nombre 'ara que las instrucciones 'ueden re+erir a esas ubicaciones 'or nombre, as* 'romoviendo el cdigo autodocumentado. En el cdigo ejecutable, el nombre de cada sub'rograma es asociado a su 'unto de entrada, as* que cualquier llamada a un sub'rograma 'uede usar su nombre. 7entro de sub'rogramas, a los destinos M<B< se le dan etiquetas. !lgunos ensambladores so'ortan s*mbolos locales que son l%xicamente distintos de los s*mbolos normales $ej, el uso de G20OG como un destino M<B<&. La mayor*a(lantillaE7ubious de los ensambladores 'ro'orcionan un manejo +lexible de s*mbolos, 'ermitiendo a los 'rogramadores manejar diversos es'acios de nombres, calcular automticamente o++sets dentro de estructuras de datos, y asignar etiquetas que re+ieren a valores literales o al resultado de clculos sim'les reali ados 'or el ensamblador. Las etiquetas tambi%n 'ueden ser usadas 'ara iniciali ar constantes y variables con direcciones relocali ables. Los lenguajes ensambladores, como la mayor*a de los otros lenguajes de com'utador, 'ermiten que comentarios sean a8adidos al cdigo +uente, que son ignorados 'or el 'rograma ensamblador. El buen uso de los comentarios es a/n ms im'ortante con cdigo ensamblador que con lenguajes de alto nivel, 'ues el signi+icado y el 'ro'sito de una secuencia de instrucciones es ms duro de desci+rar a 'artir del cdigo en s* mismo. El uso sabio de estas +acilidades 'uede sim'li+icar grandemente los 'roblemas de codi+icar y mantener el cdigo de bajo nivel. El cdigo +uente de lenguaje ensamblador crudo generado 'or com'iladores o desensambladores C cdigo sin ning/n comentario, ni s*mbolos con alg/n sentido, ni de+iniciones de datos C es muy di+*cil de leer cuando deben hacerse cambios.

[editar] )acros
-uchos ensambladores so'ortan macros 'rede+inidos, y otras so'ortan macros de+inidos $y re'etidamente rede+inibles& 'or el 'rogramador que im'lican secuencias de l*neas del texto en las cuales las variables y las constantes estn em'otradas. Esta secuencia de l*neas de texto 'uede incluir o'codes o directivas. )na ve un macro ha sido de+inido, su nombre 'uede ser usado en lugar de un mnemnico. #uando el ensamblador 'rocesa tal sentencia, reem'la a la sentencia 'or las l*neas del texto asociadas a ese macro, entonces las 'rocesa como si hubieran existido en el archivo del cdigo +uente original $incluyendo, en algunos ensambladores, la ex'ansin de cualquier macro que exista en el texto de reem'la o&.

(uesto que las macros 'ueden tener nombres GcortosG 'ero se ex'anden a varias o de hecho muchas l*neas de cdigo, 'ueden ser usados 'ara hacer que los 'rogramas en lenguaje ensamblador 'are can ser mucho ms cortos, requiriendo menos l*neas de cdigo +uente, como sucede con los lenguajes de alto nivel. Bambi%n 'ueden ser usados 'ara a8adir niveles de estructura ms altos a los 'rogramas ensamblador, o'cionalmente introducen cdigo de de'uracin em'otrado v*a 'armetros y otras caracter*sticas similares. -uchos ensambladores tienen macros incor'orados $o 'rede+inidos& 'ara las llamadas de sistema y otras secuencias es'eciales de cdigo, tales como la generacin y el almacenamiento de los datos reali ados a trav%s de avan adas o'eraciones bit,ise y booleanas usadas en juegos, so+t,are de seguridad, gestin de datos, y cri'togra+*a. Los macro ensambladores a menudo 'ermiten a los macros tomar 'armetros. !lgunos ensambladores incluyen lenguajes macro muy so+isticados, incor'orando elementos de lenguajes de alto nivel tales como 'armetros o'cionales, variables simblicas, condiciones, mani'ulaciones de strings o'eraciones aritm%ticas, todos usables durante la ejecucin de un macro dado, y 'ermitiendo a los macros guardar el contexto o intercambiar in+ormacin. !s* un macro 'uede generar un gran n/mero de instrucciones o de+iniciones de datos en lenguaje ensamblador, basadas en los argumentos del macro. Esto 'udiera ser usado 'ara generar, 'or ejem'lo, estructuras de datos de estilo de records o bucles GdesenrrolladosG, o 'odr*a generar algoritmos enteros basados en 'armetros com'lejos. )na organi acin, usando lenguaje ensamblador, que ha sido +uertemente extendido usando tal suite de macros, 'uede ser considerada que se est trabajando en un lenguaje de alto nivel, 'uesto que tales 'rogramadores no estn trabajando con los elementos conce'tuales de ms bajo nivel del com'utador. Las macros +ueron usados 'ara ada'tar sistemas de so+t,are de gran escala 'ara clientes es'ec*+icos en la era del main+rame, y tambi%n +ueron usados 'or el 'ersonal del cliente 'ara satis+acer las necesidades de sus 'atrones haciendo versiones es'ec*+icas de los sistemas o'erativos del +abricante. Esto +ue hecho, 'or ejem'lo, 'or los 'rogramadores de sistema que trabajaban con el #onversational -onitor "ystem A @irtual -achine $#-"A@-& de IF- y con los addCons Greal time transaction 'rocessingG de IF-, #I#", #ustomer In+ormation #ontrol "ystem, y !#(AB(., el airlineA+inancial system que comen en los a8os 2?;0 y todav*a corre con muchos sistemas de reservaciones com'utari ados $#>"& y sistemas de tarjeta de cr%dito de hoy. Bambi%n es 'osible usar solamente las habilidades de 'rocesamiento de macros de un ensamblador 'ara generar cdigo escrito en lenguajes com'letamente di+erentes, 'or ejem'lo, 'ara generar una versin de un 'rograma en #<F<L usando un 'rograma macro ensamblador 'uro conteniendo l*neas de cdigo #<F<L dentro de o'eradores de tiem'o ensamblaje dando instrucciones al ensamblador 'ara generar cdigo arbitrario. Esto era 'orque, como en los a8os 2?;0 +ue observado, el conce'to de G'rocesamiento de macroG es inde'endiente del conce'to de GensamblajeG, siendo el anterior, en t%rminos modernos, ms un 'rocesamiento de textos, que una generacin de cdigo objeto. El conce'to de 'rocesamiento de macro a'areci, y a'arece, en el lenguaje de 'rogramacin #, que so'orta Ginstrucciones de 're'rocesadorG de +ijar variables, y hace 'ruebas condicionales en sus valores. <bserve que a di+erencia de ciertos macro'rocesadores 'revios dentro de los ensambladores, el 're'rocesador de # no es

BuringCcom'leto 'orque carec*a la ca'acidad de bucle o Ggo toG, esto /ltimo 'ermitiendo a los 'rogramas hacer bucles. ! 'esar del 'oder del 'rocesamiento macro, %ste dej de usarse en muchos lenguajes de alto nivel $una im'ortante exce'cin es #A#PP& mientras que segu*a siendo 'erenne 'ara los ensambladores. Esto era 'orque muchos 'rogramadores estaban bastante con+undidos 'or la sustitucin de 'armetros macro y no distingu*an la di+erencia entre 'rocesamiento macro, el ensamblaje y la ejecucin.(lantillaE7ubious La sustitucin de 'armetros macro es estrictamente 'or nombreE en el tiem'o de 'rocesamiento macro, el valor de un 'armetro es sustituido textualmente 'or su nombre. La clase ms +amosa de bugs resultantes era el uso de un 'armetro que en s* mismo era una ex'resin y no un nombre 'rimario cuando el escritor macro es'eraba un nombre. En el macroE +ooE macro a load aQb la intencin era que la rutina que llama 'ro'orcionar*a el nombre de una variable, y la variable o constante GglobalG b ser*a usada 'ara multi'licar a GaG. "i +oo es llamado con el 'armetro a-!, ocurre la ex'ansin macro )oa* a-!+b. (ara evitar cualquier 'osible ambigRedad, los usuarios de macro 'rocesadores 'ueden encerrar en 'ar%ntesis los 'armetros +ormales dentro de las de+iniciones de macros, o las rutinas que llaman 'ueden envolver en 'ar%ntesis los 'armetos de entrada.6 !s*, el macro correcto, con los 'ar%ntesis, ser*aE +ooE macro a load $a&Qb y su ex'ansin, dar*a como resultadoE )oa* ,a-!-+b El (LAI y el #A#PP o+recen macros, 'ero la esta +acilidad solo 'uede mani'ular texto. (or otra 'arte, los lenguajes homoicnicos, tales como Lis', (rolog, y .orth, retienen el 'oder de los macros de lenguaje ensamblador 'orque 'ueden mani'ular su 'ro'io cdigo como datos.

[editar] ,oporte para programaci*n estructurada


!lgunos ensambladores han incor'orado elementos de 'rogramacin estructurada 'ara codi+icar el +lujo de la ejecucin. El ejem'lo ms tem'rano de este acercamiento estaba en el #once'tC26 macro set, originalmente 'ro'uesto 'or el 7r. D.7. -ills $mar o de 2?;0&, e im'lementado 'or -arvin Sessler en la .ederal "ystems 7ivision de IF-, que extendi el macro ensamblador del "A5:0 con bloques de control de +lujo I.AEL"EAE47I. y similares.9 Esto era una manera de reducir o eliminar el uso de o'eraciones M<B< en el cdigo en lenguaje ensamblador, uno de los 'rinci'ales +actores que causaban cdigo es'agueti en el lenguaje ensamblador. Este acercamiento +ue am'liamente ace'tado a 'rinci'ios de los a8os 2?80 $los /ltimos d*as del uso de lenguaje ensamblador en gran escala&.

)n curioso dise8o +ue !Cnatural, un ensamblador Gorientado a la corrienteG $streamC oriented& 'ara los 'rocesadores 8080AN800cita re!uerida1 de Thitesmiths Ltd. $desarrolladores del sistema o'erativo Idris, similar al )nix&, y lo que +ue re'ortado como el 'rimer com'ilador # comercial&. El lenguaje +ue clasi+icado como un ensamblador, 'orque trabajaba con elementos de mquina crudos tales como o'codes, registros, y re+erencias de memoriaH 'ero incor'oraba una sintaxis de ex'resin 'ara indicar el orden de ejecucin. Los 'ar%ntesis y otros s*mbolos es'eciales, junto con construcciones de 'rogramacin estructurada orientadas a bloques, controlaban la secuencia de las instrucciones generadas. !Cnatural +ue construido como el lenguaje objeto de un com'ilador #, en ve de la codi+icacin manual, 'ero su sintaxis lgica gan algunos seguidores. Da habido 'oca demanda a'arente 'ara ensambladores ms so+isticados debido a la declinacin del desarrollo de lenguaje ensamblador de larga escala.: ! 'esar de eso, todav*a se estn desarrollando y a'licando en casos donde las limitaciones de recursos o las 'articularidades en la arquitectura de sistema objetivo 'revienen el e+ectivo uso de lenguajes de alto nivel.;

[editar] Uso del lenguaje ensamblador


[editar] Perspectiva -ist*rica
Los lenguajes ensambladores +ueron 'rimero desarrollados en los a8os 2?90, cuando +ueron re+eridos como lenguajes de 'rogramacin de segunda generacin. (or ejem'lo, el "<!( $"ymbolic <'timal !ssembly (rogram& era un lenguaje ensamblador de 2?9; 'ara el com'utador IF- :90. Los lenguajes ensambladores eliminaron mucha de la 'ro'ensin a errores y del consumo de tiem'o de la 'rogramacin de los lenguajes de 'rimera generacin que se necesitaba con los 'rimeros com'utadores, liberando a los 'rogramadores del tedio tal como recordar cdigos num%ricos y clculo de direcciones. )na ve +ueron am'liamente usados 'ara todo ti'o de 'rogramacin. "in embargo, 'or los a8os 2?80 $2??0 en los microcom'utadores&, su uso hab*a sido en gran 'arte su'lantado 'or los lenguajes de alto nivel,0cita re!uerida1 en la b/squeda de una mejorada 'roductividad en 'rogramacin. Doy en d*a, aunque el lenguaje ensamblador es casi siem're manejado y generado 'or los com'iladores, todav*a se usa 'ara la mani'ulacin directa del hard,are, acceso a instrucciones es'eciali adas del 'rocesador, o 'ara resolver 'roblemas de desem'e8o cr*tio. Los usos t*'icos son drivers de dis'ositivo, sistemas embebidos de bajo nivel, y sistemas de tiem'o real. Districamente, un gran n/mero de 'rogramas han sido escritos enteramente en lenguaje ensamblador. Los sistemas o'erativos +ueron casi exclusivamente escritos en lenguaje ensamblador hasta la ace'tacin m'lia del lenguaje de 'rogramacin # en los a8os 2?;0 y 'rinci'ios de los 2?80. Bambi%n, muchas a'licaciones comerciales +ueron escritas en lenguaje ensamblador, incluyendo una gran cantidad del so+t,are escrito 'or grandes cor'oraciones 'ara main+rames de IF-. Los lenguajes #<F<L y .<>B>!4 eventualmente des'la aron mucho de este trabajo, aunque un n/mero de organi aciones grandes conservaran las in+raestructuras de a'licaciones en lenguaje ensamblador hasta bien entrados los a8os 2??0. La mayor*a de los 'rimeros microcom'utadores con+iaron en el lenguaje ensamblador codi+icado a mano, incluyendo la mayor*a de los sistemas o'erativos y de las

a'licaciones grandes. Esto era 'orque estos sistemas ten*an limitaciones severas de recursos, im'usieron idiosincrticas arquitecturas de memoria y de 'antalla, y 'ro'orcionaron servicios de sistema limitados y con errores. Uui s ms im'ortante era la +alta de com'iladores de 'rimera clase de lenguajes de alto nivel adecuados 'ara el uso en el microcom'utador. )n +actor 'sicolgico tambi%n 'udo haber jugado un 'a'elE la 'rimera generacin de 'rogramadores de los microcom'utadores conserv una actitud de a+icionado de Galambres y alicatesG. En un contexto ms comercial, las ms grandes ra ones 'ara usar el lenguaje ensamblador era hacer 'rogramas con m*nimo tama8o, m*nima sobrecarga, mayor velocidad y con+iabilidad. Los t*'icos ejem'los de 'rogramas grandes en lenguaje ensamblador de ese tiem'o son los sistemas o'erativos IF- (# 7<" y a'licaciones tem'ranas tales como la hoja de clculo Lotus 2C3C5, y casi todos los juegos 'o'ulares 'ara la +amilia !tari 800 de com'utadores 'ersonales. Incluso en los a8os 2??0, la mayor*a de los videojuegos de cnsola +ueron escritos en ensamblador, incluyendo la mayor*a de los juegos 'ara la -ega 7riveAMenesis y el "u'er 4intendo Entertainment "ystem.0cita re!uerida1 "eg/n algunos insiders de la industria, el lenguaje ensamblador era el mejor lenguaje de 'rogramacin a usar 'ara obtener el mejor desem'e8o del "ega "aturn, una cnsola 'ara la cual era notoriamente desa+iante desarrollar y 'rogramar juegos.8 El 'o'ular juego de arcade 4F! Vam $2??5& es otro ejem'lo. El ensamblador ha sido 'or largo trecho, el lenguaje de desarrollo 'rimario en los com'utadores hogare8os #ommodore :6, !tari "B, as* como el NI "'ectrum. Esto +ue as* en gran 'arte 'orque los dialectos del F!"I# en estos sistemas o+recieron insu+iciente velocidad de ejecucin, as* como insu+icientes caracter*sticas 'ara a'rovechar com'letamente el hard,are dis'onible. !lgunos sistemas, ms notablemente el !miga, incluso tienen I7Es con caracter*sticas de de'uracin y macros altamente avan ados, tales como el +ree,are !"-C<ne assembler, com'arable a las del -icroso+t @isual "tudio $el !"-C)no 'recede al -icroso+t @isual "tudio&. El ensamblador 'ara el @I#C30 +ue escrito 'or 7on .rench y 'ublicado 'or .rench "ilJ. #on 2:5? bytes de longitud, su autor cree que es el ms 'eque8o ensamblador simblico jams escrito. El ensamblador so'ortaba el direccionamiento simblico usual y la de+inicin de cadenas de caracteres o cadenas hexadecimales. Bambi%n 'ermit*a ex'resiones de direcciones que 'od*an combinarse con las o'eraciones de adicin, substraccin, multi'licacin, divisin, !47 lgico, <> lgico, y ex'onenciacin.?

[editar] Uso actual


Dan habido siem're debates sobre la utilidad y el desem'e8o del lenguaje ensamblador relativo a lenguajes de alto nivel. El lenguaje ensamblador tiene nichos es'ec*+icos donde es im'ortante $ver abajo&. (ero, en general, los modernos com'iladores de o'timi acin0cita re!uerida1 'ara traducir lenguajes de alto nivel en cdigo que 'uede correr tan r'idamente como el lenguaje ensamblador escrito a mano, a 'esar de los contraejem'los que 'ueden ser encontrados.20 22 23 La com'lejidad de los 'rocesadores modernos y del subsistema de memoria hace la o'timi acin e+ectiva cada ve ms di+*cil 'ara los com'iladores, as* como 'ara los 'rogramadores en ensamblador.25 26 !dicionalmente, y 'ara la consternacin de los amantes de la e+iciencia, el desem'e8o cada ve mayor del 'rocesador ha signi+icado que la mayor*a de los #() est%n

desocu'ados la mayor 'arte del tiem'o, con retardos causados 'or embotellamientos 'redecibles tales como o'eraciones de entradaAsalida y 'aginacin de memoria. Esto ha hecho la velocidad de ejecucin cruda del cdigo un noC'roblema 'ara muchos 'rogramadores. Day algunas situaciones en las cuales los 'ro+esionales 'udieran elegir utili ar el lenguaje ensamblador. (or ejem'lo cuandoE

es requerido un ejecutable binario inde'endiente $standCalone&, es decir uno que deba ejecutarse sin recursos a com'onentes de tiem'o de ejecucin o a bibliotecas asociadas con un lenguaje de alto nivelH %sta es qui s la situacin ms com/n. "on 'rogramas em'otrados que solo almacenan una 'eque8a cantidad de memoria y el dis'ositivo est dirigido 'ara hacer tareas 'ara un sim'le 'ro'sito. Ejem'los consisten en tel%+onos, sistemas de combustible e ignicin 'ara autombiles, sistemas de control del aire acondicionado, sistemas de seguridad, y sensores interactuando directamente con el hard,are, 'or ejem'lo en drivers de dis'ositivo y manejadores de interru'cin usando instrucciones es'ec*+icas del 'rocesador no ex'lotadas o dis'onibles 'or el com'ilador. )n ejem'lo com/n es la instruccin de rotacin bit,ise en el n/cleo de muchos algoritmos de ci+rado creando +unciones vectori adas 'ara 'rogramas en lenguajes de alto nivel como #. En el lenguaje de alto nivel esto es a veces ayudado 'or +unciones intr*nsecas del com'ilador que ma'ean directamente a los mnemnicos del "I-7, 'ero sin embargo resulta en una conversin de ensamblador de uno a uno 'ara un 'rocesador de vector asociado es requerida la o'timi acin extrema, ej, en un bucle interno en un algoritmo intensivo en el uso del 'rocesador. Los 'rogramadores de juegos toman ventaja de las habilidades de las caracter*sticas del hard,are en los sistemas, 'ermitiendo a los juegos correr ms r'idamente. Bambi%n las grandes simulaciones cient*+icas requieren algoritmos altamente o'timi ados, ej, lgebra lineal con FL!"20 29 o la trans+ormada de coseno discreta $ej, la versin "I-7 en ensamblador del x3:6,2: $una biblioteca 'ara codi+icar streams de video& un sistema con severas limitaciones de recursos $ej, un sistema em'otrado& debe ser codi+icado a mano 'ara maximi ar el uso de los limitados recursosH 'ero esto est llegando a ser menos com/n a medida que el 'recio del 'rocesador decrece y el desem'e8o mejora no existe ning/n lenguaje de alto nivel, en un 'rocesador nuevo o es'eciali ado, 'or ejem'lo escribiendo 'rogramas de tiem'o real que necesitan sincroni acin y res'uestas 'recisas, tales como sistemas de navegacin de vuelo, y equi'o m%dico. (or ejem'lo, en un sistema +lyCbyC,ire $vuelo 'or mandos el%ctricos&, la telemetr*a debe ser inter'retada y hay que actuar dentro de limitaciones estrictas de tiem'o. Bales sistemas deben eliminar +uentes de retrasos im'redecibles, que 'ueden ser creados 'or $algunos& lenguajes inter'retados, recoleccin de basura automtica, o'eraciones de 'aginacin, o multitarea 'reventiva. "in embargo, algunos

lenguajes de alto nivel incor'oran com'onentes de tiem'o de ejecucin e inter+aces de sistema o'erativo que 'ueden introducir tales retrasos. Elegir el ensamblador o lenguajes de bajo nivel 'ara tales sistemas da a los 'rogramadores mayor visibilidad y control sobre el 'roceso de los detalles

es requerido control total sobre el ambiente, en situaciones de seguridad extremadamente alta donde nada 'uede darse 'or sentado. se escriben virus de com'utadora, bootloaders, ciertos drivers de dis'ositivo, u otros elementos muy cerca del hard,are o al sistema o'erativo de bajo nivel se escriben simuladores del conjunto de instrucciones 'ara monitoreo, tra ado y de'uracin de errores donde la sobrecarga adicional es mantenida al m*nimo se hace ingenier*a inversa en binarios existentes que 'ueden o no haber sido escritos originalmente en un lenguaje de alto nivel, 'or ejem'lo al cracJear la 'roteccin antico'ia del so+t,are 'ro'ietario. se hace ingenier*a inversa y modi+icacin de video juegos $tambi%n denominado ><- hacJing&, que es 'osible 'or medio de varios m%todos. El ms am'liamente im'lementado es alterando el cdigo del 'rograma a nivel de lenguaje ensamblador se escribe cdigo automodi+icable, algo 'ara lo que el lenguaje ensamblador se 'resta bien se escriben juegos y otros so+t,ares 'ara calculadoras gr+icas2; se escribe so+t,are com'ilador que genera cdigo ensamblador, y 'or lo tanto los desarrolladores deben ser 'rogramadores de lenguaje ensamblador se escriben algoritmos cri'togr+icos que siem're deben tomar estrictamente el mismo tiem'o 'ara ejecutar, 'reviniendo ataques de tiem'o

"in embargo, el lenguaje ensamblador es todav*a ense8ado en la mayor*a de los 'rogramas de ciencias de la com'utacin e ingenier*a electrnica. !unque hoy en d*a, 'ocos 'rogramadores trabajan regularmente con el lenguaje ensamblador como una herramienta, los conce'tos +undamentales contin/an siendo muy im'ortantes. Bales t'icos +undamentales, como aritm%tica binaria, asignacin de memoria, 'rocesamiento del stacJ, codi+icacin de conjunto de caracteres, 'rocesamiento de interru'ciones, y dise8o de com'iladores, ser*an duros de estudiar en detalle sin la com'rensin de cmo el com'utador o'era a nivel del hard,are. (uesto que el com'ortamiento del com'utador es +undamentalmente de+inido 'or su conjunto de instrucciones, la manera lgica de a'render tales conce'tos es estudiar un lenguaje ensamblador. La mayor*a de los com'utadores modernos tienen un conjunto de instrucciones similares. (or lo tanto, estudiar un solo lenguaje ensamblador es su+iciente 'ara a'renderE i& los conce'tos bsicosH ii& reconocer situaciones donde el uso de lenguaje ensamblador 'uede ser a'ro'iadoH y iii& ver cmo el cdigo ejecutable e+iciente 'uede ser creado 'or los lenguajes de alto nivel28

[editar] .plicaciones tpicas

El lenguaje ensamblador hardCcoded es t*'icamente usado en el ><- de arranque del sistema $FI<" en los sistemas com'atible IF- (#&. Este cdigo de bajo nivel es usado, entre otras cosas, 'ara iniciali ar y 'robar el hard,are del sistema antes de cargar el sistema o'erativo, y est almacenado en el ><-. )na ve que ha tomado lugar un cierto nivel de iniciali acin del hard,are, la ejecucin se trans+iere a otro cdigo, t*'icamente escrito en lenguajes de alto nivelH 'ero el cdigo corriendo inmediatamente des'u%s de que es a'licada la energ*a usualmente est escrito en lenguaje ensamblador. Lo mismo es cierto 'ara los boot loaders. -uchos com'iladores traducen lenguajes de alto nivel a lenguaje ensamblador 'rimero, antes de la com'ilacin com'leta, 'ermitiendo que el cdigo en ensamblador sea visto 'ara 'ro'sitos de de'uracin y o'timi acin. Lenguajes de relativo bajo nivel, como #, con +recuencia 'roveen sintaxis es'ecial 'ara em'otrar lenguaje ensamblador en cada 'lata+orma de hard,are. El cdigo 'ortable del sistema entonces 'uede usar estos com'onentes es'ec*+icos a un 'rocesador a trav%s de una inter+ace uni+orme. El lenguaje ensamblador tambi%n es valioso en ingenier*a inversa, 'uesto que muchos 'rogramas solamente son distribuidos en una +orma de cdigo de mquina. El cdigo de mquina es usualmente +cil de trasladar hacia lenguaje ensamblador 'ara luego ser cuidadosamente examinado en esta +orma, 'ero es muy di+*cil de trasladar hacia un lenguaje de alto nivel. Derramientas como Interactive 7isassembler, hacen uso extenso del desensamblador 'ara tales 'ro'sitos. )n nicho que hace uso del lenguaje ensamblador es el demoscene. #iertas com'eticiones requieren a los concursantes restringir sus creaciones a un muy 'eque8o tama8o $ej, 39: bytes, 2 SF, 6 SF :6 SF&, y el lenguaje ensamblador es el lenguaje de 're+erencia 'ara alcan ar este objetivo.2? #uando los recursos son una 'reocu'acin, es una necesidad la codi+icacin en ensamblador, es'ecialmente en sistemas constre8idos 'or el 'rocesamiento del #(), como los 'rimeros modelos del !miga, y el #ommodore :6. El cdigo o'timi ado en ensamblador es escrito Ga manoG 'or los 'rogramadores en un intento de minimi ar el n/mero de ciclos de #() usados. Las limitaciones del #() son tan grandes que cada ciclo cuenta. )sar tales m%todos ha habilitado, a sistemas como el #ommodore :6, 'ara 'roducir gr+icos en 57 en tiem'o real con e+ectos avan ados, una ha a8a que 'uede ser considerada im'robable o incluso im'osible 'ara un sistema con un 'rocesador de 0.?? -D .0cita re!uerida1

[editar] &etalles adicionales


(ara un determinado com'utador 'ersonal, main+rame, sistema em'otrado, y cnsola de juegos, tanto del 'asado como del 'resente, ha sido escrito al menos uno, y 'osiblemente docenas de ensambladores. (ara algunos ejem'los, vea la lista de ensambladores. En los sistemas )nix, el ensamblador es llamado tradicionalmente as, aunque no es un sim'le cuer'o de cdigo, siendo t*'icamente escrito uno nuevo 'or cada 'ort. )n n/mero de variantes de )nix usan el M!" 7entro de los gru'os de 'rocesadores, cada ensamblador tiene su 'ro'io dialecto. ! veces, algunos ensambladores 'ueden leer el dialecto de otro, 'or ejem'lo, B!"'uede leer el viejo cdigo del -!"-, 'ero no al rev%s. .!"- y 4!"- tienen una

sintaxis similar, 'ero cada uno so'orta di+erentes macros que 'ueden ser di+*cil de trasladar de uno al otro. Las cosas bsicas son siem're las mismas, 'ero las caracter*sticas avan adas sern di+erentes30 Bambi%n, los lenguajes ensambladores a veces 'ueden ser 'ortables a trav%s de di+erentes sistemas o'erativos en el mismo ti'o de #(). Las convenciones de llamadas entre los sistemas o'erativos con +recuencia di+ieren ligeramente o en nada. y con cuidado es 'osible ganar 'ortabilidad en el lenguaje ensamblador, usualmente al enla ar con una biblioteca de lenguaje # que no cambia entre sistemas o'erativos. )n simulador de conjunto de instrucciones $que idealmente ser*a escrito en lenguaje ensamblador& 'uede, en teor*a, 'rocesar el cdigo objetoAbinario de cual!uier ensamblador& 'ara lograr la 'ortabilidad incluso a trav%s de 'lata+ormas $con una sobrecargue no mayor que la de un inter'retador de bytecode t*'ico&. Esto es esencialmente lo que logra el microcdigo cuando una 'lata+orma de hard,are cambia internamente. (or ejem'lo, muchas cosas en libc de'enden del 're'rocesador 'ara hacer, al 'rograma antes de com'ilar, cosas que son es'ec*+icas del sistema o'erativo o es'ec*+icas del #. 7e hecho, algunas +unciones y s*mbolos ni siquiera estn garanti ados que existan +uera del 're'rocesador. (eor a/n, el tama8o y el orden de los cam'os de las estructuras, tanto como el tama8o de ciertas ty'ede+s como o""#t, no estn dis'onibles en lenguaje ensamblador sin la ayuda de un scri't de con+iguracin, y di+ieren incluso entre versiones de Linux, haciendo im'osible 'ortar llamadas de +unciones en libc di+erentes de los que toman sim'les enteros o 'unteros como 'armetros. (ara manejar estos 'roblemas, el 'royecto .!"-LIF 'rovee una biblioteca de lenguaje ensamblador 'ortable 'ara las 'lata+ormas Tin53 y Linux, 'ero todav*a est muy incom'leta.32 !lgunos lenguajes de muy alto nivel, como # y Forland (ascal, so'ortan ensamblado en l*nea, donde relativamente secciones cortas de cdigo en ensamblador 'uede ser em'otradas dentro del cdigo del lenguaje de alto nivel. El lenguaje .orth com/nmente contiene un ensamblador usado 'ara codi+icar 'alabras. La mayor*a de la gente usa un emulador 'ara de'urar sus 'rogramas en lenguaje ensamblador.

[editar] Ejemplos de lenguaje ensamblador


[editar] Ejemplo para la ar/uitectura +01
El siguiente es un ejem'lo del 'rograma clsico $ola mundo escrito 'ara la arquitectura de 'rocesador x8: $bajo el sistema o'erativo 7<"&.
. --------------------------------------------. $rograma / e im0rime n string en )a 0anta))a . --------------------------------------------1mo*e) sma)) . mo*e)o *e memoria 1sta!2 . segmento *e) sta!2 1*ata . segmento *e *atos #a*ena1 (B 3&o)a M n*o143 . string a im0rimir ,5ina)i6a*o en 41!o*e . segmento *e) !"*igo

. --------------------------------------------. Ini!io *e) 0rograma . --------------------------------------------0rograma7 MOV A%, 8*ata . !arga en A% )a *ire!!i"n *e) segmento *e *atos MOV (9, A% . m e:e )a *ire!!i"n a) registro *e segmento 0or me*io *e A% MOV (%, o55set #a*ena1 . m e:e a (% )a *ire!!i"n *e) string a im0rimir MOV A&, ; . A& < !"*igo *e )a 5 n!i"n *e) M9 (O9 0ara im0rimir n string en )a 0anta))a IN= >1h . ))ama*a a) M9 (O9 0ara im0rimir n string en )a 0anta))a IN= >0h . ))ama*a a) M9 (O9 0ara 5ina)i6ar e) 0rograma en* 0rograma

[editar] Ejemplo para el computador virtual 2P!C.3


)na seleccin de instrucciones 'ara una com'utadora virtual33 & con las corres'ondientes direcciones de memoria en las que se ubicarn las instrucciones. Estas direcciones 4< son estticas. #ada instruccin se acom'a8a del cdigo en lenguaje ensamblador generado $cdigo objeto& que coincide con la arquitectura de com'utador virtual, o conjunto de instrucciones I"!. &ir4 Eti/ueta nstrucci*n
1begin 1org >0?@ aAstart 1e/ >0?@ >06? >06@ >0D> >0D6 >0@0 >0@? >0@@ *one7 >0;> )ength7 >0;6 a**ress7 B000 B000 00000010 10000000 00000000 00000110 )* )ength,C be *one a**!! Cr1,-?,Cr1 10000010 10000000 01111111 11111100 a**!! Cr1,Cr>,Cr? 10001000 10000000 01000000 00000010 )* Cr?,Cr5 ba )oo0 a**!! CrB,Cr5,CrB Em0) Cr15+?,Cr0 >0 aAstart 1org aAstart a7FGtt 11001010 00000001 00000000 00000000 00010000 10111111 11111111 11111011 10000110 10000001 00000000 00000000 10000000 11000011 00000000 00000000 11000000 11100000 00000000 00001011 00000101 00000100 00010100 10111000

C*digo m(/uina56

[editar] Ejemplo para el 7C ntel 089:


#digo en lenguaje ensamblador 'ara =# Intel 80#92E
OR' @0B0& 9H=B =R0 INB 9H',=059H'

=059H'7

.esta s br tina es

ti)i6a*a

#LR =R0 #$L 9H' MOV R1,($L MOV R>,($& #INH R>,J0D&,=059H' #INH R1,JD@&,=059H' MOV ($=R,J0000& RH=

.0ara rea)i6ar na ! enta *e .0,5 seg n*os me*iante )a .interr 0!i"n *e) timer 01

[editar] Ejemplo para el )icroc-ip P C:1;0<


#digo en lenguaje ensamblador 'ara el microcontrolador 2:.86 de -icrochi'E
OR' 0 Ini!io bs5 !)r5 mo:)L mo:L5 b!5 $rin!i0a) mo:5 mo:L5 mo:5 bt5s! goto s b)L bt5ss HN(

9=A=K9,R$0 $OR=B 0MNN $OR=A 9=A=K9,R$0 $OR=A,O #onta*or #onta*or,N 9=A=K9,P $ nto(e!ima) *3;3 9=A=K9,#

Lenguaje ensamblador , programas, ejm

Anda mungkin juga menyukai