INTRODUCCIÓN Con el tiempo el hombre va inventando cosas nuevas para ir mejorando su calidad de vida, a fin de hacer las cosas más eficientes. Así Así es como surgen surgen las las computadoras, computadoras, un aparato aparato electrónico que hoy en día nos facilita la vida. Realiza un sin fin de funciones funciones que para un pers per sona le l e llevaría horas e incluso días. Por citar un algo alg o, seri ser ia el comparativo de las reglas reglas de cálculo, cálculo, con las calcula calculadoras doras científic científicas, as, las prime primera ras s nos facil facili itaban taban la idea idea de hacer hacer un mont montón de cálculos a mano, pero aun así, el tiempo era muy largo. Ahora con las calculadoras científicas, el tiempo se reduce a minutos y segundos. segundos. Por Por eso, eso, las compu comput tadoras adoras son una una gran gran herr herramient amienta a muy fascinante, además de útiles. Cada día van evolucionando y siendo mejores cada día, es una de las herramientas más usadas hoy en día y todo es por el núcleo, el alma de la computadora, que es el microprocesador. microprocesador. Este componente com ponente hace las millones de intrusiones necesarias para el hombre a una enorme velocidad.
Arquitectura de Von Neumann Es una familia de arquitecturas arquitecturas de computadoras que utilizan el mism mismo o disp dispos osit itiv ivo o de alma almace cen namie amient nto o tant tanto o para para las las instr nstruc ucci cion ones es como como para ara los dat datos a difer iferen enci cia a de la arquitectura Harvard, que que almacenaba las instrucciones en cintas cin tas perforadas perforadas y los datos en interruptores. Todas las computadoras constan principalmente principalmente de dos partes, la CPU que procesa los datos, y la memoria que guarda los datos. Cuando hablamos de memoria manejamos dos parámetros, los datos en sí, y el lugar donde se encuentran almacenados almacenados (odirección). Los dos d os son importantes para la CPU, pues muchas instrucciones frecuentes se traducen a algo así como "coge los datos de ésta dirección y añádelos a los datos de ésta otra dirección", sin saber en realidad qué es lo que contienen los datos. En los últimos años la velocidad de las CPUs ha aumentado much mucho o en comp compar arac ació ión n a la de las las memo memori ria as con con las las que que trabaja, así que se debe poner mucha atención en reducir el núme número ro de vec veces que que se acce acced de a ella ella para para mant manten ener er el rendimiento. Si, por ejemplo, cada instrucción ejecutada en la CPU requiere un acceso a la memoria, no se gana nada incrementando la velocidad de la CPU - este problema es conocido como 'limitación de memoria'. memoria'.
Nombre El término arquitectura de Von Neumann se acuñó a partir del First t Draf Draft t of a Rep Report ort on the EDVAC VAC (1945) memorando Firs escrito por el conocido matemático John von Neumann en el que se proponía el concepto de programa almacenado. Dicho docum documen ento to fue fue redac redactad tado o en vist vistas a la const constru rucci cción ón del sucesor de la computadora ENIAC y su contenido fue desar esarro roll llad ado o por John William Presper Ecker,t John , Arthur Burks y otros durante varios meses antes de Mauchly que von Neumann redactara el borrador del informe. Es por ello que otros tecnólogos como David A. Patterson y John L. Hennessy promueven la sustitución de este término por el de arquitectura Eckert-Mauchly .
ENIAC Electronic Electronic Numerical Numerical Integrator Integrator AndCompute AndComputer r (Computado (Computador r e Integ ntegra rad dor Numé Numéri rico co Elec Elect trón rónico ico), uti utiliz lizada ada por el Laborat Laboratorio orio de Investiga Investigac ción Balístic Balística a del Ejér Ejérci cito to de los los Estados Unidos
Era totalmente digital, es decir, que ejecutaba sus procesos y operaciones mediante instrucciones en lenguaje máquina, a diferencia de otras máquinas computadoras contemporáneas de procesos analógicos a nalógicos. .
EDVAC (Electronic Discrete Variable Automatic Computer) por sus siglas en inglés, fue una de las primeras compu computa tador doras as elect electró rónic nicas. as. A difere diferenci ncia a de la ENIAC ENIAC, , no era decimal, sino binaria y tuvo el primer programa programa dise dis eñado para ser almacenado. Este diseño se convirtió en el estándar de arqu arquit itec ectu tura ra par para la mayor ayoría ía de las las comp comput utad ador oras as modernas. El diseño de la EDVAC es e s considerado un éxito en la historia de la informática. El diseño de la EDVAC fue desarrollado aún antes de que la ENIAC NIAC fuera uera puest uesta a en mar marcha cha y tenía enía la int intenci ención ón de resolver muchos de los problemas encontrados en el diseño de la ENIAC. Así como la ENIAC, la EDVAC fue construida por el laboratorio de investigación de balística de Estados Unidos de la universidad de Pensilvana. A los diseñadores de la ENIAC, J. Presper Eckert y John William Mauchlyse les unió el gran matemático John von Neum Neu mann. La computadora fue diseñada para ser binaria con adición, sustr ustrac acc ción ión y multi ultipl pli icac cación ión auto automá máti tica ca y divisi visió ón programada. También poseería un verificador automático con capacidad para mil palabras (luego se estableció en 1,024). Físicamente la computadora fue construida de los siguientes compone componentes: ntes: Un lector-g lector-gr rabador abador de cinta cinta magnéti magnética, ca, una unidad de control con osciloscopio, una unidad para recibir instrucciones del control y la memoria y para dirigirlas a otras otras unida unidade des, s, una unida unidad d comp computacio utacional nal para para realiz realizar ar operaciones aritméticas en un par de números a la vez y manda mandarl rlos os a la memor memoria ia despu después és de corrob corrobora orarlo rlo con otra otra
unida unidad d idénti idéntica, ca, un cronó cronómet metro, ro, y una una unida unidad d de memor memoria ia dual. Una Una preocu preocupac pación ión impor importan tante te en el diseño diseño era era bala balancear ncear fiabilidad y economía.
Lenguaje Máquina Los circuitos microprogramables son sistemas digitales, lo que sig signifi nifica ca que que traba rabaja jan n con con dos únic únicos os nivel iveles es de tensión. Dichos niveles, por abstracción, se simbolizan con el cero, 0, y el uno, 1, por eso el lenguaje de máquina sólo utiliza dichos signos. Esto permite el empleo de las teorías del álgebra booleana y del sistema binario en el diseño de este tipo de circuitos y en su programación.
Álgebra booleana Tambi ambién én llam llama ada Alg Algebr ebra de Boo Boole, en info nformá rmática tica y matemática, es una estructura algebraica que contiene las operaciones lógicas AND, OR y NOT, así como el conjunto de operaciones unión, intersección y complemento com plemento. .
Sistema Binario En matemáticas e informática, es un sistema de numeraci n umeración ón en el que los los númer números os se repr representa esentan n util utilizando izando solam solament ente e las las cifr cifras cero cero y uno uno (0 y 1). 1). Los orden ordenad adore ores s traba trabaja jan n inter interna namen mente te con con dos dos nive niveles de volta voltaje je, , por lo que su
siste istema ma de nume numera raci ción ón nat natural ural (encendido 1, apagado 0).
es
el
siste istema ma
bina binar rio
John von Neumann zu Margitta
(28 de diciembre de 1903 - 8 de febrero de 1957) Fue un matemátic matemático ohúngar húngaro-esta o-estadounid dounidense, de ascenden ascendenc cia judía judía, , que que reali realizó zó contr contri ibucion buciones es import important antes es en físic física a cuánt uántic ica a, anál anális isis is func funcio iona nal, l, teoría oría de con conjunto untos s, informática, economía, análisis numérico, hidrodinámica (de explo xplosi sio ones) nes), , estad stadís ísti tica ca y much mucho os otro otros s campos mpos de la mate matemá máti tica ca. . Reci Recibi bió ó su doct docto orado rado en mate matemá máti tica cas s de la Universidad de Budapest a los 23 años. Fue Fue pio pionero nero de la comp comput uta adora dora digi digita tal l mode moder rna y de la aplicación de la teoría de oper ope radores a lamecánica cuántica. Trabajó con Eckert y Mauchly en la Universidad de Penns ennsyl ylv vania ania, , dond donde e publ publi icó un artícu tículo lo ace acerca del del almac lmacen enam amie ient nto o de progr rogram amas as. . El conc conce epto pto de prog progr rama ama almacenado permitió la lectura de un programa dentro de la memoria de la computadora, y después la ejecución de las instrucciones del mismo sin tener que volverlas a escribir. La primera computadora en usar el citado concepto fue la llam llamad ada a EDVA EDVAC C (Ele (Elect ctr ronic onic Disc Discre rete te-V -Var aria iabl ble e Auto Automa mat tic Computer, es decir 'computadora automática electrónica de variable discreta'), desarrollada por Von Neumann, Eckert y Mauchly. Los programas almacenados dieron a las computadoras flexi flexibi bilid lidad ad y conf confiabili iabilidad dad, , hacié haciénd ndola olas s más más rápida rápidas s y menos sujetas a errores que los lo s programas programas mecánicos. Von Von Neu Neumann mann le dio dio su nom nombre bre a la arqu arquit ite ectur ctura a de von von Neumann, utilizada en casi todos los computadores, por su publica publicación ción del concepto concepto; ; aunque aunque muchos muchos piensa piensan n que este nombramiento ignora la contribución de J. Presper Eckert y John William Mauchly, Mauchly, quienes aportaron al concepto durante su trabajo en ENIAC. Virtualmente, cada computador personal, microcomputador, minicomputador y supercomputador es una máquina de von Neumann. También creó el campo de los autómatas autómatas celulares celulares sin computadores computadores, , construyendo construyendo los primeros ejemplos de autómatas autorreplicables con lápiz y papel. El concepto de constructor universal fue presentado en su trabajopóstumo Teoría de los Autómatas Autorreproductivos. El término "máquina de von Neumann" se refiere alternativamente a las máquinas autorreplicativas. Von Von Neu Neumann mann prob probó ó que que el cami camino no más más efec efecti tiv vo para para las las operaciones mineras a gran escala, como minar una luna entera o un cinturón cinturón de asteroides, asteroides, es a través del uso uso de máqu máquin inas as aut auto-re o-repl plic icat ativ ivas as, , para para tom tomar ven ventaja taja del crecimiento exponencial de tales mecanismos. Adicional a su trabajo en arquitectura computacional, von Neuma Neumann nn es acred acredita itado do con al menos menos una una cont contribuci ribución ón al estudio de algoritmos. Donald Knuth denomina a von Neumann
como el inventor, en 1945 194 5, del conocido algoritmomerge sort, en el cual la primera y segunda mitad de un array (vector) son cada una clasificadas recursivamente y luego fusionadas juntas.
PARTES DE LA ARQUITECTURA DE VON NEUMANN Los ordenador or denadores es con c on arquitectura arquitectura Eckert-Mau Ec kert-Mauchly chly constan de cinco partes:
La unidad aritmético-lógica (ALU)
La unidad de control
La memoria
Un dispositivo de entrada/sa e ntrada/salida lida
El bus de datos que pro pr oporciona un medio de transporte de los dat da tos ent en tre las la s distintas partes.
Un ordenador ord enador con arquitectura Eckert-Mauchly Eckert-Mauchly realiza o emula los siguientes pasos secuencialmente:
Enciende el ordenador y obtiene la siguiente instrucción desde la memoria en la dirección indicada por el contador de programa y la guarda en el registro de instrucció i nstrucción. n.
Aumenta el contador de programa en la longitud de la instrucción para apuntar a la siguiente.
Decod ecodif ific ica a la inst instr rucci ucción ón medi median ante te la unida nidad d de cont contro rol l. Ésta Ésta se enca encar rga de coor coordi dina nar r el rest resto o de compone componentes ntes del ordenado ordenador r para para realiz realizar ar una función función determinada.
Se ejecuta la instrucción. Ésta puede cambiar el valor del contador del programa, permitiendo así operaciones repetitivas. El contador puede cambiar también cuando se cumpla cumpla una cierta cierta condición condición aritméti aritmétic ca, hacien haciendo do que el ordenador pueda 'tomar decisiones', que pueden alcanzar cualquier grado de complejidad, mediante la aritmética y lógica anteriores.
Vuelve al paso 2.
LENGUAJE DE PROGRAMACIÓN PROGRAMACIÓN Con la apari paric ción ión de las las comp comput utad ador oras as desa desapa pare rece cen n las secue secuenc ncias ias de posic posicion iones es de llaves llaves mecán mecánica icas s que debían debían desconectarse para obtener una acción determinada, una llave conectada era un 1 y una llave desconectada era un 0. Una suces sucesió ión n de llave llaves s en cualqu cualquier iera a de sus sus dos posic posicion iones es defin efinía ía una una secue ecuenc ncia ia de ceros eros y unos unos (por (por ejemp jempl lo: 0100011010011101...) 0100011010011101... ) que qu e venía a representar una instrucción o un conjunto de instrucciones (programa) para el ordenador (o comp comput utad ador or) ) en el que que se est estaba aba trab trabaj ajan ando do. . A esta esta primera forma de especificar programas para una computadora se la denomina denomina lenguaje máquina o código má m áquina. La necesidad de recordar secuencias de programación para las acciones usuales llevó a denominarlas con nombres fáciles de memor emoriz izar ar y asoci sociar ar: : ADD ADD (suma sumar r), SUB SUB (res (rest tar), ar), MUL (mul (multi tip plica licar) r), , CALL CALL (eje (ejec cutar utar subr subrut uti ina), na), etc. etc. A esta esta secuencia de posiciones se le denominó "instrucciones", y a este ste conj conju unto nto de inst instr rucci uccion ones es se le llamó lamó leng lengua uaj je ensamblador. Poste osteri rio ormen rment te apare pareci cier eron on dife iferen rentes tes leng lengua uaje jes s de progr program amaci ación, ón, los cuale cuales s recib recibe en su denom denomin inaci ación ón porqu porque e tienen tienen una estructu estructura ra sintáctic sintáctica a similar similar a los lenguaje lenguajes s escritos por los humanos.
Concepto Un lenguaje lenguaje de programac programaci ión es un conjunto conjunto de símbolos símbolos y reglas sintácticas y semánticas que definen su estructura y el significado de sus elementos y expresiones, y utilizado para para contr controla olar r el comp comportami ortamient ento o físi físico y lógic lógico o de una máquina. Un lenguaje de programación permite a uno o más programadores especificar de manera precisa: sobre qué datos una computadora debe operar, cómo deben ser estos almacenados, transmitidos y qué acciones debe tomar bajo una varia variada da gama gama de circun circunsta stanci ncias. as. Todo Todo esto, esto, a trav través de un leng lenguaje uaje que que intent intenta a estar estar relat relativ ivame amente nte próxi próximo mo al lenguaje humano o natural, tal como sucede con el lenguaje Léxico. Léxico. Una caracte característi rístic ca relevan relevante te de los lenguajes lenguajes de progr program amaci ación ón es precis precisame amente nte que que más de un progr progra amador mador puedan tener un conjunto común de instrucciones que puedan ser comprendidas entre ellos para realizar la construcción del programa de forma colaborat c olaborativa. iva.
Los procesadores usados en las computadoras son capaces de entender y actuar según lo indican programas escritos en un lenguaj lenguaje e fijo fijo llamado llamado lenguaje lenguaje de máquina. máquina. Todo programa programa escrito en otro lenguaje puede ser ejecutado de dos maneras:
Mediante un programa que va adaptando las instrucciones conforme son encontradas. A este proceso se lo llama interpretar y a los programas que lo hacen se los conoce como intérpretes.
Tradu Traduci ciend endo o este este progr programa ama al progr programa ama equiv equivale alente nte escrito en lenguaje de máquina. A ese proceso se lo llama llama compi compila lar r y al tradu traducto ctor r se lo conoc conoce e como como un malhecho compilador.
Clasificación programación
de
los
lenguajes
de
Los lenguajes de programación se determinan según el nivel de abst abstracció racción, n, Según Según la forma forma de ejecuc ejecución ión y Según Según el paradigma de programación que poseen cada uno de ellos y esos pueden ser:
Según su nivel de abstracción Lenguajes Maquina Están escritos en lenguajes directamente inteligibles por la maquina (computadora), ya que sus instrucciones son cadenas binarias (0 y 1). Da la posibilidad de cargar (transferir un programa a la memoria) si s in nece nec esidad de traducción posterior lo que supone una velocidad de ejecución superior, solo que con poca fiabilidad y dificultad de verificar y poner a punto los programas. programas. Lenguajes de bajo nivel Los lenguajes de bajo nivel son lenguajes de programación que se acerca acercan n al funcion funcionamien amient to de una comput computadora adora. . El lenguaje de más bajo nivel es, por excelencia, el código máquina. A éste le sigue el lenguaje ensamblador, ya que al progr program amar ar en ensam ensamb blador lador se trabaj trabajan an con con los los regi registros stros e memoria de la computadora de forma directa.
Lenguajes de medio nivel Hay Hay lengua lenguajes jes de progr programa amació ción n que que son consi consider derado ados s por algunos expertos como lenguajes de medio nivel (como es el caso del lenguaje C) al tener ciertas características que los acercan a los lenguajes de bajo nivel pero teniendo, al mismo tiempo, ciertas cualidades que lo hacen un lenguaje más cercano al humano y, por tanto, de alto alt o nivel. Lenguajes de alto nivel Artículo principal: Lenguaje de alto nivel Los Los lengua lenguajes jes de alto alto nivel nivel son norma normalme lmente nte fáciles fáciles de aprender porque están formados por elementos de lenguajes naturales, como el inglés. En BASIC, el lenguaje de alto nivel más conocido, los comandos como "IF CONTADOR = 10 THEN STOP" pueden utilizarse para pedir a la computadora que pare si CONT CONTAD ADOR OR es igua igual l a 10. 10. Por Por desgr esgra acia cia para para muc muchas has personas esta forma de trabajar es un poco frustrante, dado que a pesar de que las computadoras parecen comprender un lenguaje natural, lo hacen en realidad de una forma fo rma rígida y sistemática.
Según la forma de ejecución Lenguajes compilados compilados Naturalmente, un programa que se escribe en un lenguaje de alto nivel también tiene que traducirse a un código que pueda utilizar la máquina. Los programas traductores que puede pueden n reali realiz zar esta esta oper operación ación se llaman llaman compi compilad ladore ores. s. Éstos, como los programas ensambladores avanzados, pueden gener enerar ar much muchas as líne líneas as de códig ódigo o de máqu máquin ina a por por cada cada proposición del programa fuente. Se requiere una corrida de compilación antes de procesar los datos de un problema. Los compiladores son aquellos cuya función es traducir un programa escrito en un determinado lenguaje a un idioma que la compu omputa tado dora ra enti entien enda da (len (lengu guaj aje e máq máquina uina con con cód código igo binario). Al usar un lenguaje compilado compilado (como lo son los lenguajes del popular Visual Studio de Microsoft), el programa desarrollado nunca se ejecuta mientras haya errores, sino hast hasta a que que lue luego de habe haber r comp compil ilad ado o el prog progr rama, ama, ya no aparecen errores en el código Lenguajes interpretados Se puede también utilizar una alternativa diferente de los compiladores para traducir lenguajes de alto nivel. En vez de traducir el programa fuente y grabar en forma permanente
el códi código go obj objeto eto que que se prod produc uce e dura duran nte la corr corrid ida a de compila compilación ción para utilizar utilizarlo lo en una corrida corrida de produc producción ción futura, el programador sólo carga el programa fuente en la computadora junto con los datos que se van a procesar. A conti continu nuaci ación, ón, un progr programa ama intér intérpre prete, te, almac almacena enado do en el sistema operativo del disco, o incluido de manera permanente dentr entro o de la máqui áquin na, con convier vierte te cada cada propo ropos sició ición n del programa fuente en lenguaje de máquina conforme vaya siendo necesario durante el proceso de los datos. No se graba el código objeto para utilizarlo utilizarlo posteriormente. La siguiente vez que se utilice una instrucción, se le debe inter interpr preta etar r otra otra vez vez y tradu traducir cir a lengua lenguaje je máquin máquina. a. Por ejemplo, durante el procesamiento repetitivo repetitivo de los pasos de un ciclo, cada instrucción del ciclo tendrá que volver a ser interpretado cada vez que se ejecute el ciclo, lo cual hace que el programa sea más lento en tiempo de ejecución (porque se va revisando el código en tiempo de ejecución) pero más rápido en tiempo de diseño (porque no se tiene que estar compilando a cada momento el código c ódigo completo). completo). El E l intérprete elimina la necesidad de realizar una corrida de compilación después de cada modificación del programa cuando se quiere agregar funciones o corregir errores; pero es obvio que un programa objeto compilado con antelación deberá ejecutarse con mucha mayor rapidez que uno que se debe interpretar a cada paso durante una cor co rrida de prod pro ducción
Según el paradigma de programación Un para paradi digm gma a de pro progra gramac mación ión repr repres esen enta ta un enfoq nfoqu ue particular o filosofía para la construcción del software. No es mejor uno que otro, sino que cada uno tiene ventajas y desv desven ent tajas ajas. . Depe Depend ndie iend ndo o de la situ situac ació ión n un para parad digma igma resulta más apropiado que otro. Atend tendie ien ndo al para parad digma gma de clasificar los lenguajes en :
prog progra rama maci ción ón, ,
se
pued puede en
El para paradi digm gma a imp imperat erativ ivo o o por por proce rocedi dimi mien ento tos s es cons consid ide erado rado el más más comú común n y está está repr repre esent sentad ado, o, por por ejemplo, por el C o por BASIC. El para paradi dig gma func funcio iona nal l está está repr repres esen enta tado do por por la familia de lenguajes LISP (en particular Scheme), ML o Haskell. El paradigma lógico, lógico, un ejemplo es PROLOG. El para aradig digma orient ientad ado o a objet bjeto os. Un lenguaje completamente orientado a objetos es Smalltalk. Small talk.
Si bien pued puede e sele selecc ccio iona nar rse la for forma pura de esto stos para paradi dig gmas mas al mome momen nto de prog progra rama mar, r, en la prác prácti tic ca es habit habitua ual l que se mezcle mezclen, n, dando dando lugar lugar a la progr program amaci ación ón multiparadigma. Actualmente el paradigma de programación más usado debido a múltiples ventajas respecto a sus anteriores, es la programación orientada a objetos.
Lenguaje ensamblador El lenguaje ensamblador es un tipo de d e lenguaje lenguaje de d e bajo nivel utilizado para escribir programas informáticos, y constituye constituye la representación más directa del código máquina específico para para cada cada arq arquite uitect ctur ura a de comp compu utado tadora ras s legi legibl ble e por por un programador. Fue Fue usa usado amp ampliam liamen ente te en el pas pasado ado para para el desa desarr rrol ollo lo de software, pero actualmente sólo se utiliza en contadas ocasiones, especialmente cuando se requiere la manipulación directa del hardware o se pretenden rendimientos inusuales de los equipos.
Características
Prog Progra rama mar r
en
aprender,
len lenguaj guaje e
entender,
ensam nsamb blado lador r leer,
es
dif difícil ícil
de
escribir,
depurar
y
mantener, por eso surgió la necesidad de los lenguajes compilados.
A
pesa pesar r
de
comp compil ilac ació ión, n,
perd perde er
rend endimi imient ento
en
actua ctual lidad idad
la
en la
un
proc roceso eso
mayo mayorí ría a
de
de las las
computadoras son suficientemente su ficientemente rápidas.
El lenguaje ensamblador no es portable.
Programar en lenguaje le nguaje ensamblador lleva mucho tiempo.
Los Los
prog progra rama mas s
hech hechos os
en
leng lengua uaje je
ensa ensamb mbl lador ador
son son
generalmente más rápidos. Al programar cuidadosamente en lenguaje ensamblador se pueden crear programas de 5 a 10 vece veces s más más rápid ápidos os que que con lengu engua ajes jes de alto alto nivel.
Los
programas
hechos
en
lenguaje
ensamblador
generalmente ocupan menos espacio. Un buen programa en leng lenguaje uaje ensam ensambl blado ador r puede puede ocupa ocupar r casi casi la mita mitad de espacio que su contraparte en lenguaje le nguaje de alto nivel.
Con el lenguaje ensamblador se pueden crear segmentos de código imposibles de formar en un lenguaje de alto nivel.
Ventajas y desventajas Lenguaje Ensamblador
del
El proceso de evolución trajo consigo algunas desventajas, que ahora veremos como las ventajas de usar el Lenguaje Ensamblador, respecto a un lenguaje le nguaje de alto nivel:
Velocidad Eficiencia de tamaño Flexibilidad
Velocidad El proc proceso de tradu traducci cción ón que que reali realizan zan los intér intérpr prete etes, s, implica un proceso de cómputo adicional al que el programador quiere realizar. Por ello, nos encontraremos con que un intérprete es siempre más lento que realizar la misma acción en Lenguaje Ensamblador, simplemente porque tiene el costo adicional de estar traduciendo el programa, cada vez que lo ejecutamos. De ahí nacieron los compiladores, que son mucho más rápidos que los intérpretes, pues hacen la traducción una vez y dejan el código objeto, que ya es Lenguaje de Máquina, y se puede uede ejecu jecuta tar r muy muy rápid ápida ament mente. e. Aunq Aunqu ue el proce roceso so de traducción es más complejo y costoso que el de ensamblar un progr program ama, a, normal normalmen mente te podemo podemos s despr desprec eciar iarlo, lo, contr contra a las ventajas de codificar codificar el e l programa más rápidamente. Sin embargo, la mayor parte p arte de las veces, el código generado por un compi ompil lador ador es meno menos s efici ficien ent te que el códi códig go equivalente que un programador escribiría. La razón es que el compilador no tiene tanta inteligencia, y requiere ser capaz de crear código genérico, que sirva tanto para un programa como para otro; en cambio, un programador humano pued puede e apro aprove vech char ar las las cara caract cte eríst rístic icas as espe especí cífi fica cas s del del problema, reduciendo la generalidad pero al mismo tiempo, no desperdicia ninguna instrucción, no hace ningún proceso que no sea necesario. Para darnos una idea, en una PC, y suponiendo que todos son buenos buenos programa programad dores, un programa programa para ordenar ordenar una lista lista tardará cerca de 20 veces más en Visual Basic (un intérprete), y 2 veces más en C (un compilador), que el equivalente en Ensamblado E nsamblador. r.
Por Por ello, ello, cuando cuando es críti crítica ca la veloc veloci idad del del prog programa, rama, Ensamblador se vuelve un u n candidato lógico como lenguaje. Ahora bien, esto no es un absoluto; un programa bien hecho en C puede ser muchas veces más rápido que un programa mal hecho en Ensamblador; sigue siendo sumamente importante la elección apropiada de algoritmos y estructuras de datos. Por ello, se recomienda buscar optimizar primero estos aspectos, en el lenguaje que se desee, y solamente usar Ensamblador cuando se requiere más optimización y no se puede lograr por po r estos medios.
Eficiencia de Tamaño Por las mismas razones qu q ue vimo vim os en el aspe asp ecto de d e velocidad, los compiladores e intérpretes generan más código máquina del necesario; por ello, el programa ejecutable crece. Así, cuand cuando o es import important ante e redu reducir el tamañ tamaño o del ejecu ejecut table, able, mejorando el uso de la memoria y teniendo también beneficios en velocidad, puede convenir usar el lenguaje Ensamblador. Entre los programas que es crít crí tico el e l uso mínimo de memoria, tenemos a los virus y manejador m anejadores es de dispositivos (drivers). Muchos de ellos, por supuesto, están escritos en lenguaje Ensamblador.
Flexibilidad Las razones anteriores son cuestión de grado: podemos hacer las las cosas cosas en otro otro lengu lenguaj aje, e, pero pero quer queremos emos hacer hacerla las s más efici eficien entem tement ente. e. Pero Pero todo todos los lengu lengua ajes de alto alto nivel nivel tienen tienen limitant limitante es en el control control; ; al hacer hacer abstracci abstraccio ones, limitan su propia capacidad. Es decir, existen tareas que la máquina puede hacer, pero que un lenguaje de alto nivel no permite. Por ejemplo, en Visual Basic no es posible cambiar la resolu soluc ción del moni onitor tor a medi edio pro programa rama; ; es una una limitante, impuesta por la abstracción del GUI Windows. En cambio, en ensamblador es sumamente sencillo, pues tenemos el acceso directo al hard har dware del mon mo nitor.
Por otro tro lado lado, , al ser un lengua nguaje je más más primi rimiti tivo vo, , el Ensa Ensamb mbl lador ador tien tiene e cier cierta tas s desv desven enta taja jas s resp respe ecto cto a los los lenguajes de alto nivel:
Tiempo de programac pr ogramación ión Programas fuente grandes Peligro de afectar recursos inesperadamente Falta de portabilid p ortabilidad ad
Tiempo de programación Al ser de bajo nivel, el Lenguaje Ensamblador requiere más instrucciones para realizar el mismo proceso, en comparación con un lenguaje de alto nivel. Por otro lado, requiere de más cuidado por parte del programador, pues es propenso a que los errores de lógica se reflejen más fuertemente en la ejecución. Por Por todo todo esto esto, es más más lento lento el desar desarr rollo ollo de prog programas ramas comparables en Lenguaje Ensamblador que en un lenguaje de alto nivel, pues el programador goza de una menor abstracción.
Programas fuente grande Por las mismas razones que aumenta el tiempo, crecen los programas fuentes; simplemente, requerimos más instrucciones primitivas para describir procesos equivalentes. equivalentes. Esto es una un a desve esvent ntaj aja a porq porqu ue dific ificul ulta ta el mante anten nimie imient nto o de los progr program amas, as, y nueva nuevam mente ente reduc reduce e la produc productiv tivida idad d de los programadores.
Peligro de afectar recursos inesperadamente Tenemos la ventaja de que todo lo que se puede hacer en la máqui áquina na, , se puede uede hacer acer con el Lengu engua aje Ens Ensambl amblad ador or (flexibilidad). El problema es que todo error que podamos cometer, o todo riesgo que podamos tener, podemos tenerlo también en este Lenguaje. Dicho de otra forma, tener mucho poder es útil pero también también es peligroso. En la vida práctica, afortunadamente no ocurre mucho; sin embargo, al programar en este lenguaje verán que es mucho más común que la máquina se "cuelgue", "bloquee" o "se le vaya el avión"; y que se reinicialize. reinicialize. ¿Por ¿Po r qué?, porque con este lenguaje es perfectamente posible (y sencillo) realizar secuencias de instrucciones inválidas, que normalmente no aparecen al usar un lenguaje de d e alto nivel. En ciertos ciertos casos casos extremos, extremos, puede puede llegars llegarse e a sobrescr sobrescribir ibir información del CMOS de la máquina (no he visto efectos más riesgosos); pero, si no la conservamos, esto puede causar que que deje dejemo mos s de "ver "ver" " el disc disco o duro duro, , junt junto o con con toda toda su información.
Falta de portabilidad portabilidad Como ya se mencionó, existe un lenguaje ensamblador para cada máquina; por ello, evidentemente no es una selección aprop apropia iada da de lengu lengua aje cuando cuando desea deseamos mos codif codifica icar r en una máqu máquin ina a y lue luego lle llevar var los los prog progra rama mas s a otro otros s sist sistem emas as operativos o modelos de computadoras. Si bien esto es un problema general a todos los lenguajes, es mucho más notorio en ensamblador: yo puedo reutilizar un 90% o más del código que desarrollo en "C", en una PC, al llevarlo a una RS/6000 con UNIX, y lo mismo si después lo llevo a una Macintosh, siempre y cuando esté bien hecho y siga los estándares de "C", y los principios de la programación estructurada. En cambio, si escribimos el programa en Ensamblador de la PC, por por bie bien que que lo des desarro arroll llem emos os y much mucho os está estánd ndar ares es que que sigamos, tendremos prácticamente prácticamente que reescribir el 100 % del código al llevarlo a UNIX, UNIX, y otra vez lo mismo al llevarlo a Mac.