Lenguajes de Bajo nivel


Lenguaje de Bajo nivel 


Un lenguaje de programación de características bajo nivel es aquel en el que sus instrucciones ejercen un control directo sobre el hardware y están condicionados por la estructura física de la computadora que lo soporta. El uso de la palabra bajo en su denominación no implica que el lenguaje sea inferior a un lenguaje de alto nivel, si no que se refiere a la reducida abstracción entre el lenguaje y el hardware. 
Son lenguajes dependientes de la máquina, el programa que se realiza con este tipo de lenguajes no se pueden migrar o utilizar en otras maquinas. 
Estos lenguajes como están diseñados a medida del hardware, aprovechan al máximo las características del mismo.

Dentro de estos están los lenguajes: 

  • Lenguaje Maquina:

El lenguaje de máquina o código máquina es el sistema de códigos directamente interpretable por un circuito microprogramable, como el microprocesador de una computadora o el microcontrolador de un autómata. Este lenguaje está compuesto por un conjunto de instrucciones que determinan acciones a ser tomadas por la máquina. Un programa consiste en una cadena de estas instrucciones más un conjunto de datos sobre el cual se trabaja. Estas instrucciones son normalmente ejecutadas en secuencia, con eventuales cambios de flujo causados por el propio programa o eventos externos. El lenguaje de máquina es específico de la arquitectura de la máquina, aunque el conjunto de instrucciones disponibles pueda ser similar entre arquitecturas distintas.

Ejemplos de Lenguaje maquina:

00000 1001110 LOAD 11110

00001 10110100 STOR 10100

00010 10011110 LOAD 11110
00011 11010100 ADD 10100
00100 10111111 STOR 11111
00101 00000000 HALT




Vamos a ver que para poder realizar cálculos relativamente complejos se requiere un conjunto bastante pequeño de instrucciones. Por ahora, y para simplificar nuestro diseño, nuestra máquina sólo operarará con números enteros, por lo tanto nuestro set de instrucciones se remite a este tipo de datos y opera sobre los elementos de la arquitectura descrita anteriormente.


Nuestra computadora tendrá las siguientes instrucciones (las abreviaturas van entre paréntesis):

  • ALTO: Detiene la máquina.
  • LIMPIAR (LIM): coloca el acumulador en cero. Se abrevia LIM
  • ACUMULAR (ACUM): suma la palabra que sigue al acumulador. Se abrevia ACUM
  • MULTIPLICAR (MUL): multiplica el valor del acumulador por la palabra que sigue.
  • RESTAR (RES): resta el valor de la siguiente palabra de memoria del acumulador.
  • DIVIDIR (DIV): divide el valor del acumulador por el valor de la próxima palabra.
  • IMPRIMIR (IMPR): imprime el valor del acumulador en pantalla.
  • LEER: lee un valor desde el teclado y lo guarda en el acumulador
  • ALMACENAR (ALM): almacena el valor del acumulador en la posición de memoria indicada por la siguiente palabra.
  • RECUPERAR (REC): recupera el valor en la posición de memoria indicada por la siguiente palabra y lo deposita en el acumulador.
  • RECUPERAR R0 (RR0): almacena el valor en la posición de memoria indicada por la siguiente palabra en el registro R0
  • RECUPERAR R1 (RR1): almacena el valor en la posición de memoria indicada por la siguiente palabra en el registro R1.



Hay versiones de las operaciones matemáticas que operan con los registros R0 y R1 y dejan el resultado en el acumulador:
  • RSUM: suma los valores en los registros R0 y R1 y deja el resultado en el acumulador
  • RMUL: multiplica los valores en registros R0 y R1 y deja el resultado en el acumulador
  • RRES: resta al valor del registro R0 el valor del registro R1 y deja el resultado en el acumulador
  • RDIV: divide el valor del registro R0 por el valor del registro R1 y deja el resultado en el acumulador



Hay 2 instrucciones especiales que sirven para guardar valores en R0 y R1:
  • AR0: almacena el valor que sigue en el registro R0
  • AR1: almacena el valor que sigue en el registro R0



Y hay instrucciones especiales con los registros:
  • INC: incrementa en 1 el acumulador
  • DEC: decrementa en 1 el acumulador
  • INCR0: incerementa en 1 el registro R0
  • DECR0: decrementa en 1 el registro R0
  • INCR1: incrementa en 1 el registro R1
  • DECR1: decrementa en 1 el registro R1



Hay instrucciones de salto, estas permiten cambiar el valor del IP, es decir, cambiar desde que posición en memoria se leerá la siguiente instrucción:
  • SALTA: Salta a la posición definida por la palabra siguiente. Es decir, cambia el valor del IP.
  • SALTA SI CERO (SSC): Salta a la posición definida por la palabra siguiente si el valor del acumulador es cero.
  • SALTA SI NEGATIVO (SSN): Salta a la posición definida por la palabra siguiente si el valor del acumulador es negativo.
  • SALTA SI POSITIVO (SSN): Salta a la posición definida por la palabra siguiente si el valor del acumulador es positivo (mayor que 0).
  • SRMA: Salta a la posición definida por la palabra siguiente si el registro R0 es mayor que el registro R1
  • SRME: Salta a la posición definida por la palabra siguiente si el registro R0 es menor que el registro R1
  • SRIG: Salta a la posición definida por la palabra siguiente si el registro R0 es igual al registro R1

  • Lenguaje Ensamblador:
El lenguaje ensamblador, o assembler (en inglés assembly language y la abreviación asm), es un lenguaje de programación de bajo nivel. Consiste en un conjunto de mnemónicos que representan instrucciones básicas para los computadores, microprocesadores, microcontroladores y otros circuitos integrados programables. Implementa una representación simbólica de los códigos de máquina binarios y otras constantes necesarias para programar una arquitectura de procesador y constituye la representación más directa del código máquina específico para cada arquitectura legible por un programador. Cada arquitectura de procesador tiene su propio lenguaje ensamblador que usualmente es definida por el fabricante de hardware, y está basada en los mnemónicos que simbolizan los pasos de procesamiento (las instrucciones), los registros del procesador, las posiciones de memoria y otras características del lenguaje. Un lenguaje ensamblador es por lo tanto específico de cierta arquitectura de computador física (o virtual). Esto está en contraste con la mayoría de los lenguajes de programación de alto nivel, que idealmente son portábles.

VENTAJAS DE LOS LENGUAJES ENSAMBLADORES

  • Un programa escrito en el lenguaje ensamblador requiere considerablemente menos memoria y tiempo de ejecución que un programa escrito en los conocidos lenguajes de alto nivel, como C, C++, java, etc. 
  • El lenguaje ensamblador da a un programador la capacidad de realizar tareas muy técnicas que serian difíciles, si no es que imposibles de realizar en un lenguaje de alto nivel. 
  • El conocimiento del lenguaje ensamblador permite una comprensión de la arquitectura de la maquina que ningún lenguaje de alto nivel puede ofrecer. 
  • Aunque la mayoría de los especialistas en Software desarrolla aplicaciones en lenguajes de alto nivel, que son más fáciles de escribir y de dar mantenimiento, una practica común es recodificar en lenguaje ensamblador aquellas rutinas que han causado cuellos de botella en el procesamiento. 
  • Los programas residentes y rutinas de servicio de interrupción casi siempre son desarrollados en el lenguaje ensamblador. 
  • Los lenguajes de alto nivel fueron diseñados para eliminar las particularidades de una computadora especifica, mientras que un lenguaje ensamblador esta diseñado para una familia especifica de microprocesadores.

Características

  • El código escrito en lenguaje ensamblador posee una cierta dificultad de ser entendido directamente por un ser humano ya que su estructura se acerca más bien al lenguaje máquina, es decir, lenguaje de bajo nivel.
  • El lenguaje ensamblador es difícilmente portable, es decir, un código escrito para un Microprocesador, suele necesitar ser modificado, muchas veces en su totalidad para poder ser usado en otra máquina distinta, aun con el mismo Microprocesador, solo pueden ser reutilizados secciones especiales del código programado.
  • Los programas hechos en lenguaje ensamblador, al ser programado directamente sobre Hardware, son generalmente más rápidos y consumen menos recursos del sistema (memoria RAM y ROM). Al programar cuidadosamente en lenguaje ensamblador se pueden crear programas que se ejecutan más rápidamente 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 código difíciles de programar en un lenguaje de alto nivel.
  • También se puede controlar el tiempo en que tarda una Rutina en ejecutarse, e impedir que se interrumpa durante su ejecución.
  • El lenguaje ensamblador es un código estructurado y gravitatorio desarrollado sobre un archivo de programación (.ASM), en el cual pueden existir varios programas, macros o rutinas que pueden ser llamados entre si.

No hay comentarios:

Publicar un comentario

Otras entradas relacionadas

Introducción a C++