Anda di halaman 1dari 25

ANTOLOGIA PROGRAMACION DE SISTEMAS UNIDAD 7 Y 8

INTEGRANTES: MARTINEZ VAZQUEZ ISRAEL GUILLEN FRANCO JULIO GALICIA CRISPIN OSCAR ALDAIR ROJAS MARTINES HUGO ENRIQUE

INDICE UNIDAD PGINA

7. Optimizacin......Error! Bookmark not defined. 7.1. Tipos de Optimizacin.Error! Bookmark not defined. .1.1. Locales....Error! Bookmark not defined. 7.1.2. Globales.....6 7.1.3 Bucles..Error! Bookmark not defined. 7.1.4 De mirilla...9Error! Bookmark not defined. 7.2. Costos ............................................................................................................................... 10 7.2.1. Maquinas Virtuales.................................................................................................... 11 7.2.2. Criterios de Mejoramiento ........................................................................................ 13 7.2.3 herramientas para el anlisis del flujo de datos ............Error! Bookmark not defined. 8. Generacin de cdigo objeto. ................................................................................................. 14 8.1 Lenguaje mquina. ............................................................................................................ 15 8.1.1 Caractersticas ............................................................................................................ 17 8.1.2 Direccionamiento ....................................................................................................... 17 8.2 Lenguaje ensamblador ...................................................................................................... 18 8.2.1 Caractersticas ............................................................................................................ 18 8.2.2 Almacenamiento ........................................................................................................ 19 8.3 Registros ............................................................................................................................ 20 8.3.1 Distribucin ................................................................................................................ 21 8.3.2 Asignacin .................................................................................................................. 22 8.4 Administracin de memoria .............................................................................................. 22 Bibliografa..23

7. OPTIMIZACION 7.1 Tipos de 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 con 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 tiende a minimizar o maximizar alguna variable de rendimiento, generalmente tiempo, espacio, procesador, etc. Desafortunadamente no existen optimizadores 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. John Donovan (1972) 7.1.1 Locales Se realiza despus de la generacin de cdigo de todo el programa o de un elemento ejecutable del programa (funcin, procedimiento, etc). Dependiente del contexto Hay teoremas (Aho, 1970) que demuestran que la optimizacin perfecta es indecidible. Por tanto, las optimizaciones de cdigo en realidad proporcionan mejoras, pero no aseguran el xito total. La optimizacin local se realiza sobre mdulos de programa. En la mayora de las ocasiones a travs de funciones, mtodos, procedimientos, clases, etc. La caracterstica de las optimizaciones locales es que solo se ven reflejados en dichas secciones. La optimizacin local sirve cuando un bloque de programa o seccin es crtico por ejemplo: la E/S, la concurrencia, la rapidez y la confiabilidad de un conjunto de instrucciones.

David Jurgens,(1991)

Clasificacin de optimizaciones: 1. Dependientes de la mquina. o Asignacin de registros (ver captulo anterior). o Instrucciones especiales ("idioms"). o Reordenacin del cdigo. 2. Independientes de la mquina. o Ejecucin en tiempo de compilacin. o Eliminacin de redundancias. o Cambio de orden. o Reduccin de frecuencia de ejecucin (invariancias). o Reduccin de fuerza. Optimizacin y depuracin suelen ser incompatibles. Por ejemplo, si se elimina totalmente una instruccin, puede ser imposible poner una parada en ella para depuracin. Ejemplo: x = x; Como el espacio de soluciones es ms pequeo la optimizacin local es ms rpida. Ejemplos:

1. Pre calcular expresiones constantes (con constantes o variables cuyo valor no cambia). i=2+3 i=5 j=4 j=4 f = j + 2.5 f = 6.5 2. Reutilizacin de expresiones comunes a=b+c a=b+c d=ad d=ad e=b+c e=a f=ad f=d 3. Propagacin de copias Ante instrucciones f = a, sustituir todos los usos de f por a a = 3+i f = a a=3+i b = f+c b=a+c d = a+m d=a+m

m= f+d

m=a+d David Jurgens,(1991)

4. Eliminacin redundancias en acceso matrices Localizar expresiones comunes en clculo direcciones de matrices.

Cdigo Fuente: A: array [1..4, 1..6, 1..8] of integer A[i, j ,5 ] := A[i, j, 6] + A[i, j, 4] Sin optimizacin: direc(A[i, j, 5]) = direc(A[1, 1, 1]) + (i - 1)*6*8 + (j - 1)*8 + (5 - 1) direc(A[i, j, 6]) = direc(A[1, 1, 1]) + (i - 1)*6*8 + (j - 1)*8 + (6 - 1) direc(A[i, j, 4]) = direc(A[1, 1, 1]) + (i - 1)*6*8 + (j - 1)*8 + (4 - 1) Con optimizacin: k := direc(A[1, 1, 1]) + (i - 1)*6*8 + (j - 1)*8 direc(A[i, j, 5]) = k + 4 direc(A[i, j, 6]) = k + 5 direc(A[i, j, 4]) = k + 3

5. Transformaciones algebraicas: Aplicar propiedades matemticas para simplificar expresiones A) Eliminar secuencias nulas. x+0 x 1*x x X/1 x B) Reduccin de potencia o Remplazar una operacin por otra equivalente menos costosa x x*x 2*x x + x (suma); x<<1 (desplazamiento por la izquierda) 4*x, 8*x, x << 2, x << 3, X/2 x >> 2 C) Reacondicionamiento de operadores o Cambiar orden de evaluacin aplicando propiedades conmutativas, asociativas y distributivas. A := B*C(D + E) A := (D + E)* B*C

MOV B,R0 MOV C,R0 MOV R0,t1 MOV D, R0 5 instrucciones ADD E,R0 0 temporales MUL t1,R0 MOV R0,A

MOV D,R0 ADD E,R0 MUL B,R0 MUL C,R0 MOV R0,A

David Jurgens,(1991) Objetivo Obtener cdigo que se ejecuta ms eficientemente segn los criterios Tiempo de ejecucin (optimizacin temporal) Espacio de memoria utilizado (optimizacin espacial) Funcionamiento Revisa el cdigo generado a varios niveles de abstraccin y realiza las optimizaciones aplicables al nivel de abstraccin Representaciones de cdigo intermedio de ms a menos abstractas rbol sintctico abstracto: optimizar subexpresiones redundantes, reduccin de frecuencia, etc. Tuplas o cudruplas: optimizar en uso de los registros o de las variables temporales. Ensamblador/Cdigo mquina: convertir saltos a saltos cortos, reordenar instrucciones

Las optimizaciones locales se realizan sobre el bloque bsico Optimizaciones locales Folding Propagacin de constantes Reduccin de potencia Reduccin de subexpresiones comunes

Un bloque bsico es un fragmento de cdigo que tiene una nica entrada y salida, y cuyas instrucciones se ejecutan secuencialmente. Implicaciones: Si se ejecuta una instruccin del bloque se ejecutan todas en un orden conocido en tiempo de compilacin.

La idea del bloque bsico es encontrar partes del programa cuyo anlisis necesario para la optimizacin sea lo ms simple posible.

Michael Oney,(1996) 7.1.2 Globales Grafo del flujo de ejecucin Antes de realizar una optimizacin global es necesario crear el grafo de flujo de ejecucin. El grafo de flujo de ejecucin representa todos los caminos posibles de ejecucin del programa. La informacin contenida en el grafo es til para el programador y el optimizador La optimizacin global a partir del anlisis del grafo del flujo de ejecucin permite Una propagacin de constantes fuera del bloque bsico. Problema: la optimizacin global es muy costosa en tiempo de compilacin

Construccin del Grafo del Flujo de Ejecucin Tipos de grafo Orientado a procedimiento/funcin Grafo de llamadas Ejemplo int fact(int n) { int r; r=1; i=1; while (i<=n) { r=r*i; ++i; } return r; }

Carlos Galan,(1992)

En algunas casos es mejor mantener variables globales para agilizar los procesos (el proceso de declarar variables y eliminarlas toma su tiempo) pero consume ms memoria. Algunas optimizaciones incluyen utilizar como variables registros del CPU, utilizar instrucciones en ensamblador. Optimizaciones Globales Optimizaciones entre Bloques Bsicos Optimizaciones tpicas: Identificacin de expresiones comunes entre bloques afecta a la asignacin de registros entre B.B. Optimizacin de llamadas a procedimientos Optimizacin de bucles Optimizacin de Llamadas a Procedimientos Llamadas a procedimientos son muy costosas Cambios del mbito de referencias Gestin de Registros de Activacin Paso de parmetros + asignacin de datos locales Mejoras 1. Optimizar manejo de Registro de Activacin Minimizar copia de parmetros y nmeros de registros a salvar Uso almacenamiento esttico si no hay llamadas recursivas 2. Expansin en lnea. Idea: Eliminar llamadas a procedimientos, copiando el cuerpo del procedimiento en el lugar donde es llamado Evita sobrecarga asociada con las llamadas a procedimientos Permite optimizaciones adicionales el cdigo llamado pasa a ser parte del cdigo que lo llama Limitaciones

Aumenta uso de memoria til en los procedimientos pequeos y llamados desde pocos lugares Si se llama en un nico lugar (es frecuente) , no supone coste de espacio adicional No aplicable en procedimientos recursivos

Ejemplos: Directiva inline en C++ y Java En C puede simularse con macros #define Irv Englander(2002) 7.1.3 Bucles

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 realizada, 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 general radica es muy difcil saber el uso exacto de algunas instrucciones. As que no todo cdigo de proceso puede ser optimizado. Otro uso de la optimizacin puede ser el mejoramiento de consultas en SQL o en aplicaciones remotas (sockets, E/S, etc.). PRESSMAN, R. (1994) Optimizacin de Ciclos Idea: Centrar la optimizacin en partes ms usadas, no en todo el programa. Optimizar ciclos internos

Mejoras

factorizacin de expresiones invariantes Reduccin de intensidad y eliminacin de variables de induccin

Factorizacin de expresiones invariantes

Expresiones Invariantes de ciclo: expresiones cuyo valor es constante durante toda la ejecucin del ciclo. Incluyen constantes y/o variables no modificadas en el cuerpo del ciclo. Idea: Mover expresiones Invariantes desde el cuerpo hasta la cabeza del ciclo. Al sacarlas del ciclo, pueden quedar dentro de otro ciclo externo repetir proceso.

9
Ejemplos: While ( i<= ( limite*2 - 1 ) ) do { A: array * 1900, 1900, 1.900+ of integer

tmp1 = limite*2 - 1; while ( i<= tmp1 ) { }

for i:=1 to 900 do for i:= 1 to 900 do for i:=1 to 900 do for j:=1 to 900 do tmp3:= dir(A[i]); for j:=1 to 900 do tmp1 := i*j; for j:= 1 to 900 do for k:=1 to 900 do tmp2 := dir (A[i][j]) tmp1 := i*j; A [i] [j] [k] := i*j*k; for k := 1 to 900 do tmp2 := dir (tmp3[j]); end for tmp2[k] := tmp1*k; for k:= 1 to 900 do end for end for tmp2[k] := tmp1*k; end for end for end for end for end for end for i, j y a [i][j] son constantes en el bucle de k A[i] es constante en el bucle de j

En C.I. aparecern mas invariantes al incluir el clculo de desplazamientos en arreglos basados en el tamao de los datos (int 4, float 8,) PRESSMAN, R. (1994)

7.1.4 Mirilla

La optimizacin de mirilla trata de estructurar de manera eficiente el flujo del programa, sable 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 ms pequeo posible.

Idea Bsica Se recorre el cdigo buscando combinaciones de instrucciones que puedan ser remplazadas por otras equivalentes ms eficientes. Se utiliza una ventana de n instrucciones y un conjunto de patrones de transformacin (patrn, secuencias reemplazan). Si las instrucciones de la venta encajan con algn patrn se reemplazan por la secuencia de reemplazamiento asociada. Las nuevas instrucciones son reconsideradas para las futuras optimizaciones.

10

Ejemplo: Eliminacin de cargas innecesarias MOV Ri, X MOV Ri, Rj MOV X, Rj Reduccin de potencia Eliminacin de cadenas de saltos if C goto L1 goto L2 if C goto L1 goto FIN if C goto L2

L1:

if not C goto FIN L1: FIN:

L1: FIN: 7.2 Costos

Los costos son el factor ms importante 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 pequea ganancia en tiempo o en espacio pero sale muy costosa en tiempo en ganancia. 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 minimizara y es benfico la mejora. Costos de Ejecucin. Los costos de ejecucin son aquellos que vienen implcitos al ejecutar el programa. En algunas programas se tiene un mnimo para ejecutar el programa por lo que el espacio y la velocidad del microprocesador 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 (ejemplo tarjetas de video) o de mucha memoria. Otro tipo de aplicaciones que deben optimizarse son las aplicaciones para dispositivos mviles. Los dispositivos mviles tienen recursos ms limitados que un dispositivo de cmputo convencional razn por la cual, el mejor eso de memoria y otros recursos de hardware tiene mayor rendimiento. En algunos casos es preferible tener la lgica del negocio ms fuerte que en otros dispositivos y hacer uso de arquitecturas descentralizadas como cliente/servidor o P2P. Carlos Galan, (1992)

11

7.2.1 Mquinas Virtuales

Las MV se construyeron para simplificar el proceso del control del hardware de un ordenador porque extienden y enmascaran la funcionalidad del hardware a travs de procedimientos y datos abstractos. Se pueden identificar dos tipos de MV concretas: las que juegan un papel en la preparacin de un programa para su ejecucin (tiempo de compilacin) y las que permiten la ejecucin de dicho programa Las MV suelen aparecer en una jerarqua (como se ver a continuacion ). Usamos la jerarqua de MV de compilacin, por ejemplo, cada vez que invocamos el compilador de C++. Y dos ejemplos muy comunes del papel de una MV en la jerarqua de MV de ejecucin son PostScript (que define una MV para una impresora) y MSDOS bajo MS Windows (que define una MV que permite que antiguos programas de DOS funcionen bajo Windows). PostScript es una MV que incluye el estado grfico, la ruta actual, el estado del diccionario y, aunque sea bastante complejo, presenta una visin de alto nivel de muchos tipos distintos de impresoras, aislando las caractersticas de las impresoras de las aplicaciones que las usan. Luis Duran Rodriguez (2007) Jerarquas de mquinas virtuales

La realidad es que el desarrollador de un lenguaje suele implementar las MV (de compilacin y/o ejecucin) de su lenguaje en trminos de otras MV ya existentes. Y en el futuro, un programador de aplicaciones utilizar las MV implementadas por el desarrollador del lenguaje para producir programas que a su vez puedan servir como MV para otras aplicaciones, etc. La conclusin, como puede verse, es que una MV no suele existir aislada, sino como parte de una jerarqua de MV. A continuacin se va a ver el papel de las jerarquas de MV en el tiempo de compilacin y de ejecucin. En primer lugar, se va a considerar el papel de la jerarqua de MV en el tiempo de compilacin. En el caso de C++, como lenguaje de alto nivel que se compila a un lenguaje tan cerca del nivel de mquina como sea posible, se puede ver que el proceso de compilacin de un programa de C++ consiste en la interaccin de la jerarqua de MV (aunque puede haber diferencias entre compiladores de C++; por ejemplo, aqu se supone que es un proceso de compilacin que usa C

como cdigo intermedio). El pre-procesador acepta el cdigo C++ como fuente y produce otra versin del mismo cdigo C++ con algunas extensiones e incorporaciones resueltas. El traductor convierte el cdigo fuente C++ estndar a cdigo fuente C. El compilador C acepta este cdigo como fuente y lo traduce a cdigo ensamblador (una representacin simblica del cdigo mquina).

Irv Englander (2002)

12

El ensamblador traduce este cdigo simblico a un cdigo mquina reubicable. Y por fin, el cargador de libreras acepta este cdigo mquina como entrada y produce un programa simple ejecutable, compuesto por el cdigo mquina de entrada y todos los subprogramas necesarios con direcciones de memoria contiguas. Adems del proceso de compilacin, la traduccin completa de los programas de alto nivel (previa a su ejecucin) en una forma que corre sobre la mquina, tambin existe otro proceso, que se llama interpretacin, que tiene ms que ver con el papel de las MV en el tiempo de ejecucin que en el tiempo de compilacin.

13

Allen B. Tucker (1998) 7.2.2 Criterios de Mejoramiento La mejor manera de optimizar el cdigo es hacer ver a los programadores que optimicen su cdigo desde el inicio, el problema radica en el costo podra ser muy grande ya que tendra que codificar ms y/o hacer su cdigo ms legible. Los criterios de optimizacin siempre estn definidos por el compilador. Muchos de estos criterios pueden modificarse con directivas del compilador desde el cdigo mvil y cdigo para dispositivos mviles. 7.2.3 Herramientas para el anlisis de flujo de datos Existen algunas herramientas que permiten el anlisis de flujo de datos, entre ellas tenemos los Depuradores Un depurador (en ingls, debugger), es un programa usado para probar y depurar (eliminar los errores) de otros programas (el programa "objetivo"). El cdigo a ser examinado puede alternativamente estar corriendo en un simulador de conjunto de instrucciones(ISS), una tcnica que permite gran potencia en su capacidad de detenerse cuando son encontradas condiciones especficas pero ser tpicamente algo ms lento que ejecutando el cdigo directamente en el apropiado (o el mismo) procesador. Algunos depuradores ofrecen dos modos de operacin - la simulacin parcial o completa, para limitar este impacto. Michael Tischer (1996), Desambladores Un desensamblador 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 un decompilador, en que ste apunta a un lenguaje de alto nivel en vez de al lenguaje ensamblador. la salida de un desensamblador, el desensamblado, es a menudo formateada para la legibilidad humana en vez de ser adecuada para la entrada a un ensamblador, haciendo que ste sea principalmente una herramienta de ingeniera inversa. La optimizacin al igual que la programacin es un arte y no se ha podido sistematizar del todo.

14

AHO J., ULLMAN J. D. (1998) 8. Generacin de cdigo Objeto

En el modelo de anlisis y sntesis de un compilador, la etapa inicial traduce un programa fuente a una representacin intermedia a partir de la cual la etapa final genera el cdigo objeto. Los detalles del lenguaje objeto se confinan en la etapa final, si esto es posible. Aunque un programa fuente se puede traducir directamente al lenguaje objeto, algunas ventajas de utilizar una forma intermedia independiente de la mquina son:

1.

Se facilita la redestinacin; se puede crear un compilador para una mquina distinta uniendo una etapa final para la nueva mquina a una etapa inicial ya existente. Se puede aplicar a la representacin intermedia un optimizador de cdigo independiente de la mquina.

2.

Hay lenguajes que son pseudointerpretados que utilizan un cdigo intermedio llamado cdigo-P que utiliza lo que se denomina bytecodes (sentencias de un P hipottico). Por ejemplo Java utiliza los ficheros .class, stos tienen unos bytecodes que se someten a una JavaVirtualMachine, para que interprete esas sentencias

15
Michael Tischer (1996)

8.1 Lenguaje Maquina Se denomina lenguaje mquina a la serie de datos que la parte fsica de la computadora o hardware, es capaz de interpretar. Una computadora digital o, mejor dicho, su parte fsica, slo distingue datos de tipo binario, es decir, constituidos por dos nicos valores a los que se denomina valor 0 y valor 1 y que, fsicamente, se materializan con tensiones comprendidas entre 0 y 4.0 voltios y entre 4 y 5 voltios, respectivamente. Para representar datos que contengan una informacin se utilizan una serie de unos y ceros cuyo conjunto indica dicha informacin. La informacin que hace que el hardware de la computadora realice una determinada actividad de llama instruccin. Por consiguiente una instruccin es un conjunto de unos y ceros. Las instrucciones as formadas equivalen a acciones elementales de la mquina, por lo que al conjunto de dichas instrucciones que son interpretadas directamente por la mquina se denomina lenguaje mquina. El lenguaje mquina fue el primero que empleo el hombre para la programacin de las primeras computadoras. Una instruccin en lenguaje mquina puede representarse de la siguiente forma: 011011001010010011110110. JOYANES A., L. (1998) Esta secuencia es fcilmente ejecutada por la computadora, pero es de difcil interpretacin, siendo aun mas difcil la interpretacin de un programa (conjunto de instrucciones) escrito de esta forma. Esta dificultad hace que los errores sean frecuentes y la correccin de los mismos costosa, cuando no imposible, al igual que la verificacin y modificacin de los programas. Si lo vemos escrito de esta forma, lo entenderemos fcilmente, ya que est en nuestro lenguaje natural, pero la mquina elemental ser incapaz de entender nada. Vemos, pues, que la forma de indicar a la mquina lo que debe hacer es totalmente diferente de la indicar a un ser humano lo mismo, por lo que deben emplearse sistemas de traduccin de una forma a otra.

Ya se ha dicho que en un principio el programador empleaba directamente el lenguaje mquina. En este caso el traductor era el programador; pero vimos tambin los problemas que esto causaba.Con la prctica en el manejo de la mquina se cay en la cuenta de que se podra utilizar la propia mquina para ayudar en la traduccin de estos programas. Es decir, que si a una mquina elemental se le dotaba de un programa, tambin elemental, que tradujera un nmero determinado de caracteres de caracteres alfabticos en una secuencia de unos y ceros, se podra escribir un programa constituido por una secuencia de grupos de caracteres alfabticos, en la que cada uno de los grupos indicara una accin a realizar por el ordenador y, una vez escrito el programa, sera la propia mquina la que pasara los grupos de caracteres a bits.Las ventajas de esto son evidentes, ya que para el hombre resulta mas fcil manipular grupos de caracteres y la traduccin se hara de manera automtica. PRESSMAN, R. (1994)

16

Por ejemplo, se podra escribir: TRASLADAR 11010110, 00011101. Esto indicara que el contenido de la posicin 11010110 haba que pasarlo a la posicin 00011101 si se sabe que al grupo alfabtico TRASLADAR le corresponde la secuencia de bits 11110101. La mquina traducira la anterior instruccin como: 11110101 11010110 00011101 Al grupo alfabtico se le denomina mnemotcnico, y existir un mnemotcnico por cada instruccin. Se le da este nombre porque sirve para recordar con mayor facilidad el conjunto de instrucciones de una determinada mquina. De esta forma aparecieron los lenguajes ensambladores (Assembler, en ingls). Poco a poco, con el avance de la programacin (Software), estas primeras y sencillas ayudas se fueron haciendo ms complejas, permitiendo que, adems de los mnemotcnicos correspondientes a la operacin a realizar, se pudieran emplear otros para indicar, por ejemplo, los operandos. La anterior instruccin se podra escribir de la siguiente forma: TRASLADAR POS-A POS-B Que nos resulta de ms fcil comprensin. Tambin se introdujo la posibilidad de indicar a la computadora la direccin de un salto en la secuencia de ejecucin de un programa mediante la utilizacin de etiquetas. A los programas que permiten pasar del programa escrito de esta manera (programa fuente, en ensamblador) al lenguaje mquina tambin se les denomina normalmente ensambladores. Estos traductores, como ya se ha dicho, se fueron complicando cada vez ms para que la labor del programador fuera ms fcil, incluyendo los denominados directivos del ensamblador, que son

rdenes o informaciones que el programador da al traductor, no instrucciones de lenguaje mquina. Aun con todas estas sofisticaciones y ayudas, el programador de lenguaje ensamblador debe conocer perfectamente el sistema fsico (Hardware) de la mquina con que trabaja, pues aunque emplee mnemotcnicos, etiquetas, etc., stas sirven para indicar una posicin de memoria determinada, un registro o cualquier otra parte de la mquina. Por eso se dice que el lenguaje ensamblador es un lenguaje de bajo nivel, es decir, ligado con el <<hard>> concreto de una determinada mquina. Aqu radica la diferencia importante con los lenguajes ms complejos, llamados de alto nivel, como el Basic, Pascal, Cobol, etc., ya que en stos el programador no tiene por qu reconocer el <<hard>> de la mquina. Trabaja con variables, constantes e instrucciones simblicas, y es el traductor quien las transforma en las direcciones apropiadas. Robert Powell ( 2001) 8.1.1 Caractersticas El lenguaje mquina realiza un conjunto de operaciones predeterminadas llamadas micro operaciones. Las micro operaciones slo realizan operaciones del tipo aritmtica (+,-,*, /), lgicas (AND, OR, NOT) y de control (secuencial, decisin, repetitiva) Caractersticas El lenguaje mquina es dependiente del tipo de arquitectura. As un programa mquina para una arquitectura intel x86 no se ejecutar en una arquitectura Power PC de IBM (al menos de manera nativa). Algunos microprocesadores implementan ms funcionalidades llamado CISC, pero son ms lentos que los RISC ya que estos tienen registros ms grandes. Michael Tischer (1996) 8.1.2 Direccionamiento Es la forma en cmo 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. Direccionamiento directo El direccionamiento directo tambin recibe el nombre de direccionamiento absoluto y el acceso a las direcciones se hace de manera directa.

17

El direccionamiento indirecto tambin recibe el nombre de direccionamiento relativo y se basa a partir de una direccin genrica, generalmente el inicio del programa. Direccionamiento indirecto 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 re localizables e independientes. Si la direccin base es el inicio de la memoria fi direccionamiento pasa a ser un variante de direccionamiento absoluto Allen B. Tucker (1998) 8.2 Lenguaje Ensamblador

18

El lenguaje ensamblador, o assembler (assembly language en ingls) es un lenguaje de programacin de bajo nivel para los computadores, microprocesadores, microcontroladores, y otros circuitos integrados programables. 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 de memoria, y otras caractersticas del lenguaje. Un lenguaje ensamblador es por lo tanto especfico a cierta arquitectura de computador fsica (o virtual). Esto est en contraste con la mayora de los lenguajes de programacin de alto nivel, que, idealmente son portables. 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 son llamados 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. Muchos dispositivos programables (como los micros controladores) aun cuentan con el ensamblador como la nica manera de ser manipulados.

BECERRA S., Csar. (1993) 8.2.1 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.

19

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. JOYANES A., L. (1998)

8.2.2 Almacenamiento 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.

CEBALLOS, M.A. (2002)

20

8.3 Registros 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. Robert Powell ( 2001)

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 lmite 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. Robert Powell (2001)

21

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 mquina y el resultado del procesamiento, Cuando algunas instrucciones piden comparaciones o clculos aritmticos cambian el estado de las banderas. LEMONE, K. (1996)

8.3.1 Distribucin 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 compilados se necesitan de las libreras, si son estticas 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.

22
PRESSMAN, R. (1994)

8.3.2 Asignacin

La asignacin de valores a variables se hace a travs de un proceso de mover el contenido de memoria a registro, o de registro a memoria, pero nunca de memoria a memoria. Cuando se trata de memoria dinmica se debe seguir el rastro de los datos. 8.4 Administracin de memoria La administracin de memoria se refiere a los distintos mtodos y operaciones que se encargan de obtener la mxima utilidad de la memoria, organizando los procesos y programas que se ejecutan de manera tal que se aproveche de la mejor manera posible el espacio disponible. Para poder lograrlo, la operacin principal que realiza es la de trasladar la informacin que deber ser ejecutada por el procesador, a la memoria principal. Actualmente esta administracin se conoce como Memoria Virtual ya que no es la memoria fsica del procesador sino una memoria virtual que la representa. Entre algunas ventajas, esta memoria permite que el sistema cuente con una memoria ms extensa teniendo la misma memoria real, con lo que esta se puede utilizar de manera ms eficiente. Y por supuesto, que los programas que son utilizados no ocupen lugar innecesario. Entre las principales operaciones que desarrolla la administracin de memoria se encuentran la reubicacin, que consiste en trasladar procesos activos dentro y fuera e la memoria principal para maximizar la utilizacin del procesador; la proteccin, mecanismos que protegen los procesos que se ejecutan de interferencias de otros procesos; uso compartido de cdigos y datos, con lo que el

mecanismo de proteccin permite que ciertos procesos de un mismo programa que comparten una tarea tengan memoria en comn.

23

BOOCH, G. (1996)

BIBLIOGRAFIAS

John Donovan (1972), Systems Programming, McGraw Hill Irv Englander (2002), Arquitectura computacional 2da Edicin, CECSA David Jurgens,(1991) Help PC 2.10 software de referencia Michael Oney, Systems Programming for Windows 95, Microsoft Press, Robert Powell ( 2001) C# and the .NET Framework The C++ perspective, Sams Andrew Tanenbaum (2000), Organizacin de computadoras un enfoque estructurado, Pearson Education, Michael Tischer (1996), PC Interno 5, Marcombo Luis Duran Rodriguez (2007), El gran libro del PC Interno, AlfaOmega Allen B. Tucker, Lenguajes de programacinEditorial McGraw Hill Carlos Galan,(1992)Modula 2. Desarrollo de softwareEditorial Paraninfo. H. M. Deitel y P. J. Deitel Cmo programar en C y C++Editorial Prentice Hall David Camacho y Jos Mara Valls Programacin, algoritmos y ejercicios resueltos en JAVA Editorial Prentice Hall AHO J., ULLMAN J. D. (1998). Compiladores: principios, tcnicas y herramientas, 1 ed., Ed. Addison Wesley.

BECERRA S., Csar. (1993) Lenguaje C, el nuevo concepto. Tomo I. Bogot: Kimpres Ltda. BOOCH, G. (1996) Anlisis y diseo orientado a objetos con aplicaciones. 2. ed. Ed. Addison Wesley. CEBALLOS, M.A. (2002) Trabajo de lenguajes y autmatas, ITESI. JOYANES A., L. (1998) Fundamentos de programacin, algoritmos y estructura de datos, 1 ed. MxicoD.F.: Prentice Hall. LEMONE, K. (1996) Fundamentos de compiladores, cmo traducir al lenguaje de computadora. 1. ed.Mxico D.F.: Continental. PRESSMAN, R. (1994) Ingeniera del software, un enfoque prctico. 3. ed. Madrid: McGraw Hill.

24