You are on page 1of 20

Unidad 3.

Optimizacin

3.1 Tipos de optimizacin.
3.1.1 Locales.
3.1.2 Ciclos.
3.1.3 Globales.
3.1.4 De mirilla.
3.2 Costos.
3.2.1 Costo de ejecucin. (memoria, registros, pilas)
3.2.2 Criterios para mejorar el cdigo.
3.2.3 Herramientas para el anlisis del flujo de datos.


Unidad: 3 Tema: Optimizacin


Competencia especfica de la unidad

Criterios de evaluacin de la Unidad
Conocer e Identificar los diferentes tipos de
optimizacin que permita eficientar el
cdigo intermedio.
Cuadro comparativo: 25%
Investigacin: 25%
Reporte de prctica: 40%


Actividades de aprendizaje

Cuadro comparativo: Elaborar un cuadro comparativo acerca de los tipos de optimizacin
(Locales, Ciclos, Globales, de Mirilla).(elaborado en clase)

Investigacin: Saber cuntos recursos y cunto tiempo consume cada instruccin de cdigo
intermedio()

Reporte de Practica: Integrar equipos de trabajo para analizar el cdigo intermedio de su caso
de estudio y si aplica realizar la optimizacin correspondiente; asimismo, se podra realizar con
cdigos intermedios existentes.(unir con la practica de la unidad 4)










Unidad 3. Optimizacin
(168897146-UNIDAD-III-OPTIMIZACION.pdf)
3.1 Tipos de optimizacin.
3.1.1 Locales.
3.1.2 Ciclos.
3.1.3 Globales.
3.1.4 De mirilla.
3.2 Costos.
3.2.1 Costo de ejecucin. (memoria, registros, pilas)
3.2.2 Criterios para mejorar el cdigo.
3.2.3 Herramientas para el anlisis del flujo de datos.

Unidad 7 Optimizacion

7.1 Tipos Optimizacin

La optimizacin va a depender del lenguaje de programacin y es
directamente proporcional al tiempo de compilacin; es decir, entre
ms optimizacin mayor tiempo de compilacin.
Las optimizaciones pueden realizarse de diferentes formas. Las
optimizaciones se realizan en base al alcance ofrecido por el
compilador de programacin y es directamente proporcional al
tiempo de compilacin; es decir, entre ms optimizacin mayor
tiempo de compilacin.
Como el tiempo de optimizacin es gran consumidor de tiempo
(dado que tiene que recorrer todo el rbol de posibles soluciones
para el proceso de optimizacin) la optimizacin se deja hasta la
fase de prueba final.
Algunos editores ofrecen una versin de depuracin y otra de
entrega o final.
La optimizacin es un proceso que tiene a minimizar o maximizar
alguna variable de rendimiento, generalmente tiempo, espacio,
procesador, etc.
Desafortunamente no existen optimizador que hagan un programa
ms rpido y que ocupe menor espacio.
La optimizacin se realiza reestructurando el cdigo de tal forma
que el nuevo cdigo generado tenga mayores beneficios. La
mayora de los compiladores tienen una optimizacin baja, se
necesita de compiladores especiales para realmente optimizar el
cdigo.
7.1.1 Locales Optimizacin

La optimizacin local se realiza sobre mdulos del programa. En la
mayora de las ocasiones a travs de funciones, mtodos,
procedimientos, clases, etc.
La caracterstica de las optimizaciones locales es que slo se ven
reflejados en dichas secciones.
Optimizacin Local
La optimizacin local sirve cuando un bloque de programa o
seccin es crtico por ejemplo: la E/S, la concurrencia, la rapidez y
confiabilidad de un conjunto de instrucciones.
Como el espacio de soluciones es ms pequeo la optimizacin
local es ms rpida.
Locales Optimizacin
La optimizacin local se realiza sobre mdulos del programa. En la
mayora de las ocasiones a travs de funciones, mtodos,
procedimientos, clases, etc.
La caracterstica de las optimizaciones locales es que slo se ven
reflejados en dichas secciones.
Optimizacin Local
La optimizacin local sirve cuando un bloque de programa o
seccin es crtico por ejemplo: la E/S, la concurrencia, la rapidez y
confiabilidad de un conjunto de instrucciones.
Como el espacio de soluciones es ms pequeo la optimizacin
local es ms rpida.

7.1.2 Bucles Optimizacin

Los ciclos son una de las partes ms esenciales en el rendimiento
de un programa dado que realizan acciones repetitivas, y si dichas
acciones estn mal realizadas, el problema se hace N veces ms
grandes.
La mayora de las optimizaciones sobre ciclos tratan de encontrar
elementos que no deben repetirse en un ciclo.
Ciclos
while(a == b)
{ int c = a; c = 5; ; }

En este caso es mejor pasar el int c =a; fuera del ciclo de ser
posible.
Ciclos
El problema de la optimizacin en ciclos y en generalradica es que
muy difcil saber el uso exacto de algunas instrucciones. Asque no
todo cdigo de proceso puede ser optimizado. Otros uso de la
optimizacin pueden ser el mejoramiento de consultas en SQL o en
aplicaciones remotas (sockets, E/S, etc.)

7.1.3 Globales Optimizacin

variables y eliminarlas toma su tiempo) pero consume ms
memoria.
Algunas optimizaciones incluyen utilizar como variables registros
del CPU, utilizar instrucciones en ensamblador.

7.1.4 De Mirilla Optimizacin

El pensamiento crtico es un elemento importante para el xito en la
vida (Huitt, 1993; Thomas y Smoot, 1994). Una Definicion Propuesta:
El pensamiento critico debe ser contrastado con el pensamiento no-
critico. pensamiento habitual o rutinario.
la lluvia de ideas
pensamiento creativo
pensamiento prejuicioso el pensamiento emocional el pensamiento
intuitivo
La definicion de Huitt:
El pensamiento crtico es la actividad mental disciplinada de evaluar
los argumentos o proposiciones haciendo juicios que puedan guiar
el desarrollo de las creencias y la toma de accin to:
7.1.4 Optimizacin de Mirilla
La optimizacin de mirilla trata deestructurar de manera eficiente el
flujo del programa, sobre todo en instrucciones de bifurcacin como
son las decisiones, ciclos y saltos de rutinas.
La idea es tener los saltos lo ms cerca de las llamadas, siendo el
salto lo ms pequeo posible.

7.2 Costos Optimizacin

Los costos son el factor ms importante a tomar en cuentaa la hora
de optimizar ya que en ocasiones la mejora obtenida puede verse no
reflejada en el programa final pero si ser perjudicial para el equipo
de desarrollo.
La optimizacin de una pequea mejora tal vez tenga una pequea
ganancia en tiempo o en espacio pero sale muy costosa en tiempo
en generarla.
Pero en cambio si esa optimizacin se hace por ejemplo en un
ciclo, la mejora obtenida puede ser N veces mayor por lo cual el
costo se minimiza y es benfico la mejora.
Por ejemplo: for(int i=0; i< 10000; i++); si la ganancia es de 30 ms
300s.



7.2.1 Costo de Ejecucin Optimizacin

Los costos de ejecucin son aquellos que vienen implcitos al
ejecutar el programa.
En algunos programas se tiene un mnimo para ejecutar el
programa, por lo que el espacio y la velocidad del
microprocesadores son elementos que se deben optimizar para
tener un mercado potencial ms amplio.
Las aplicaciones multimedios como los videojuegos tienen un
costo de ejecucin alto por lo cual la optimizacin de su desempeo
es crtico, la gran mayora de las veces requieren de procesadores
rpidos (e.g. tarjetas de video) o de mucha memoria.
Otro tipo de aplicaciones que deben optimizarse son las
aplicaciones para dispositivos mviles.
Los dispositivos mviles tiene recursos ms limitados que un
dispositivo de cmputo convencional razn por la cual, el mejor uso
de memoriay otros recursos de hardware tiene mayor rendimiento.
En algunos casos es preferible tener la lgica del negocio ms
fuerte en otros dispositivos y hacer uso de arquitecturas
descentralizadas como cliente/servidor o P2P.

7.2.2 Criterios para Mejorar Cdigo

La mejor manera de optimizar el cdigo es hacer ver a los
programadores que optimicen su cdigo desde el inicio, el problema
radica en que el costo podra ser muy grande ya que tendra que
codificar ms y/o hacer su cdigo mas legible.
Los criterios de optimizacin siempre estn definidos por el
compilador.
Muchos de estos criterios pueden modificarse con directivas del
compilador desde el cdigo o de manera externa.
Este proceso lo realizan algunas herramientas del sistema como
los ofuscadores para cdigomvil y cdigo para dispositivos
mviles.

7.2.3 Herramientas para Anlisis del Flujo de Datos

Existen algunas herramientas que permiten el anlisis de los flujos
de datos, entre ellas tenemos los depuradores y desambladores.
La optimizacin al igual que la programacin es un arte y no se ha
podido sistematizar del todo.



Unidad 3. Optimizacin
3.1.1 Locales

Reacondicionamiento de operadores
Cambiar orden de evaluacin aplicando propiedades conmutativa, asociativa y distributiva.
V:= W * X *( Y + Z )
=
V := ( Y + Z ) * W * X
Cdigo no optimizado, con 7 lneas de cdigo.
1. MOV AX, W
2. MUL AX, X
3. MOV t1, AX
4. MOV AX, Y
5. ADD AX, Z
6. MUL AX, t1
7. MOV V, AX
Cdigo optimizado a solo 5 lneas de cdigo.
1. MOV AX, Y
2. ADD AX, Z
3. MUL AX, W
4. MUL AX, X
5. MOV V, AX


3.1.2 Ciclos
Factorizacin de expresiones invariantes
Expresiones invariantes de bucle: expresiones cuyo valor es constante durante toda la
ejecucin del bucle

>

incuyen constantes y/o variables no modi_cadas en el cuerpo del bucle

Principio: Mover expresiones invariantes desde el cuerpo hasta la cabeza del bucle
-> al sacarlas del bucle, pueden quedar dentro de otro bucle externo)
-> repetir proceso.


Ejemplos:
while (i
>

Algunas optimizaciones son difciles de implementar
Algunas optimizaciones son costosas en trminos de tiempo de compilacin
La optimizacin ms elaborada es difcil y costosa

Meta: Mejora Mxima con costo mnimo

Los costos son el factor ms importante a tomar en cuenta a la hora de optimizar ya que
en ocasiones la mejora obtenida puede verse no reflejada en el programa final pero si
ser perjudicial para el equipo de desarrollo.
La optimizacin de una pequea mejora tal vez tenga una pequeaganancia en tiempo
o en espacio pero sale muy costosa en tiempo en generarla.
Pero en cambio si esa optimizacin se hace por ejemplo en un ciclo, la mejora obtenida
puede ser N veces mayor por lo cual el costo se minimiza y es benfico la mejora.
Por ejemplo: for(int i=0; i < 10000; i++); si la ganancia es de 30 ms 300s

3.2.1 Costo de ejecucin

Los costos de ejecucin son aquellos que vienen implcitos al ejecutar el
programa.


En algunos programas se tiene un mnimo para ejecutar el programa, por lo que
el espacio y la velocidad de microprocesadores son elementos que se deben
optimizar para tener un mercado potencial ms amplio.


Las aplicaciones multimedia como los videojuegos tienen un costo de ejecucin
alto por lo cual la optimizacin de su desempeo es crtico, la gran mayora de las
veces requieren de procesadores rpidos (e.g. tarjetas de video) o de mucha
memoria.


Otro tipo de aplicaciones que deben optimizarse son las aplicaciones para
dispositivos mviles.


Los dispositivos mviles tiene recursos ms limitados que un dispositivo de
cmputo convencional razn por la cual, el mejor uso de memoria y otros recursos
de hardware tiene mayor rendimiento.


En algunos casos es preferible tener la lgica del negocio ms fuerte en otros
dispositivos y hacer uso de arquitecturas descentralizadas como cliente/servidor
o P2P.

3.2.2 Criterios para mejorar el cdigo

La mejor manera de optimizar el cdigo es hacer vera los programadores que
optimicen su cdigo desde el inicio, el problema radica en que el costo podra ser
muy grande ya que tendra que codificar ms y/o hacer su cdigo mas legible.
Los criterios de optimizacin siempre estn definidos por el compilador

Criterios de optimizacin

Muchos de estos criterios pueden modificarse con directivas del compilador desde
el cdigo o de manera externa.
Este proceso lo realizan algunas herramientas del sistema como los ofuscadores
para cdigo mvil y cdigo para dispositivos mviles.

3.2.3 Herramientas para el anlisis del flujo de datos

La optimizacin al igual que la programacin es un arte y no se ha podido
sistematizar del todo.
Existen algunas herramientas que permiten el anlisis de los flujos de datos, entre
ellas tenemos:

Depurador
Es una aplicacin que permite correr otros programas, permitiendo al usuario ejercer
cierto control sobre los mismos a medida que los estos se ejecutan, y examinar el estado
del sistema (variables, registros, banderas, etc.) en el momento en que se presente algn
problema. El propsito final de un depurador consiste en permitir al usuario observar y
comprender lo que ocurre "dentro" de un programa mientras el mismo es ejecutado.
En los sistemas operativos UNIX/LINUX, el depurador ms comnmente utilizado es gdb,
es decir el depurador de GNU. ste ofrece una cantidad muy extensa y especializada de
opciones. Es muy importante entender el hecho de que un depurador trabajasobre
archivos ejecutables. Esto quiere decir que el mismo funciona de forma independiente al
lenguaje en que se escribi el programa original, sea ste lenguaje ensamblador o un
lenguaje de medio o alto nivel como C.

Desamblador
Es un programa de computadora que traduce el lenguaje de mquina a lenguaje
ensamblador, la operacin inversa de la que hace el ensamblador. Un desensamblador
difiere de de un decompilador, en que ste apunta a un lenguaje de alto nivel en vez de
al lenguaje ensamblador.

Diagrama de flujo de datos
Es una herramienta de modelizacin que permite describir, de un sistema, la
transformacin de entradas en salidas; el DFD tambin es conocido con el nombre de
Modelo de Procesos de Negocios (BPM, Business Process Model).

Diccionario de datos
El Diccionario de Datos es un listado organizado de todos los elementos de datos que
son pertinentes para el sistema, con definiciones precisas y rigurosas que le permite al
usuario y al proyectista del sistema tener una misma comprensin de las entradas, de
las salidas, de los componentes de los repositorios, y tambin de clculos intermedios.

Bibliografa

Aho (2006), et. al. Compiladores: Principios y Tcnicas. Segunda Edicin.

Compiladores: Principios, tcnicas y herramientas. Segunda Edicin Aho, Lam, Sethi, Ullman
Addison Wesley, Pearson Educacin, Mxico 2008

Diseo de compiladores. A. Garrido, J. Iesta, F. Moreno y J. Prez. 2002. Edita Universidad de
Alicante

(PREZI)









































UNIDAD 4. GENERACIN DE CDIGO OBJETO.

4.1 Registros.
4.2 Lenguaje ensamblador.
4.3 Lenguaje mquina.
4.4 Administracin de memoria.

Unidad: 4 Tema: Generacin de cdigo objeto

Competencia especfica de la unidad
Criterios de evaluacin de
la Unidad
Utilizar un lenguaje de bajo nivel para traducir el
cdigo construido a lenguaje mquina para su
ejecucin.
Resumen : 25%
Reporte de Prctica: 25%
Generador de cdigo
intermedio: 40%

Actividades de aprendizaje
Resumen: Investigar y elaborar un resumen de: La estructura y funcionamiento del lenguaje
ensamblador. Las caractersticas principales del lenguaje maquina a fin de llevar un cdigo
intermedio. Las tcnicas de administracin de memoria para el almacenamiento de un
programa en momento de ejecucin.

Reporte de Practica: Experimentar con simuladores de arquitectura de microprocesadores.

Generador de cdigo mquina: Disear y construir el generador de cdigo mquina u objeto
para el lenguaje del caso de estudio.(unir a la unidad 3)
















UNIDAD 4. GENERACIN DE CDIGO OBJETO.

4.1 Registros.
4.2 Lenguaje ensamblador.
4.3 Lenguaje mquina.
4.4 Administracin de memoria.

Lenguaje Maquina Caractersticas

Un lenguaje de programacin de bajo nivel es el que proporciona
poca o ninguna abstraccin del microprocesador de un ordenador.
Consecuentemente es fcilmente trasladado a lenguaje de mquina.
La palabra bajo no implica que el lenguaje sea inferior a un
lenguaje de alto nivel; se refiere a la reducida abstraccin entre el
lenguaje y el hardware.
Uso: ventajas e inconvenientes. En general se utiliza este tipo de
lenguaje para programar controladores (drivers).
La programacin en un lenguaje de bajo nivel como el lenguaje de la
mquina o el lenguaje simblico tiene ciertas ventajas:
Mayor adaptacin al equipo.
Posibilidad de obtener la mxima velocidad con mnimo uso de
memoria.
Pero tambin tiene importantes inconvenientes:
Imposibilidad de escribir cdigo independiente de la mquina.
Mayor dificultad en la programacin y en la comprensin de los
programas.
El programador debe conocer ms de un centenar de intrucciones.
Es necesario conocer en detalle la arquitectura de la mquina.
Caractersticas
Se trabaja a nivel de instrucciones, es decir, su programacin es al
ms fino detalle. Est orientado a la mquina.
Primera generacin
El lenguaje de programacin de primera generacin (por sus siglas
en ingls, 1GL), es el lenguaje de cdigo mquina. Es el nico
lenguaje que un microprocesador entiende de forma nativa. El
lenguaje mquina no puede ser escrito o ledo usando un editor de
texto, y por lo tanto es raro que una persona lo use directamente.
Segunda generacin
El lenguaje de programacin de segunda generacin (por sus siglas
en ingls, 2GL), es el lenguaje ensamblador. Se considera de
segunda generacin porque, aunque no es lenguaje nativo del
microprocesador, un programador de lenguaje ensamblador debe
conocer la arquitectura del microprocesador (como por ejemplo las
particularidades de sus registros o su conjunto de instrucciones).





8.1.2 Direccionamiento Lenguaje Maquina

Es la forma en como se accede a la memoria. Recordar que un
programa no puede ejecutarse sino se encuentra en memoria
principal. La forma de acceder a la memoria depende del
microprocesador, pero en general existen dos tipos de
direccionamiento: directo e indirecto.
El direccionamiento directo tambin recibe el nombre de
direccionamiento absoluto y el acceso a las direcciones se hace de
manera directa. El direccionamiento indirecto tambin recibe el
nombre de direccionamiento relativo y se basa a partir de una
direccin genrica, generalmente el inicio del programa.
Para acceder a una direccin relativa se suma a la direccin base el
nmero de espacios de memorias necesarias. El direccionamiento
relativo hace a los programas relocalizables e independientes. Si la
direccin base es el inicio de la memoria fija el direccionamiento
pasa a ser un variante de direccionamiento absoluto.

8.2 Lenguaje Ensamblador Caracteristicas

El lenguaje Assembly es un tipo de lenguaje de bajo nivel utilizado
para escribir programas informticos, y constituye la representacin
ms directa del cdigo mquina especfico para cada arquitectura
de computadoras legible por un programador.
Fue usado ampliamente en el pasado para el desarrollo de software,
pero actualmente slo se utiliza en contadas ocasiones,
especialmente cuando se requiere la manipulacin directa del
hardware o se pretenden rendimientos inusuales de los equipos.
Ensambladores [editar]Un ensamblador crea cdigo objeto
traduciendo instrucciones mnemnicas a cdigos operativos, e
interpretando los nombres simblicos para direcciones de memoria
y otras entidades. El uso de referencias simblicas es una
caracterstica bsica de los ensambladores, evitando tediosos
clculos y direccionamiento manual despus de cada modificacin
del programa. La mayora de los ensambladores tambin incluyen
facilidades para crear macros , a fin de generar series de
instrucciones cortas que se ejecutan en tiempo real, en lugar de
utilizar subrutinas[1] .
Los ensambladores son por lo general ms fciles de programar
que los compiladores de lenguajes de alto nivel, y han estado
disponibles desde la dcada de 1950. Los ensambladores
modernos, especialmente para arquitecturas basadas en RISC,
como por ejemplo MIPS, SPARC y PA-RISC optimizan las
instrucciones para explotar al mximo la eficiencia de segmentacin
del CPU.
Los ensambladores de alto nivel ofrecen posibilidades de
abstraccin que incluyen:
Control avanzado de estructuras. Procedimientos de alto nivel,
declaracin de funciones. Tipos de datos que incluyen estructuras,
registros, uniones, clases y conjuntos. Sofisticado procesamiento
de macros.
Lenguaje [editar]Un programa escrito en lenguaje Assembly
consiste en una serie de instrucciones que corresponden al flujo de
rdenes ejecutables que pueden ser cargadas en la memoria de una
computadora. Por ejemplo, un procesador x86 puede ejecutar la
siguiente instruccin binaria como se expresa en cdigo maquina:
Binario: 10110000 01100001 (Hexadecimal: 0xb061) La
representacin equivalente en Assembly es ms fcil de recordar:
mov al, 061h Esta instruccin significa:
Mueva el valor hexadecimal 61 (97 decimal) al registro al. El
mnemnico mov es un cdigo de operacin u opcode , elegido
por los diseadores de la coleccin de instrucciones para abreviar
move (mover).- El opcode es seguido por una lista de argumentos
o parmetros, completando una instruccin de ensamblador tpica.
La transformacin del lenguaje Assembly 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 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. 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.
Cada arquitectura de computadoras tiene su propio lenguaje de
mquina, y en consecuencia su propio lenguaje Assembly. Los
ordenadores 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 las computadoras son capaces de cumplir
esencialmente las mismas funciones, la forma en que lo hacen
difiere, y los respectivos lenguajes Assembly reflejan tal diferencia.
Pueden existir mltiples conjuntos de mnemnicos o sintxis de
Assembly para un mismo conjunto de instrucciones, instanciados
tpicamente en diferentes programas ensamblador. En estos casos,
la alternativa ms popular es la provista por los fabricantes, y usada
en los manuales del programa.
Cdigo mquina (o lenguaje de mquina) [editar]El lenguaje de
mquina est formado por instrucciones sencillas, que -
dependiendo de la estructura del procesador- pueden especificar:
Registros especficos para operaciones aritmticas,
direccionamiento o control de funciones. Posiciones de memoria
especficas (offset). Modos de direccionamiento usados para
interpretar operandos. Las operaciones ms complejas se realizan
combinando estas instrucciones sencillas, que pueden ser
ejecutadas secuencialmente o mediante instrucciones de control de
flujo.
Las operaciones disponibles en la mayora de los conjuntos de
instrucciones incluye:
mover llenar un registro con un valor constante mover datos de una
posicin de memoria a un registro o viceversa escribir y leer datos
de dispositivos computar sumar, restar, multiplicar o dividir los
valores de dos registros, colocando el resultado en uno de ellos o
en otro registro realizar operaciones binarias, incluyendo
operaciones lgicas (AND/OR/XOR/NOT) comparar valores entre
registros (mayor, menor, igual) afectar el flujo del programa saltar a
otra posicin en el programa y ejecutar instrucciones all saltar si se
cumplen ciertas condiciones (IF) saltar a otra posicin, pero guardar
el punto de salida para retornar (CALL, llamada a subrutinas)
Algunas computadoras incluyen instrucciones complejas dentro de
sus capacidades. Una sola instruccin compleja hace lo mismo que
en otras computadoras puede requerir una larga serie de
instrucciones, por ejemplo:
salvar varios registros en la pila de una sola vez mover grandes
bloques de memoria operaciones aritmticas complejas o de punto
flotante (seno, coseno, raz cuadrada ) El nivel de lenguaje
Assembly tiene aspectos importantes de los niveles de
microarquitectura, en los cuales se encuentra (ISA y sistema
operativo) estos dos se utilizan para la traduccin en lugar de la
interpretacin. Algunas caractersticas del lenguaje se describen a
continuacin Los programas que sirven para traducir algn
programa para el usuario se llama traductores, el lenguaje en que
esta escrito el programa original se llama lenguaje fuente, el
lenguaje original que sea modificado se llama lenguaje objeto.
Se usa la traduccin cuando se cuenta con un procesador (ya sea
hardware o un interprete) para el lenguaje objeto pero no para el
lenguaje fuente, Si la traduccin se realiza correctamente, la
ejecucin del programa traducido dar exactamente los mismos
resultados que habra dado la ejecucin del programa fuente. Hay
dos diferencias entre traduccin e interpretacin, en la traduccin
no se ejecuta directamente el programa original, en el lenguaje
fuente se convierte en un programa equivalente llamado programa
objeto o programa binario ejecutable y este funciona solo cuando se
ha acabado la traduccin.
El cdigo mquina, un simple patrn de bits, es hecho legible
reemplazando valores crudos por smbolos denominados
mnemnicos. Se invent para facilitar la tarea de los primeros
programadores que hasta ese momento tenan que escribir
directamente en cdigo binario. antes an era peor, ya que el cdigo
de ceros y unos (el programa) deba introducirse en una tarjeta
perforada. La posicin ocupada por cada punto equivala a un 1 o
a un 0 segn hubiera un hueco o no. Lo cual supona una forma
casi idntica en la que hoy se escriben los datos binaros en
soportes tales como los CDs y DVDs.
Mientras que una computadora reconoce la instruccin de mquina
IA-32
10110000 01100001
para los programadores de microprocesadores x86 es mucho ms
fcil reconocer dicha instruccin empleando lenguaje Assembly:
movb 061,%al
(que significa mover el valor hexadecimal 61 (97 decimal) al registro
al.)
Cada instruccin de la mquina se transforma en una nica
instruccin en cdigo simblico.
Pero adems, para mejorar la legibilidad del programa, el cdigo
simblico introduce instrucciones adicionales, que no
corresponden a ninguna instruccin de la mquina y que
proporcionan informacin. Se llaman pseudoinstrucciones.
El cdigo simblico puede parecer de difcil acceso, pero es ms
fcil de recordar e interpretar que el binario o el hexadecimal.
Los lenguajes simblicos no resuelven definitivamente el problema
de cmo programar un ordenador de la manera ms sencilla
posible. Para utilizarlos, hay que conocer a fondo el
microprocesador, los registros de trabajo de que dispone, la
estructura de la memoria, y muchas cosas ms.
Adems, el lenguaje Assembly est demasiado ligado al
microprocesador para que sea posible escribir programas
independientes de la mquina en que van a ejecutarse.
Este cdigo simblico no puede ser ejecutado directamente por un
ordenador, por lo que es preciso traducirlo previamente. Pero la
traduccin es un proceso mecnico y repetitivo, que se presta a su
realizacin por un programa de ordenador.
Los programas que traducen cdigo simblico al lenguaje de
mquina se llaman ensambladores (assembler, en ingls), porque
son capaces de ensamblar el programa traducido a partir de varias
piezas, procedimientos o subrutinas a cdigo binario (1 y 0) que
entiende el procesador.
Ejemplos de lenguaje Assembly
Ejemplo 1 [editar]El siguiente es un ejemplo del programa clsico
Hola mundo escrito para la arquitectura de procesador x86 (bajo el
sistema operativo DOS ).
.model small .stack .data Cadena1 DB Hola Mundo.$ .code
programa:
mov ax, @data
mov ds, ax
mov dx, offset Cadena1
mov ah, 9
int 21h
end programa

8.2.2 Almacenamiento Lenguaje Ensamblador

Una de las principales ventajas del uso del ensamblador, es que se
encarga de administrar de manera transparente para el usuario la
creacin de memoria, las bifurcaciones y el paso de parmetros.
Adems nos permite acceder directamente a los recursos de la
mquina para un mejor desempeo.

8.3 Registros Lenguaje Ensamblador

Los registros del procesador se emplean para controlar
instrucciones en ejecucin, manejar direccionamiento de memoria y
proporcionar capacidad aritmtica. Los registros son espacios
fsicos dentro del microprocesador con capacidad de 4 bits hasta 64
bits dependiendo del microprocesador que se emplee. Los registros
son direccionables por medio de una vieta, que es una direccin
de memoria. Los bits, por conveniencia, se numeran de derecha a
izquierda (15, 14, 13. 3, 2, 1, 0), los registros estn divididos en
seis grupos los cuales tienen un fin especfico. Los registros se
dividen en:
Registros de segmento
Registros de apuntadores de instrucciones
Registros apuntadores
Registros de propsitos generales
Registro ndice
Registro de bandera.
Registros de uso general
AX = Registro acumulador, dividido en AH y AL (8 bits cada uno).-
Interviene en las operaciones aritmticas y lgicas, despus de la
operacin arroja un resultado.
BX = Registro base, dividido en BH y BL.- Se utiliza en
transferencias de datos entre la memoria y el procesador.
CX = Registro contador, dividido en CH y CL.- Se utiliza como
contador en bucles(LOOP), en operaciones con cadenas(REP), y en
desplazamientos(CL).
DX = Registro de datos, dividido en DH y DL.- Se utiliza en
operaciones de multiplicacin y divisin junto con Ax y en
operaciones de entrada y salida de puertos, su mitad inferior DL
contiene el nmero de puertos.
Registros de segmento.
Un registro de segmento se utiliza para alinear en un limite de
prrafo o dicho de otra forma codifica la direccin de inicio de cada
segmento y su direccin en un registro de segmento supone cuatro
bits 0 a su derecha.
Un registro de segmento tiene 16 bits de longitud y facilita un rea
de memoria para direccionamientos conocidos como el segmento
actual. Los registros de segmento son: CS (cdigo), DS (datos), SS
(pila), ES , FS y GS.
Registro Apuntador de instrucciones.(IP)
El registro apuntador de instrucciones (IP) de 16 bits contiene el
desplazamiento de direccin de la siguiente instruccin que se
ejecuta.
Registro ndice.
Los registros SI y DI estn disponibles para direccionamientos
indexados y para sumas y restas. Que son las operaciones de
punta.
Registro de bandera.
Los registros de banderas sirven parar indicar el estado actual de la
maquina y el resultado del procesamiento, Cuando algunas
instrucciones piden comparaciones o clculos aritmticos cambian
el estado de las banderas.

8.3.1 Distribucin Lenguaje Ensamblador

La distribucin es el proceso en el que el programa generado puede
ejecutarse en otras mquinas. Con respecto al ensamblador, la
mayora del direccionamiento se hace relativo para que el programa
sea relocalizable por un programa llamado cargador. En el caso de
programas compiladores se necesitan de las libreras, si son
estticos se incluyen en el ejecutable por lo que el programa se
hace grfico, si son dinmicas no pero el programa es ms
pequeo. Debido a la complejidad del software actual se necesitan
de asistentes para poder instalar y ejecutar un programa.

8.3.2 Asignacin Lenguaje Ensamblador

8.4 Administracin Memoria Lenguaje Ensamblador

La administracin de la memoria es un proceso hoy en da muy
importante, de tal
modo que su mal o buen uso tiene una accin directa sobre el
desempeo de memoria.
En general un ensamblador tiene un administrador de memoria
ms limitado que un compilador.
En la mayora de los lenguajes de programacin el uso de punteros
no estaba vigilado por lo que se tienen muchos problemas con el
uso de memoria.
Los lenguajes ms recientes controlan el uso de punteros y tienen
un programa denominado recolector de basura que se encarga de
limpiar la memoria no utilizada mejorando el desempeo.

You might also like