lenguajes de máquina

Anuncio
LENGUAJES DE MÁQUINA
El lenguaje máquina de una computadora consta de cadenas de números
binarios (ceros y unos) y es el único que "entienden" directamente
los procesadores. Todas las instrucciones preparadas en cualquier lenguaje de
máquina tienen por lo menos dos partes. La primera es
el comando u operación, que dice a la computadora cuál es la función que va a
realizar. Todas las computadoras tienen un código de operación para cada una
de sus funciones. La segunda parte de la instrucción es el operando, que
indica a la computadora dónde hallar o almacenar los datos y otras
instrucciones que se van a manipular; el número de operandos de una
instrucción varía en las distintas computadoras. En una computadora
de operando único, el equivalente binario de "SUMAR 0814" podría hacer que
se sume el valor que se encuentra en la localidad de almacenamiento o dirección
0814 al valor que se encuentra en la unidad aritmética lógica. En una máquina
de dos operandos, la representación binaria de "SUMAR 0814 8672" podría
hacer que se sume el valor que está en la localidad 8672 al valor que está en
la dirección 0814. El formato de operando único es popular en las
microcomputadoras más pequeñas; la estructura de dos operandos se
encuentra en casi todas las demás máquinas.
Según los estándares actuales, las primeras computadoras eran poco
tolerantes. Los programadores tenían que traducir las instrucciones de manera
directa a la forma de lenguaje de máquina que comprendían las computadoras.
Por ejemplo, un programador que escribiera la instrucción "SUMAR 0814" para
una de las primeras máquinas IBM hubiera escrito:
000100000000000000000000000010111000
Además de recordar las docenas de códigos numéricos para los comandos del
conjunto de instrucciones de la máquina, el programador tenía que conocer las
posiciones donde se almacenan los datos y las instrucciones.
La codificación inicial muchas veces requería meses, por lo que era costosa y
era frecuente que originara errores. Revisar las instrucciones para localizar
errores era casi tan tedioso como escribirlas por primera vez. Además, si era
necesario modificar un programa posteriormente, la tarea podía llevarse
meses.
LENGUAJES ENSAMBLADORES
A principios de la década de 1950, y con el fin de facilitar la labor de los
programadores, se desarrollaron códigos nemotécnicos para las operaciones y
direcciones simbólicas. La palabra nemotécnico se refiere a una ayuda para la
memorización. Uno de los primeros pasos para mejorar el proceso de
preparación de programas fue sustituir los códigos de operaciones numéricos
del lenguaje de máquina porsímbolos alfabéticos, que son los códigos
nemotécnicos. Todas las computadoras actuales tienen códigos
nemotécnicos aunque, naturalmente, los símbolos que se usan varían en las
diferentes marcas y modelos. La computadora sigue utilizando el lenguaje de
máquina para procesar los datos, pero los programas ensambladores traducen
antes los símbolos de código de operación especificados a sus equivalentes en
lenguaje de máquina.
Este procedimiento preparó avances posteriores. Si la computadora era capaz
de traducir símbolos convenientes en operaciones básicas, ¿por qué no hacer
también que realizara otras funciones rutinarias de codificación, como la
asignación de direcciones de almacenamiento a los datos? La técnica
de direccionamiento simbólico permite expresar una dirección no en términos
de su localización numérica absoluta, sino en términos de símbolos convenientes
para el programador.
Durante las primeras etapas del direccionamiento simbólico, el programador
asigna un nombre simbólico y una dirección real a un dato. Por ejemplo, el
programador podría asignar el valor total de mercancía adquirida durante un
mes por un cliente de una tienda de departamentos a la dirección 0063, y darle
el nombre simbólico TOTAL. Se podría asignar el valor de la mercancía
devuelta sin usar durante el mes a la dirección 2047 y dársele el nombre
simbólico CRÉDITO. Así, durante el resto del programa, el programador se
referirá a los nombres simbólicos, más que a las direcciones, cuando fuera
preciso procesar estos datos. Por ejemplo, se podría escribir la instrucción "S
CRÉDITO TOTAL" para restar el valor de las mercancías devueltas del
importa total de compras para obtener el importe de la facturamensual del
cliente. A continuación, el programa ensamblador traduciría la instrucción
simbólica a esta cadena de bits:
Más adelante se hizo otra mejora. Se dejó a la computadora la tarea de asignar
y recordar las direcciones de las instrucciones. Lo único que tenía que hacer el
programador era indicar a la computadora la dirección de la primera
instrucción, y el programa ensamblador se encargaba de almacenar, de manera
automática, todas las demás en forma secuencial a partir de ese punto. Así, si
se agregaba más tarde otra instrucción al programa, no era necesario
modificar las direcciones de todas las instrucciones que seguían al punto de
inserción (como tendría que hacerse en el caso de programas escritos en
lenguaje de máquina). En vez de ello, el procesador ajustaba automáticamente
las localidades de memoria la próxima vez que se ejecutaba el programa.
En la actualidad, los programadores no asignan números de dirección reales a
los datos simbólicos, simplemente especifican dónde
quieren que se coloque la primera localidad del programa, y el programa
ensamblador se encarga de lo demás: asigna localidades tanto para las
instrucciones como para los datos.
Estos programas de ensamble, o ensamblador, también permite a la
computadora convertir las instrucciones en lenguaje ensamblador del
programador en su propio código de máquina. Un programa de instrucciones
escrito en lenguaje ensamblador por un programador se llama programa
fuente. Después de que el ensamblador convierte el programa fuente en código
de máquina a éste se le denominaprograma objeto. Para los programadores es
más fácil escribir instrucciones en un lenguaje ensamblador que en códigos de
lenguajes de máquina, pero es posible que se requieran dos corridas de
computadora antes de que se puedan utilizar las instrucciones del programa
fuente para producir las salidas deseadas.
Los lenguajes ensambladores tienen ventajas sobre los lenguajes de
máquina. Ahorran tiempo y requieren menos atención a detalles. Se incurren en
menos errores y los que se cometen son más fáciles de localizar. Además, los
programas en lenguaje ensamblador son más fáciles de modificar que los
programas en lenguaje de máquina. Pero existen limitaciones. La codificación en
lenguaje ensamblador es todavía un proceso lento. Una desventaja importante
de estos lenguajes es que tienen una orientación a la máquina. Es decir, están
diseñados para la marca y modelo específico de procesador que se utiliza, y es
probable que, para una máquina diferente, se tengan que volver a codificar los
programas.
LENGUAJES DE ALTO NIVEL
Los primeros programas ensambladores producían sólo una instrucción en
lenguaje de máquina por cada instrucción del programa fuente. Para agilizar la
codificación, se desarrollaron programas ensambladores que podían producir
una cantidad variable de instrucciones en lenguaje de máquina
por cada instrucción del programa fuente. Dicho de otra manera, una
sola macroinstrucción podía producir variaslíneas de código en lenguaje de
máquina. Por ejemplo, el programador podría escribir "LEER ARCHIVO", y el
programa traductor produciría una serie detallada de instrucciones al lenguaje
de máquina previamente preparadas, con lo que se copiaría un registro del
archivo que estuviera leyendo el dispositivo de entrada a la memoria principal.
Así, el programador no se tenía que ocupar de escribir una instrucción por cada
operación de máquina realizada.
El desarrollo de las técnicas nemotécnicas y las macroinstrucciones condujo, a
su vez, al desarrollo de lenguajes de alto nivel que a menudo están orientados
hacia una clase determinada de problemas de proceso. Por ejemplo, se han
diseñado varios lenguajes para procesar problemas científico-matemático,
asimismo han aparecido otros lenguajes que hacen hincapié en las aplicaciones
de proceso dearchivos.
A diferencia de los programas de ensamble, los programas en lenguaje de alto
nivel se pueden utilizar con diferentes marcas de computadores sin tener que
hacer modificaciones considerables. Esto permite reducir sustancialmente
el costo de la reprogramación cuando se adquiere equipo nuevo. Otras ventajas
de los lenguajes de alto nivel son:


Son más fáciles de aprender que los lenguajes ensambladores.


Se pueden escribir más rápidamente.


Permiten tener mejor documentación.


Son más fáciles de mantener.


Un programador que sepa escribir programas en uno de estos lenguajes no está
limitado a utilizar un solo tipo de máquina.
ENGUAJES 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 pueden realizar esta operación se llaman compiladores. Éstos,
como los programas ensambladores
en un determinado lenguaje a un idioma que la computadora entienda (lenguaje
máquina con código binario).
Al usar un lenguaje compilado (como lo son los lenguajes del popular Visual
Studio de Microsoft), el programa desarrollado nunca se ejecuta mientras
haya errores, sino hasta que luego de haber compilado el programa, ya no
aparecen errores en el código.
avanzados, pueden generar muchas líneas de código de máquina por 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
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ódigo objeto que se produce durante la
corrida de compilación para utilizarlo en una corrida de producción futura, el
programador sólo carga el programa fuente en la computadora junto con los
datos que se van a procesar. A continuación, un programa
intérprete, almacenado en el sistema operativo del disco, o incluido de manera
permanente dentro de la máquina, convierte cada proposició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
posteriormente.
La siguiente vez que se utilice una instrucción, se le debe interpretar otra vez
y traducir a lenguaje máquina. Por ejemplo, durante el procesamiento
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 completo). El
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 corrida de producción.
Descargar