Saltar al contenido principal
LibreTexts Español

3.2: Soporte de arquitectura de bajo nivel a lenguajes de alto nivel

  • Page ID
    154370
  • \( \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}}\)

    Introducción

    Esta sección presenta a los alumnos los diversos soportes que ofrecen los lenguajes de programación, comenzando por los lenguajes de programación de bajo nivel a los de alto nivel.

    Detalles de la actividad

    El soporte de arquitectura desde lenguajes de bajo nivel hasta alto nivel es de las siguientes maneras;

    Abstracción en el diseño de software;

    1. Abstracción a nivel de montaje

    Un programador que escribe directamente con el conjunto de instrucciones de la máquina en bruto. Expresar el programa en términos de instrucciones, direcciones, registros, bytes y palabras

    2. Lenguas de alto nivel

    Permite al programador pensar en términos de abstracciones que están por encima del nivel de la máquina. Es posible que el programador ni siquiera sepa en qué máquina se ejecutará finalmente el programa. La filosofía RISC centra el diseño de conjuntos de instrucciones en operaciones primitivas flexibles a partir de las cuales el cumplidor puede construir sus operaciones de alto nivel

    3. Tipos de datos

    a) Soporte ARM para caracteres

    Para el manejo de caracteres es la instrucción de carga y almacenamiento de bytes sin signo

    b) ANSI (American National Standards Institute) C tipos de datos básicos

    Define los siguientes tipos de datos básicos:

    • SignedandunsignedCharactersofatlasteightbits—Integrados cortos firmados y sin signo de al menos 16 bits — Enteros firmados y sin signo de al menos 16 bits — Enteros largos firmados y sin signo de al menos 32 bits — Números de punto flotante, doble y doble largo de punto flotante — Tipos enumerados — Campos de bits (conjuntos de Variables booleanas).

    • El compilador ARM C adopta los tamaños mínimos para cada uno de estos tipos

    • El entero estándar utiliza valores de 32 bits

    c) Tipos de datos derivados de ANCI C

    • Define tipos de datos derivados: matrices, funciones, estructuras, punteros, uniones

    • Los punteros ARM tienen 32 bits de largo y se asemejan a enteros sin signo

    • El compilador ARM C alinea caracteres en límites de bytes, enteros cortos en direcciones pares y todos los demás tipos en límites de palabras

    d) Soporte arquitectónico ARM para tipos de datos C

    • Proporciona soporte nativo para enteros de 32 bits firmados y sin signo y para bytes sin signo, cubriendo los tipos de caracteres enteros C, enteros largos y sin signo

    • Para arreglos y estructuras: direccionamiento de índice base más escalado

    • Las versiones actuales del ARM incluyen bytes firmados y cargas y almacenes de 16 bits firmados y sin firmar, proporcionando cierto soporte nativo para tipos de caracteres enteros cortos y firmados

    4. Expresiones

    a) Registrar uso

    • La clave para la evaluación eficiente de una expresión compleja es obtener los valores requeridos en los registros en el orden correcto y asegurar que los valores de uso frecuente son normalmente residentes en los registros
    • Optimizar esta compensación entre el número de valores que se pueden mantener en los registros y el número de registros restantes es una tarea importante para el cumplidor

    b) Soporte ARM

    • El formato de instrucción de 3 direcciones utilizado por el ARM le da al compilador la máxima flexibilidad
    • Instrucciones de pulgar (generalmente de 2 direcciones) — restringe la libertad del compilador hasta cierto punto — menor número de registros generales también hace que su trabajo sea más difícil

    c) Acceso a operandos

    • Un procedimiento normalmente funcionará con operandos que se presentan de una de las siguientes maneras, y se puede acceder como se indica como un argumento pasado a través de un registro — El valor ya está en un registro, por lo que no es necesario más trabajo como argumento pasado en la pila — Puntero de pila (r13) direccionamiento relativo con un desplazamiento inmediato conocido en tiempo de compilación permite recopilar el operando con un solo LDR
    • Como constante en el pool literal del procedimiento, el direccionamiento relativo a PC, nuevamente con un desplazamiento inmediato conocido en tiempo de compilación, da acceso con un solo LDR
    • Como variable local: a las variables locales se les asigna espacio en la pila y se accede mediante
      • un puntero de pila LDR relativo
      • Como variable global: a las variables globales (y estáticas) se les asigna espacio en el área estática y se accede mediante el direccionamiento relativo de base estática (generalmente está en r9)

    d) Aritmética de puntero

    • La aritmética de los punteros depende del tamaño de los tipos de datos a los que apuntan los punteros
    • Si se usa una variable como desplazamiento, debe escalarse en tiempo de ejecución
    • Si p se mantiene en r0 e i en r1, la parte superior de cambio se puede compilar como: ADD r0, r0, r1, LSL #2; scale r1 a int

    e) Matrices

    • La declaración: int a [10]; — una referencia a un [i] es equivalente a la forma puntero-más-offset * (a+i)

    Conclusión

    La sección enumera varios soportes que se pueden obtener mediante el uso de las distintas operaciones de nivel de programación. Esto puede incluir abstracción, aritmética de punteros, matrices, etc.

    Evaluación

    1. Explicar los siguientes soportes como obtenibles en la aplicación de los distintos niveles de programación

    • Abstracción; es una técnica para gestionar la complejidad de los sistemas informáticos. Funciona estableciendo un nivel de complejidad sobre el cual una persona interactúa con el sistema, suprimiendo los detalles más complejos por debajo del nivel actual.

    • Aritmética de puntero: es otra forma de atravesar una matriz.

    2. Describir 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. se refiere a se refiere ya sea 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 se pueden convertir a código de máquina sin un compilador o intérprete. Un programa escrito en un lenguaje de bajo nivel se puede hacer funcionar muy rápidamente, con una pequeña huella de memoria.


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