Saltar al contenido principal
LibreTexts Español

3.1: Estructura de programas de bajo nivel

  • Page ID
    154371
  • \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)

    \( \newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\)

    ( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\)

    \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)

    \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\)

    \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)

    \( \newcommand{\Span}{\mathrm{span}}\)

    \( \newcommand{\id}{\mathrm{id}}\)

    \( \newcommand{\Span}{\mathrm{span}}\)

    \( \newcommand{\kernel}{\mathrm{null}\,}\)

    \( \newcommand{\range}{\mathrm{range}\,}\)

    \( \newcommand{\RealPart}{\mathrm{Re}}\)

    \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)

    \( \newcommand{\Argument}{\mathrm{Arg}}\)

    \( \newcommand{\norm}[1]{\| #1 \|}\)

    \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)

    \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\AA}{\unicode[.8,0]{x212B}}\)

    \( \newcommand{\vectorA}[1]{\vec{#1}}      % arrow\)

    \( \newcommand{\vectorAt}[1]{\vec{\text{#1}}}      % arrow\)

    \( \newcommand{\vectorB}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vectorC}[1]{\textbf{#1}} \)

    \( \newcommand{\vectorD}[1]{\overrightarrow{#1}} \)

    \( \newcommand{\vectorDt}[1]{\overrightarrow{\text{#1}}} \)

    \( \newcommand{\vectE}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash{\mathbf {#1}}}} \)

    \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)

    \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)

    Introducción

    Esta sección introduce al alumno a los lenguajes de programación de bajo nivel. Los alumnos deben distinguir los lenguajes de bajo nivel y sus diferentes usos en la programación informática

    Detalles de la actividad

    En informática, un lenguaje de programación de bajo nivel es un lenguaje de programación que proporciona poca o ninguna abstracción de la arquitectura de conjunto de instrucciones de una computadora: los comandos o funciones en el lenguaje se mapean estrechamente a las instrucciones del procesador. Esto se refiere a código de máquina o lenguaje ensamblador. La palabra “bajo” se refiere a la pequeña o inexistente cantidad de abstracción entre el lenguaje y el lenguaje máquina; debido a esto, los lenguajes de bajo nivel a veces se describen como “cercanos al hardware”. Debido a la estrecha relación entre el lenguaje y la arquitectura de hardware, los programas escritos en lenguajes de bajo nivel tienden a ser relativamente no portátiles.

    Los lenguajes de bajo nivel pueden convertirse en código de máquina sin un compilador o intérprete (los lenguajes de programación de segunda generación utilizan un procesador más simple llamado ensamblador) y el código resultante se ejecuta directamente en el procesador. Se puede hacer que un programa escrito en un lenguaje de bajo nivel se ejecute muy rápidamente, con una pequeña huella de memoria. Un programa equivalente en un lenguaje de alto nivel puede ser menos eficiente y usar más memoria. Los lenguajes de bajo nivel son simples, pero considerados difíciles de usar, debido a numerosos detalles técnicos que el programador debe recordar. En comparación, un lenguaje de programación de alto nivel aísla la semántica de ejecución de la arquitectura de computadoras de la especificación del programa, lo que simplifica el desarrollo.

    Códigos de máquina

    El código de máquina es el único lenguaje que una computadora puede procesar directamente sin una transformación previa. Actualmente, los programadores casi nunca escriben programas directamente en código de máquina, ya que requiere atención a numerosos detalles que un lenguaje de alto nivel maneja automáticamente, requiere memorizar o buscar códigos numéricos para cada instrucción, y es extremadamente difícil de modificar.

    El verdadero código de máquina es un flujo de datos brutos, generalmente binarios. Un programador que codifica en “código de máquina” normalmente codifica instrucciones y datos en una forma más legible como decimal, octal o hexadecimal que es traducido al formato interno por un programa llamado cargador o conmutado a la memoria de la computadora desde un panel frontal.

    Lenguaje de montaje

    Los lenguajes de segunda generación proporcionan un nivel de abstracción en la parte superior del código de la máquina. En los primeros días de la codificación en computadoras como el TX-0 y el PDP-1, lo primero que hicieron los hackers del MIT fue escribir ensambladores. El lenguaje ensamblador tiene poca semántica o especificación formal, siendo solo un mapeo de símbolos legibles por humanos, incluyendo direcciones simbólicas, a códigos de operación, direcciones, constantes numéricas, cadenas, etc.

    Por lo general, una instrucción de máquina se representa como una línea de código de ensamblaje. Los ensambladores producen archivos de objetos que pueden vincularse con otros archivos de objetos o cargarse por su cuenta. La mayoría de los ensambladores proporcionan macros para generar secuencias comunes de instrucciones.

    Limitaciones de las arquitecturas de bajo nivel

    • Muy difícil de leer o aprender para los no iniciados.

    • No muy autodocumentando como lenguajes de nivel superior.

    • Más difícil de modificar y mantener.

    • Menos soporte, que lenguajes de alto nivel, en entornos de desarrollo y depuración.

    Conclusión

    El alumno debe distinguir los distintos niveles de programación de bajo nivel utilizados en la programación. También pueden exponer las limitaciones derivadas de comparar los dos lenguajes de programación de bajo nivel

    Evaluación

    Distinguir entre lenguajes de máquina y ensamblaje

    El lenguaje de la máquina son los bits reales utilizados para controlar el procesador en la computadora, generalmente vistos como una secuencia de números hexadecimales (típicamente bytes). El procesador lee estos bits desde la memoria del programa, y los bits representan “instrucciones” en cuanto a qué hacer a continuación.

    Por lo tanto, el lenguaje de la máquina proporciona una forma de ingresar instrucciones en una computadora (ya sea a través de interruptores, cinta perforada o un archivo binario).

    Mientras que el lenguaje ensamblador es una visión más legible por humanos del lenguaje máquina. En lugar de representar el lenguaje de la máquina como números, las instrucciones y los registros reciben nombres (generalmente palabras abreviadas, o mnemotécnicos, como ld significa “cargar”). A diferencia de un lenguaje de alto nivel, el ensamblador está muy cerca del lenguaje de la máquina. Las principales abstracciones (aparte de los nemotécnicos) son el uso de etiquetas en lugar de direcciones de memoria fijas, y comentarios.

    Un programa de lenguaje ensamblador (es decir, un archivo de texto) es traducido al lenguaje de máquina por un ensamblador. Un desensamblador realiza la función inversa (aunque los comentarios y los nombres de las etiquetas habrán sido descartados en el proceso ensamblador).

    El lenguaje de la máquina es más rápido que el lenguaje ensamblador, incluso que el lenguaje ensamblador


    This page titled 3.1: Estructura de programas de bajo nivel is shared under a CC BY-SA license and was authored, remixed, and/or curated by Harrison Njoroge (African Virtual University) .