Está en la página 1de 13

Nivel

Segn el contexto, el trmino nivel se puede referir a:

En su sentido ms general nivel hace referencia a una "altura" relativa a otra altura;
generalmente se toma como punto de referencia una base. Cuando la altura es
geogrfica, se denomina altitud y se toma como base de referencia el nivel del mar.

Nivel de sistema hace referencia a la posicin relativa de


determinados conjuntos de elementos en su disposicin en diferentes planos
de organizacin de un sistema. Se sugiere de este modo una disposicin segn
una jerarqua; a su vez una jerarqua, o nivel determinado, puede ser considerado como
sistema, dentro del sistema ms general.

Ensamblador
El trmino ensamblador (del ingls assembler) se refiere a un tipo de programa
informtico que se encarga de traducir un fichero fuente escrito en un lenguaje
ensamblador, a un fichero objeto que contiene cdigo mquina, ejecutable directamente
por el microprocesador

Funcionamiento[editar]
El programa lee el fichero escrito en lenguaje ensamblador y sustituye cada uno de los
cdigos nemotcnicos que aparecen por su cdigo de operacin correspondiente en
sistema binario para la plataforma que se eligi como destino en las opciones especficas
del ensamblador.

Tipos de ensambladores[editar]
Artculo principal: Ensamblador de alto nivel

Podemos distinguir entre dos tipos de ensambladores:

Ensambladores bsicos. Son de muy bajo nivel, y su tarea consiste bsicamente en


ofrecer nombres simblicos a las distintas instrucciones, parmetros y cosas tales
como los modos.

Ensambladores modulares 32-bits o de alto nivel. Son ensambladores que


aparecieron como respuesta a una nueva arquitectura de procesadores de 32 bits,
muchos de ellos teniendo compatibilidad hacia atrs pudiendo trabajar con programas
con estructuras de 16 bits. Adems de realizar la misma tarea que los anteriores,
permitiendo tambin el uso de macros, permiten utilizar estructuras de programacin
ms complejas propias de los lenguajes de alto nivel.

Lenguaje ensamblador

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

El lenguaje ensamblador, o assembler (assembly language en ingls), es un lenguaje de


programacinde bajo nivel para los computadores, microprocesadores, microcontroladores y
otros circuitos integradosprogramables. Implementa una representacin simblica de
los cdigos de mquina binarios y otras constantes necesarias para programar
una arquitectura dada de CPU y constituye la representacin ms directa del cdigo
mquina especfico para cada arquitectura legible por un programador. Esta representacin es
usualmente definida por el fabricante de hardware, y est basada en los mnemnicos que
simbolizan los pasos de procesamiento (las instrucciones), los registros del procesador, las
posiciones dememoria y otras caractersticas del lenguaje. Un lenguaje ensamblador es por lo
tanto especfico de ciertaarquitectura de computador fsica (o virtual). Esto est en contraste
con la mayora de los lenguajes de programacin de alto nivel, que idealmente son porttiles.
Un programa utilitario llamado ensamblador es usado para traducir sentencias del lenguaje
ensamblador al cdigo de mquina del computador objetivo. El ensamblador realiza una
traduccin ms o menos isomorfa (un mapeo de uno a uno) desde las sentencias
mnemnicas a las instrucciones y datos de mquina. Esto est en contraste con los lenguajes
de alto nivel, en los cuales una sola declaracin generalmente da lugar a muchas
instrucciones de mquina.

Muchos sofisticados ensambladores ofrecen mecanismos adicionales para facilitar el


desarrollo del programa, controlar el proceso de ensamblaje, y la ayuda de depuracin.
Particularmente, la mayora de los ensambladores modernos incluyen una facilidad
de macro (descrita ms abajo), y se llaman macro ensambladores.
Fue usado principalmente en los inicios del desarrollo de software, cuando an no se contaba
con potentes lenguajes de alto nivel y los recursos eran limitados. Actualmente se utiliza con
frecuencia en ambientes acadmicos y de investigacin, especialmente cuando se requiere la
manipulacin directa de hardware, alto rendimiento, o un uso de recursos controlado y
reducido. Tambin es utilizado en el desarrollo de controladores de dispositivo (en
ingls, device drivers) y en el desarrollo de sistemas operativos, debido a la necesidad del
acceso directo a las instrucciones de la mquina. Muchos dispositivos programables (como los
microcontroladores) an cuentan con el ensamblador como la nica manera de ser
manipulados.

Participa del concurso de edicin La Mujer que nunca conociste!


Crea y edita biografas de mujeres.

Lenguaje ensamblador
Para otros usos de este trmino, vase Ensamblador (desambiguacin).

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

El lenguaje ensamblador, o assembler (assembly language en ingls), es un lenguaje de


programacinde bajo nivel para los computadores, microprocesadores, microcontroladores y
otros circuitos integradosprogramables. Implementa una representacin simblica de
los cdigos de mquina binarios y otras constantes necesarias para programar
una arquitectura dada de CPU y constituye la representacin ms directa del cdigo
mquina especfico para cada arquitectura legible por un programador. Esta representacin es
usualmente definida por el fabricante de hardware, y est basada en los mnemnicos que
simbolizan los pasos de procesamiento (las instrucciones), los registros del procesador, las
posiciones dememoria y otras caractersticas del lenguaje. Un lenguaje ensamblador es por lo
tanto especfico de ciertaarquitectura de computador fsica (o virtual). Esto est en contraste
con la mayora de los lenguajes de programacin de alto nivel, que idealmente son porttiles.
Un programa utilitario llamado ensamblador es usado para traducir sentencias del lenguaje
ensamblador al cdigo de mquina del computador objetivo. El ensamblador realiza una
traduccin ms o menos isomorfa (un mapeo de uno a uno) desde las sentencias
mnemnicas a las instrucciones y datos de mquina. Esto est en contraste con los lenguajes
de alto nivel, en los cuales una sola declaracin generalmente da lugar a muchas
instrucciones de mquina.
Muchos sofisticados ensambladores ofrecen mecanismos adicionales para facilitar el
desarrollo del programa, controlar el proceso de ensamblaje, y la ayuda de depuracin.
Particularmente, la mayora de los ensambladores modernos incluyen una facilidad
de macro (descrita ms abajo), y se llaman macro ensambladores.
Fue usado principalmente en los inicios del desarrollo de software, cuando an no se contaba
con potentes lenguajes de alto nivel y los recursos eran limitados. Actualmente se utiliza con
frecuencia en ambientes acadmicos y de investigacin, especialmente cuando se requiere la
manipulacin directa de hardware, alto rendimiento, o un uso de recursos controlado y
reducido. Tambin es utilizado en el desarrollo de controladores de dispositivo (en
ingls, device drivers) y en el desarrollo de sistemas operativos, debido a la necesidad del
acceso directo a las instrucciones de la mquina. Muchos dispositivos programables (como los
microcontroladores) an cuentan con el ensamblador como la nica manera de ser
manipulados.

Caractersticas[editar]

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[editar]
Artculo principal: Ensamblador

Generalmente, 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 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[editar]
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 de 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 pasos ms
fciles de leer y mantener.2

Ensambladores de alto nivel[editar]


Los ms sofisticados ensambladores de alto nivel proporcionan abstracciones del lenguaje
tales como:

Estructuras de control avanzadas

Declaraciones e invocaciones de procedimientos/funciones de alto nivel

Tipos de datos abstractos de alto nivel, incluyendo las estructuras/records, uniones,


clases, y conjuntos

Procesamiento de macros sofisticado (aunque est disponible en los ensambladores


ordinarios desde finales de 1960 para el IBM/360, entre otras mquinas)

Caractersticas de programacin orientada a objetos

Uso del trmino[editar]


Note que, en el uso profesional normal, el trmino ensamblador es frecuentemente usado
tanto para referirse al lenguaje ensamblador como tambin al programa ensamblador (que
convierte el cdigo fuente escrito en el lenguaje ensamblador a cdigo objeto que luego
ser enlazado para producir lenguaje de mquina). Las dos expresiones siguientes utilizan el
trmino "ensamblador":

Lenguaje[editar]
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 a 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[editar]
La mayora de las 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 una CPU a otra. Una 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. Otras CPU puede que no tengan operaciones de punto flotante y habra que
hacer o conseguir bibliotecas que realicen esas operaciones.
Las instrucciones de la CPU pueden agruparse, de acuerdo a su funcionalidad, en:
Operaciones con enteros: (de 8, 16, 32 y 64 bits dependiendo de la arquitectura de la CPU,
en los sistemas muy viejos tambin de 12, 18, 24, 36 y 48 bits)
Estas son operaciones realizadas por la Unidad aritmtico lgica de la CPU

Operaciones aritmticas. Como suma, resta, multiplicacin, divisin, mdulo, cambio


de signo

Operaciones booleanas. Operaciones lgicas bit a bit como AND, OR, XOR, NOT

Operaciones de bits. Como desplazamiento o shift lgico y rotaciones u Operadores a


nivel de bits (hacia la derecha o hacia la izquierda, 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 la CPU, "mover datos" significa en realidad
copiar datos, desde un origen a un destino, sin que el dato desaparezca del origen.
Se pueden mover valores:

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


Operaciones de pila (stack, en ingls):

PUSH (escribe datos hacia el tope de la pila)

POP (lee datos desde el tope de la pila)


Operaciones de entrada/salida:
Son operaciones que mueven datos de un registro, desde y hacia un puerto; o de la
memoria, desde y hacia un puerto

INPUT Lectura desde un puerto de entrada

OUTPUT Escritura hacia un puerto de salida


Operaciones para el control del flujo del programa:

Llamadas y retornos de subrutinas

Llamadas y retornos de interrupciones

Saltos condicionales de acuerdo al resultado de la


comparaciones

Saltos incondicionales

Operaciones con nmeros reales:


El estndar para las operaciones con nmeros reales en las
CPU est definido por el IEEE 754.
Una CPU puede tener operaciones de punto flotante con
nmeros reales mediante el coprocesador numrico (si lo
hay), como las siguientes:

Operaciones aritmticas. Suma, resta, multiplicacin,


divisin, cambio de signo, valor absoluto, parte entera

Operaciones trascendentales

Operaciones
trigonomtricas. Seno, coseno, tangente, arcotangent
e

Operaciones con logaritmos, potencias y races

Otras

El lenguaje ensamblador tiene mnemnicos para cada una


de las instrucciones de la 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[editar]
La transformacin del lenguaje ensamblador en cdigo
mquina la realiza un programa ensamblador, y la traduccin
inversa la puede efectuar un desensamblador. A diferencia de
los lenguajes de alto nivel, aqu hay usualmente una
correspondencia 1 a 1 entre las instrucciones simples del
ensamblador y el lenguaje de mquina. Sin embargo, en
algunos casos, un ensamblador puede proveer "pseudo
instrucciones" que se expanden en un cdigo de mquina
ms extenso a fin de proveer la funcionalidad necesaria 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 sintxis de su lenguaje
ensamblador. Por ejemplo, en un lenguaje ensamblador para
la arquitectura x86, se puede expresar la instruccin para
mover 5 al registro AL de la siguiente manera: MOV AL, 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 manera diferente. 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 basado en
microprocesador de modo sencillo ya que para hacer un uso
eficiente del mismo, hay que conocer a fondo
el microprocesador, los registros de trabajo de que dispone,
la estructura de la memoria, y muchas cosas ms referentes
a su estructura bsica de funcionamiento.

Ejemplos[editar]
Un programa escrito en lenguaje ensamblador consiste en
una serie de instrucciones que corresponden al flujo de
rdenes ejecutables por un microprocesador.
Por ejemplo, en el lenguaje ensamblador para un
procesador x86:
La sentencia

MOV AL, 61h

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 de mquina

Binario: 10110000 01100001 (hexadecimal: B61 )

El mnemnico MOV es un cdigo de operacin u "opcode".


El opcode es seguido por una lista de argumentos
o parmetros, completando una tpica instruccin de
ensamblador. En el ejemplo, AL es un registro 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 contiene empaquetado la
instruccin MOV y el cdigo del registro hacia donde se va a
mover el dato:

1011

0000

01100001

+---- Nmero 61h en binario

+--- Registro AL

+-------- Instruccin MOV

En el segundo byte se especifica el nmero 61h, escrito en


binario como 01100001 , que se asignar al registro AL ,
quedando la sentencia ejecutable como:

10110000 01100001

La cual puede ser entendida y ejecutada directamente por el


procesador.

Diseo del lenguaje[editar]


Elementos bsicos[editar]
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 (pseudoOp), 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

Mnemnicos de opcode y mnemnicos


extendidos[editar]
A diferencia de las instrucciones (sentencias) de
los lenguajes de alto nivel, las instrucciones en el lenguaje
ensamblador son generalmente muy simples. Generalmente,
una mnemnico es un nombre simblico para una sola
instruccin en lenguaje de mquina ejecutable (un opcode), y
hay por lo menos un mnemnico de opcode definido para
cada instruccin en lenguaje de mquina. Cada instruccin
consiste tpicamente en una operacin u opcode ms cero o
ms operandos. La mayora de las instrucciones refieren a un
solo valor, o a un par de valores. Los operandos pueden ser
inmediatos (tpicamente valores de un byte, codificados en la
propia instruccin), registros especificados en la instruccin,
implcitos o las direcciones de los datos localizados en otra
parte de la memoria. Esto est determinado por la
arquitectura subyacente del procesador, el ensamblador
simplemente refleja cmo trabaja esta arquitectura. Los
mnemnicos extendidos son frecuentemente usados para
especificar una combinacin de un opcode con un operando

especfico, ej, el ensamblador del System/360 usa a B como


un mnemnico 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 de instrucciones, a
menudo para propsitos no obvios con respecto al nombre
de la instruccin. Por ejemplo, muchos CPU no tienen una
instruccin explcita de NOP (No Operacin), pero tienen
instrucciones 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 para codificar la
instruccin XCHG AX,AX . Algunos desensambladores
reconocen esto y decodificarn la instruccin XCHG
AX,AX como NOP . Similarmente, los ensambladores de IBM

para el System/360 usan los mnemnicos


extendidos NOP y NOPR con las mscaras cero
para BC y BCR .
Algunos ensambladores tambin soportan simples
macroinstrucciones incorporadas que generan dos o ms
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 se expande se producen dos
instrucciones de 8 bits que equivalen a la
simulada de 16 bits.
Secciones de datos[editar]
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

instruccin

También podría gustarte