1.1. Lenguaje máquina
Es el único lenguaje que entiende directamente el
ordenador. Por esta razón, su estructura está totalmente adaptada a los
circuitos de la máquina y muy alejada de la forma de expresión y análisis de
los problemas propia de los humanos. Esto hace que la programación en este
lenguaje resulte tediosa y complicada, requiriéndose un conocimiento profundo
de la arquitectura física del ordenador. Frente a esto, el código máquina hace
posible que el programador utilice la totalidad de recursos que ofrece el ordenador,
obteniéndose programas muy eficientes (que aprovechan al máximo los recursos
existentes) en tiempo de ejecución y en ocupación de memoria.
Las principales características del lenguaje máquina son
las siguientes:
• Las instrucciones se expresan en el alfabeto binario
(están codificadas en binario como cadenas de ceros y unos), pudiéndose
utilizar códigos intermedios (octal y hexadecimal). Esta característica hace
que un programa en lenguaje máquina sea difícil de entender y, como
consecuencia, difícil de modificar.
• Los datos se referencian por medio de las direcciones
de memoria donde se encuentran (no aparecen nombres de variables o de
constantes).
• Las instrucciones realizan operaciones muy simples. El
programador debe ingeniárselas para expresar cada una de las operaciones que
desea realizar en función de las instrucciones elementales que dispone.
• Existe muy poca versatilidad para la redacción de las
instrucciones, ya que, tienen un formato rígido en cuanto a la posición de los
distintos campos (código de operación seguido de los campos dedicados a los
operandos).
• El lenguaje máquina depende y está íntimamente ligado a
la CPU del ordenador. Esto hace que los programas en dicho lenguaje no sean
transferibles de un modelo de ordenador a otro, es decir, existe baja
portabilidad.
• En un programa en lenguaje máquina no pueden incluirse
comentarios que faciliten la legibilidad del mismo.
1.2. Lenguaje ensamblador
Constituye el primer
intento de sustitución del lenguaje máquina por uno más cercano al usado por
los humanos. Este acercamiento se plasma en las siguientes aportaciones:
• Uso de una notación simbólica o nemotécnica para
representar los códigos de operación. De esta forma se evitan los códigos
numéricos, tan difíciles de manejar. Normalmente, los códigos nemotécnicos
están constituidos por abreviaturas de las operaciones en inglés. Así, por
ejemplo, la suma se representa en la mayoría de los ensambladores por ADD.
• Direccionamiento simbólico. En lugar de utilizar
direcciones binarias absolutas, los datos pueden identificarse con nombres.
• Se permite el uso de comentarios entre las líneas de
instrucciones, haciendo posible la redacción de programas más legibles.
Aparte de esto, el
lenguaje ensamblador presenta la mayoría de los inconvenientes del lenguaje
máquina, como son su repertorio muy reducido de instrucciones, el rígido
formato de las instrucciones, la baja portabilidad y la fuerte dependencia del
hardware. Por otro lado, mantiene la ventaja del uso óptimo de los recursos
hardware, permitiendo la obtención de un código muy eficiente.
Este tipo de lenguajes hacen corresponder a cada
instrucción en ensamblador una instrucción en
código máquina. Esta
traducción es llevada a cabo por un programa traductor denominado ensamblador.
Para solventar en cierta medida la limitación que supone
poseer un repertorio de instrucciones tan reducido, se han desarrollado unos
ensambladores especiales denominados macroensambladores. Los lenguajes que
traducen los macroensambladores disponen de macroinstrucciones cuya traducción
da lugar a varias instrucciones máquina y no a una sola. Por ejemplo, existen
macroinstrucciones para multiplicar, dividir, transferir bloques de memoria
principal a disco, etc.
Dado que el lenguaje ensamblador está fuertemente
condicionado por la arquitectura del ordenador que soporta, los programadores
no suelen escribir programas de tamaño considerable en
ensamblador. Más bien usan
este lenguaje para afinar partes importantes de programas escritos en lenguajes
de más alto nivel. El lenguaje ensamblador sigue siendo importante, ya que, da
al programador el control total de la máquina, y como resultado genera un
código compacto, rápido y eficiente.
1.3. Lenguajes de alto nivel
Los esfuerzos
encaminados a hacer la labor de programación independiente de la máquina dieron
como resultado la aparición de los lenguajes de programación de alto nivel.
Estos lenguajes, más evolucionados, utilizan palabras y frases relativamente
fáciles de entender y proporcionan también facilidades para expresar
alteraciones del flujo de control de una forma bastante sencilla e intuitiva.
Las características fundamentales de los lenguajes de
alto nivel son las siguientes:
• Son independientes de la arquitectura física del
ordenador. Esto permite utilizar los mismos programas en ordenadores de
arquitecturas diferentes (portabilidad) y, además, no es necesario conocer el
hardware específico de la máquina.
• Normalmente, una sentencia da lugar, al ser traducida,
a varias instrucciones en lenguaje máquina.
• Utilizan notaciones cercanas a las habituales en un
determinado ámbito. Las operaciones se expresan con sentencias muy parecidas al
lenguaje matemático o al lenguaje natural. Se utilizan, por lo general,
palabras o términos en inglés.
La utilización de
conceptos habituales suele implicar las siguientes cualidades:
a) Las instrucciones se expresan por medio de texto,
conteniendo caracteres alfanuméricos y caracteres especiales.
b) Se puede asignar un nombre simbólico a determinados
componentes del programa, para facilitar su comprensión. En los lenguajes
imperativos, el programador puede definir las variables que desee, dándoles los
nombres que considere oportuno, y siendo las reglas para la denominación de las
mismas poco restrictivas.
c) Se suelen incluir instrucciones potentes de uso
frecuente que son ofrecidas por el lenguaje de programación. Por ejemplo, se
suelen ofrecer funciones matemáticas de uso común (seno, coseno, etc.),
operadores específicos de entrada/salida, operadores de tratamiento de cadenas
de caracteres, etc.
d) Pueden incluirse comentarios en las líneas de
instrucciones, o en líneas específicas de comentarios. Esto facilita la
legibilidad de los programas, tanto para el propio programador, como para otras
personas.
Como consecuencia de
este alejamiento de la máquina y acercamiento a las personas, los programas
escritos en lenguajes de programación no pueden ser interpretados directamente
por el ordenador, siendo necesario realizar previamente su traducción a
lenguaje máquina. Hay dos tipos de traductores, que vamos a considerar en la
siguiente sección, los compiladores y los intérpretes
No hay comentarios:
Publicar un comentario