Documente Academic
Documente Profesional
Documente Cultură
ARQUITECTURA DE HARDWARE
GRUPO 01
CATEDRATICO: Ing. Jorge Alberto Minero Chvez
LENGUAJE
ENSAMBLADOR
Alumnos:
Silvia Lineth Urrutia Santos
UC100507
CC101604
PM101604
RR101406
Contenido
Contenido............................................................................................................................ 2
Lenguaje ensamblador........................................................................................................2
Caractersticas................................................................................................................... 4
Programa ensamblador.......................................................................................................4
Nmero de pasos................................................................................................................ 5
Ensambladores de alto nivel................................................................................................5
Uso del trmino................................................................................................................... 6
Lenguaje............................................................................................................................. 6
Instrucciones de CPU.......................................................................................................... 6
Ensamblado........................................................................................................................ 8
Elementos bsicos.............................................................................................................. 9
Mnemnicos de opcode y mnemnicos extendidos............................................................9
Secciones de datos...........................................................................................................10
Directivas del ensamblador...............................................................................................10
Macros.............................................................................................................................. 11
Soporte para programacin estructurada..........................................................................14
Uso del lenguaje ensamblador..........................................................................................14
Uso actual......................................................................................................................... 16
Aplicaciones tpicas...........................................................................................................18
Detalles adicionales...........................................................................................................19
RESUMEN........................................................................................................................ 21
Lenguaje ensamblador
Caractersticas
El cdigo escrito en lenguaje ensamblador posee una cierta dificultad de ser entendido ya
que su estructura se acerca al lenguaje mquina, es decir, es un lenguaje de bajo nivel.
El lenguaje ensamblador es difcilmente portable, es decir, un cdigo escrito para un
microprocesador, puede necesitar ser modificado, para poder ser usado en otra mquina
distinta. Al cambiar a una mquina con arquitectura diferente, generalmente es necesario
reescribirlo completamente.
Los programas hechos por un programador experto en lenguaje ensamblador son
generalmente mucho ms rpidos y consumen menos recursos del sistema (memoria
RAM y ROM) que el programa equivalente compilado desde un lenguaje de alto nivel. Al
programar cuidadosamente en lenguaje ensamblador se pueden crear programas que se
ejecutan ms rpidamente y ocupan menos espacio que con lenguajes de alto nivel.
Con el lenguaje ensamblador se tiene un control muy preciso de las tareas realizadas por
un microprocesador por lo que se pueden crear segmentos de cdigo difciles y/o muy
ineficientes de programar en un lenguaje de alto nivel, ya que, entre otras cosas, en el
lenguaje ensamblador se dispone de instrucciones del CPU que generalmente no estn
disponibles en los lenguajes de alto nivel.
Tambin se puede controlar el tiempo en que tarda una rutina en ejecutarse, e impedir
que se interrumpa durante su ejecucin.
Programa ensamblador
Tpicamente, un programa ensamblador (assembler en ingls) moderno crea cdigo
objeto traduciendo instrucciones mnemnicas de lenguaje ensamblador en opcodes, y
resolviendo los nombres simblicos para las localizaciones de memoria y otras
entidades.1 El uso de referencias simblicas es una caracterstica clave del lenguaje
ensamblador, evitando tediosos clculos y actualizaciones manuales de las direcciones
despus de cada modificacin del programa. La mayora de los ensambladores tambin
incluyen facilidades de macros para realizar sustitucin textual - ej. generar cortas
secuencias de instrucciones como expansin en lnea en vez de llamar a subrutinas.
Los ensambladores son generalmente ms simples de escribir que los compiladores para
los lenguajes de alto nivel, y han estado disponibles desde los aos 1950. Los
ensambladores modernos, especialmente para las arquitecturas basadas en RISC, tales
4
como MIPS, Sun SPARC, y HP PA-RISC, as como tambin para el x86 (-64), optimizan
la planificacin de instrucciones para explotar la segmentacin del CPU eficientemente.
En los compiladores para lenguajes de alto nivel, son el ltimo paso antes de generar el
cdigo ejecutable.
Nmero de pasos
Hay dos tipos de ensambladores basados en cuntos pasos a travs de la fuente son
necesarios para producir el programa ejecutable.
Los ensambladores de un solo paso pasan a travs del cdigo fuente una vez y asumen
que todos los smbolos sern definidos antes de cualquier instruccin que los refiera.
Los ensambladores del dos pasos crean una tabla con todos los smbolos y sus valores
en el primer paso, despus usan la tabla en un segundo paso para generar cdigo. El
ensamblador debe por lo menos poder determinar la longitud de cada instruccin en el
primer paso para que puedan ser calculadas 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 en un momento dados los avances en velocidad y capacidades del
computador. La ventaja del ensamblador de 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 los programas de
ensamblador de dos paso ms fciles leer y mantener.2
Lenguaje
El lenguaje ensamblador refleja directamente la arquitectura y
las instrucciones en lenguaje de mquina de la CPU, y pueden ser muy diferentes de una
arquitectura de CPU a otra. Cada arquitectura de microprocesador tiene su propio
lenguaje de mquina, y en consecuencia su propio lenguaje ensamblador 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 tener diferente cantidad de registros, y distinta representacin de los tipos de
datos en memoria. Aunque la mayora de los microprocesadores son capaces de cumplir
esencialmente las mismas funciones, la forma en que lo hacen difiere y los respectivos
lenguajes ensamblador reflejan tal diferencia.
Instrucciones de CPU
La mayora de los CPU tienen ms o menos los mismos grupos de instrucciones, aunque
no necesariamente tienen todas las instrucciones de cada grupo. Las operaciones que se
pueden realizar varan 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, por ejemplo, y haba que hacer subrutinas
para realizar esas operaciones. Otros CPU puede que no tengan operaciones 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:
Estas son operaciones realizadas por la Unidad aritmtico lgica del CPU
6
Operaciones booleanas. Operaciones lgicas bit a bit como AND, OR, XOR, NOT
Comparaciones
Operaciones de stack:
Operaciones de entrada/salida:
Saltos incondicionales
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 coprocesador numrico (si lo hay), como las siguientes:
Operaciones trascendentales
Otras
El lenguaje ensamblador tiene mnemnicos para cada una de las instrucciones del CPU
en adicin a otros mnemnicos a ser procesados por el programa ensamblador (como por
ejemplo macros y otras sentencias en tiempo de ensamblado).
Ensamblado
La transformacin del lenguaje ensamblador en cdigo mquina la realiza un
programa ensamblador, y la traduccin inversa la puede efectuar undesensamblador. A
diferencia de los lenguajes de alto nivel, aqu hay usualmente una correspondencia 1 a 1
entre las instrucciones simples del ensamblador y el lenguaje de mquina. Sin embargo,
en algunos casos, un ensamblador puede proveer "pseudo instrucciones" que se
expanden en un cdigo de mquina ms extenso a fin de proveer la funcionalidad
necesaria y simplificar la programacin. Por ejemplo, para un cdigo mquina condicional
como "si X mayor o igual que", un ensamblador puede utilizar una pseudoinstruccin al
grupo "haga si menor que", y "si = 0" sobre el resultado de la condicin anterior. Los
Ensambladores ms completos tambin proveen un rico lenguaje de macros que se utiliza
para generar cdigo ms complejo y secuencias de datos.
Para el mismo procesador y el mismo conjunto de instrucciones de CPU, diferentes
programas ensambladores pueden tener, cada uno de ellos, variaciones y diferencias en
el conjunto de mnemnicos o en la sintaxis de su lenguaje ensamblador. Por ejemplo, en
8
Elementos bsicos
Hay un grado grande de diversidad en la manera en que los autores de los
ensambladores categorizan las sentencias 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 para definir las operaciones del programa:
Mnemnicos de opcode
Secciones de datos
Directivas de ensamblador
Secciones de datos
Hay instrucciones usadas para definir elementos de datos para manejar datos y variables.
Definen el tipo de dato, la longitud y la alineacin de los datos. Estas instrucciones
tambin pueden definir si los datos estn disponibles para programas exteriores
(programas ensamblados separadamente) o solamente para el programa en el cual la
seccin de datos est definida. Algunos ensambladores clasifican estas instruccion
Macros
Muchos ensambladores soportan macros predefinidos, y otras soportan macros definidos
(y repetidamente redefinibles) por el programador que implican secuencias de lneas del
texto en las cuales las variables y las constantes estn empotradas. Esta secuencia de
lneas de texto puede incluir opcodes o directivas. 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 a ese macro,
11
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 de reemplazo).
Puesto que las macros pueden tener nombres "cortos" pero se expanden a varias o de
hecho muchas lneas de cdigo, pueden ser usados para hacer que los programas en
lenguaje ensamblador parezcan ser mucho ms cortos, requiriendo menos lneas de
cdigo fuente, como sucede con los lenguajes de alto nivel. Tambin pueden ser usados
para aadir niveles de estructura ms altos a los programas ensamblador, opcionalmente
introducen cdigo de depuracinempotrado va parmetros y otras caractersticas
similares.
Muchos ensambladores tienen macros incorporados (o predefinidos) para las llamadas de
sistema y otras secuencias especiales de cdigo, tales como la generacin y el
almacenamiento de los datos realizados a travs de avanzadas
operaciones bitwise y booleanas usadas en juegos, software de seguridad, gestin de
datos, y criptografa.
Los macro ensambladores a menudo permiten a los macros tomar parmetros. Algunos
ensambladores incluyen lenguajes macro muy sofisticados, incorporando elementos de
lenguajes de alto nivel tales como parmetros opcionales, variables simblicas,
condiciones, manipulaciones de stringsoperaciones aritmticas, todos usables durante la
ejecucin de un macro dado, y permitiendo a los macros guardar el contexto o
intercambiar informacin. As un macro puede generar un gran nmero de instrucciones o
definiciones de datos en lenguaje ensamblador, basadas en los argumentos del macro.
Esto pudiera ser usado para generar, por ejemplo, estructuras de datos de estilo de
records o bucles "desenrrollados", o podra generar algoritmos enteros basados en
parmetros complejos. Una organizacin, usando lenguaje ensamblador, que ha sido
fuertemente extendido usando tal suite de macros, puede ser considerada que se est
trabajando en un lenguaje de alto nivel, puesto que tales programadores no estn
trabajando con los elementos conceptuales de ms bajo nivel del computador.
Las macros fueron usados para adaptar sistemas de software de gran escala para
clientes especficos en la era del mainframe, y tambin fueron usados por el personal del
cliente para satisfacer las necesidades de 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 en los aos 1970 y todava corre con muchos sistemas de reservaciones
computarizados (CRS) y sistemas de tarjeta de crdito de hoy.
Tambin es posible usar solamente las habilidades de procesamiento de macros de un
ensamblador para generar cdigo escrito en lenguajes completamente diferentes, por
ejemplo, para generar una versin de un programa en COBOL usando un programa
12
los aos 1980 (1990 en los microcomputadores), su uso haba sido en gran parte
suplantado por los lenguajes de alto nivel,[cita requerida] en la bsqueda de una
mejorada productividad en programacin. Hoy en da, aunque el lenguaje ensamblador es
casi siempre manejado y generado por los compiladores, todava se usa para la
manipulacin directa del hardware, acceso a instrucciones especializadas del procesador,
o para resolver problemas de desempeo crtico. Los usos tpicos son drivers de
dispositivo, sistemas embebidos de 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 aceptacin mplia del lenguaje de programacin C en los aos
1970 y principios de los 1980. Tambin, muchas aplicaciones comerciales fueron escritas
en lenguaje ensamblador, incluyendo una gran cantidad del software escrito por grandes
corporaciones para mainframes de IBM. Los
lenguajes COBOL y FORTRAN eventualmente desplazaron mucho de este trabajo,
aunque un nmero de organizaciones grandes conservaran las infraestructuras de
aplicaciones en lenguaje ensamblador hasta bien entrados los aos 1990.
La mayora de los primeros microcomputadores confiaron en el lenguaje ensamblador
codificado a mano, incluyendo la mayora de los sistemas operativos y de las aplicaciones
grandes. Esto era porque estos sistemas tenan limitaciones severas de recursos,
impusieron idiosincrticas arquitecturas de memoria y de pantalla, y proporcionaron
servicios de sistema limitados y con errores. Quizs ms importante era la falta de
compiladores de primera clase de lenguajes de alto nivel adecuados para el uso en el
microcomputador. Un factor psicolgico tambin pudo haber jugado un papel: la primera
generacin 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 hacer programas con mnimo tamao, mnima sobrecarga, mayor
velocidad y confiabilidad.
Los tpicos ejemplos de programas grandes en lenguaje ensamblador de ese tiempo son
los sistemas operativos IBM PC DOS y aplicaciones tempranas tales como la hoja de
clculo Lotus 1-2-3, y casi todos los juegos populares para la familia Atari 800 de
computadores personales. Incluso en los aos 1990, la mayora de los videojuegos de
cnsola fueron escritos en ensamblador, incluyendo la mayora de 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 a usar para obtener el mejor desempeo del Sega Saturn, una cnsola para
la cual era notoriamente desafiante desarrollar y programar juegos.8 El popular juego
dearcade NBA Jam (1993) es otro ejemplo. El ensamblador ha sido por largo trecho, el
lenguaje de desarrollo primario en los computadores hogareosCommodore 64, Atari ST,
as como el ZX Spectrum. Esto fue as en gran parte porque los dialectos del BASIC en
estos sistemas ofrecieron insuficiente velocidad de ejecucin, as como insuficientes
caractersticas para aprovechar completamente el hardware disponible. Algunos sistemas,
15
Uso actual
Siempre ha habido debates sobre la utilidad y el desempeo del lenguaje ensamblador
relativo a lenguajes 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 de alto nivel en cdigo que puede
correr tan rpidamente como el lenguaje ensamblador escrito a mano, a pesar de los
contraejemplos que pueden ser encontrados.10 1112 La complejidad de los procesadores
modernos y del subsistema de memoria hace la optimizacin efectiva cada vez ms difcil
para los compiladores, as como para los programadores en
ensamblador.13 14 Adicionalmente, y para la consternacin de los amantes de la
eficiencia, el desempeo cada vez mayor del procesador ha significado que la mayora de
los CPU estn desocupados la mayor parte del tiempo, con retardos causados por
embotellamientos predecibles tales como operaciones de entrada/salida y paginacin de
memoria. Esto ha hecho que la velocidad de ejecucin cruda del cdigo no sea un
problema para muchos programadores.
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
ejecutarse sin recursos a componentes de tiempo de ejecucin o abibliotecas asociadas
con un lenguaje de alto nivel; sta es quizs la situacin ms comn. Son programas
empotrados que solo almacenan una pequea cantidad de memoria y el dispositivo est
dirigido para hacer tareas para un simple propsito. Ejemplos consisten en telfonos,
sistemas de combustible e ignicin para automviles, sistemas de control del aire
acondicionado, sistemas de seguridad, y sensores
interactuando directamente con el hardware, por ejemplo en drivers de
dispositivo y manejadores de interrupcin
16
17
se escribe software compilador que genera cdigo ensamblador, y por lo tanto los
desarrolladores deben ser programadores de lenguaje ensamblador
Aplicaciones tpicas
El lenguaje ensamblador hard-coded es tpicamente usado en el ROM de arranque del
sistema (BIOS en los sistemas compatible IBM PC). Este cdigo de bajo nivel es usado,
entre otras cosas, para inicializar y 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 a otro cdigo,
tpicamente escrito en lenguajes de alto nivel; pero el cdigo corriendo inmediatamente
18
Detalles adicionales
Para un determinado computador personal, mainframe, sistema empotrado, y cnsola de
juegos, tanto del pasado como del presente, ha sido escrito al menos uno, y posiblemente
docenas de ensambladores. Para algunos ejemplos, vea la lista de ensambladores.
En los sistemas Unix, el ensamblador es llamado tradicionalmente as, aunque no es un
simple cuerpo de cdigo, siendo tpicamente escrito uno nuevo por cada port. Un nmero
de variantes de Unix usan el GAS
Dentro de los grupos de procesadores, cada ensamblador tiene su propio dialecto. A
veces, algunos ensambladores pueden leer el dialecto de otro, por ejemplo, TASM puede
leer el viejo cdigo del MASM, pero no al revs. FASM y NASM tienen una sintaxis
similar, pero cada uno soporta diferentes macros que pueden ser difcil de trasladar de
19
uno al otro. Las cosas bsicas son siempre las mismas, pero las caractersticas
avanzadas sern diferentes20
Tambin, los lenguajes ensambladores a veces pueden ser portables a travs de
diferentes sistemas operativos en el mismo tipo de CPU. Las convenciones de
llamadas entre los sistemas operativos con frecuencia difieren ligeramente o en nada. y
con cuidado es posible ganar portabilidad en el lenguaje ensamblador, usualmente al
enlazar con una biblioteca de lenguaje C que no cambia entre sistemas operativos.
Un simulador de conjunto de instrucciones(que idealmente sera escrito en lenguaje
ensamblador) puede, en teora, procesar el cdigo
objeto/binario de cualquier ensamblador) para lograr la portabilidad incluso a travs
de plataformas (con una sobrecargue no mayor que la de un interpretador
de bytecode tpico). Esto es esencialmente lo que logra el microcdigo cuando una
plataforma de hardware cambia internamente.
Por ejemplo, muchas cosas en libc dependen del preprocesador para hacer, al programa
antes de compilar, cosas que son especficas del sistema operativo o especficas del C.
De hecho, algunas funciones y smbolos ni siquiera estn garantizados que existan fuera
del preprocesador. Peor an, el tamao 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 difieren incluso entre versiones
de Linux, haciendo imposible portar llamadas de funciones en libc diferentes de los que
toman simples enteros o punteros como parmetros. Para manejar estos problemas, el
proyecto FASMLIB 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, donde relativamente secciones cortas de cdigo en ensamblador puede ser
empotradas dentro del cdigo del lenguaje de alto nivel. El lenguaje Forth comnmente
contiene un ensamblador usado para codificar palabras.
La mayora de la gente usa un emulador para depurar sus programas en lenguaje
ensamblador.
20
RESUMEN
LENGUAJES DE BAJO NIVEL (ensamblador)
Son ms fciles de utilizar que los lenguajes mquina, pero al igual que ellos, dependen
de la mquina en particular. El lenguaje de bajo nivel por excelencia es el ensamblador. El
lenguaje ensamblador es el primer intento de sustituir el lenguaje maquina por otro ms
similar a los utilizados por las personas. Este intenta desflexibilizar la representacin de
los diferentes campos. Esa flexibilidad se consigue no escribiendo los campos en binario y
aproximando la escritura al lenguaje. A principios de la dcada de los 50 y con el fin de
facilitar la labor de los programadores, se desarrollaron cdigos mnemotcnicos para las
operaciones y direcciones simblicas. Los cdigos mnemotcnicas son los smbolos
alfabticos del lenguaje maquina. La computadora sigue utilizando el lenguaje maquina
para procesar los datos, pero los programas ensambladores traducen antes los smbolos
de cdigo de operacin especificados a sus equivalentes en el lenguaje maquina. En la
actualidad los programadores no asignan nmeros de direccin reales a los datos
simblicos, simplemente especifican donde quieren que se coloque la primera localidad
del programa y el programa ensamblador se encarga de lo dems, asigna localidades
tanto para las instrucciones como los datos. Estos programas de ensamble o
ensambladores tambin permiten a la computadora convertir las instrucciones en lenguaje
ensamblador del programador en su propio cdigo maquina. Un programa de
instrucciones escrito en lenguaje ensamblador por un programador se llama programa
fuente. Despus de que el ensamblador convierte el programa fuente en cdigo maquina
a este se le denomina programa objeto. Para los programadores es ms fcil escribir
instrucciones en un lenguaje ensamblador que en cdigo de lenguaje maquina pero es
posible que se requieran dos corridas de computadora antes de que se puedan utilizar las
instrucciones del programa fuente para producir las salidas deseadas.
El lenguaje de bajo nivel es el lenguaje de programacin que el ordenador puede
entender a la hora de ejecutar programas, lo que aumenta su velocidad de ejecucin,
pues no necesita un intrprete que traduzca cada lnea de instrucciones.
Visto a muy bajo nivel, los microprocesadores procesan exclusivamente seales
electrnicas binarias. Dar una instruccin a un microprocesador supone en realidad enviar
series de unos y ceros espaciadas en el tiempo de una forma determinada. Esta
secuencia de seales se denomina cdigo mquina. El cdigo representa normalmente
21
22