Tema 1 Introducción al lenguaje ensamblador - SLVany/Lenguajes-de-Interfaz GitHub Wiki

1.1 Importancia de la programación en lenguaje ensamblador

Lenguaje ensamblador

El lenguaje ensamblador es un lenguaje de bajo nivel. Se utiliza para programar directamente en el lenguaje de maquina de un un procesador especifico. Con el tiempo, la implementación de este lenguaje a disminuido pero se sigue usando en:

  • Optimización de rendimiento
    • Este lenguaje permite un control mas fino del hardware que permite tener un rendimiento mas eficiente que los lenguajes de alto nivel.

  • Sistemas embebidos
    • Se usa aquí ya que en estos sistemas hay recursos es limitado y el tamaño del código es un factor critico.

  • Reversión de Ingeniería
    • Este lenguaje se utiliza en la reversión de la ingeniería el cual descompila y analiza el código ejecutable para comprender su funcionamiento.

  • Entendimiento profundo del hardware
    • Con este lenguaje uno puede llegar a tener un mayor entendimiento de la arquitectura y funcionamiento del hardware. El tener este tipo de conocimientos es de gran utilidad al momento de hacer alguna investigación y/o desarrollar tecnologías.

1.2 El procesador y sus registro internos

Componentes principales de una computadora

  • Unidad central de procesamiento (CPU)
    • Es el cerebro de la computadora y se encarga de realizar cálculos y ejecutar programas.

  • Tarjeta Madre
    • Es el componente principal que conecta todos los componentes de la computadora y permite su comunicación.

  • Memoria RAM
    • Almacena los datos y programas que se están utilizando en el momento.

  • Disco Duro y/o SSD
    • Almacena los archivos y programas permanentes de la computadora

  • Tarjeta de Video
    • Se encarga de generar la señal de vídeo para la pantalla.

  • Fuente de poder
    • Proporciona energía a todos los componentes de la computadora.

Zoom al CPU

Las partes principales de un CPU son:

  • Arquitectura de la CPU
    • Esta define la forma en que funciona la CPU. Podemos encontrar 7 arquitecturas de CPU las cuales son Arquitectura Von Neumann, Arquitectura Harvard, Arquitectura CISC, Arquitectura RISC, Arquitectura VLIW, Arquitectura EPIC y Arquitectura x86.

  • Unidades de Ejecución
    • Estas unidades son clave para llevar acabo operaciones matemáticas y lógicas utilizadas en cálculos y toma de decisiones. Algunos ejemplos son: ALU(Arithmetic Logic Unit), FPU(Floating Point Unit), CU(Control Unit) y SIMD(Single Instruction, Multiple Data).

  • Registros
    • Los registros son componentes de memoria de acceso rápido dentro de un procesador que almacenan y acceden a los datos y las instrucciones necesarias para la ejecución de un programa.

  • Buses de datos
    • Los bus de datos son los canales de comunicación que permiten la transferencia de datos y comandos entre las diferentes partes del CPU. Hay diferentes tipos de bus de datos como lo son de datos, de control, de direcciones, frontal, PCI y USB.

  • Control Unit
    • Este es uno de los componentes importantes ya que se encarga de controlar y dirigir el flujo de operaciones dentro del sistema. Sus tareas principales son: decodificar instrucciones, generar señales de control, el control de acceso de memoria, control de registros, selección de siguiente instrucción y manejo de interrupciones.

  • Cache
    • Es una pequeña área de memoria en el CPU que guarda datos temporalmente y programas frecuentemente utilizados para aumentar la velocidad del CPU. Aquí la única diferencia es que se encuentra cerca del procesador y es mucha mas rápida que la memorial principal (RAM) o el disco duro.

1.3 La memoria principal (RAM)

Esta memoria es de acceso aleatorio utilizada en computadoras para almacenar datos y programas en ejecución. Esta memoria se clasifica como volátil ya que cuando se apaga la computadora, se pierde todo. Sus características de esta memoria son:

  • Capacidad: La cantidad de memoria RAM disponible en una computadora se mide en gigabytes (GB).
  • Velocidad: La velocidad de la memoria RAM se mide en MHz o GHz y se refiere a la frecuencia con la que puede accederse a los datos almacenados en la memoria.
  • Latencia: La latencia se refiere al tiempo que tarda la memoria RAM en responder a una solicitud de datos.
  • Configuración: La memoria RAM se puede configurar en módulos o barras individuales, que se insertan en los ranurados de memoria en la placa base de la computadora.

Tipos de memorias RAM

  • SRAM
    • No requieres ser refrescada para mantener los datos almacenados haciendola más rápida que otras formas de memoria RAM. Esta es más costosa y consume más energía que la DRAM.

  • DRAM
    • Requiere ser refrescada constantemente para mantener los datos almacenados. Esta es más barata y consume menos energía que la SRAM pero es más lenta.

  • SDRAM
    • Esta sincroniza su reloj con el reloj de la placa base, lo que permite una mayor velocidad de transmisión de datos.

  • DDR
    • Es una versión más rápida de la SDRAM, permite una tasa de transmisión de datos doble en comparación con la SDRAM convencional.

  • DDR2 SDRAM
    • Es una versión mejorada de la DDR SDRAM, permite una tasa de transmisión de datos aún más rápida y una mayor eficiencia en el uso de energía.

  • DDR3 SDRAM
    • Es una versión mejorada de la DDR2 SDRAM, aumenta la tasa de transmision de datos y tiene mayor eficiencia en el uso de energia.

  • DDR4
    • Es una versión mejorada de la DDR3 SDRAM, aumenta la tasa de transmision de datos y tiene mayor eficiencia en el uso de energia.

1.4 El concepto de interrupciones

Una interrupción es una señal enviada al procesador por un periférico o por el propio sistema operativo para indicar que se ha producido un evento que requiere atención. El procesador detiene su tarea actual y transfiere el control a una rutina de manejo de interrupciones que está diseñada para atender al evento específico. Una vez que se ha completado la tarea, el control vuelve al programa interrumpido y continúa su ejecución normal.

Hay diferentes tipos de interrupciones:

  • Interrupciones de Hardware: Son generadas por dispositivos externos a la CPU, como por ejemplo un teclado, un mouse, etc.
  • Interrupciones de Software: Son generadas por el propio software, como una excepción, una llamada a sistema, una interrupción programada, etc.
  • Interrupciones de nivel alto: Son aquellas con alta prioridad y se manejan de forma inmediata por la CPU.
  • Interrupciones de nivel bajo: Son aquellas con baja prioridad y se manejan en el orden en que se reciben.
  • Interrupciones de servicio: Son aquellas que proporcionan un servicio específico a la CPU, como la gestión del reloj o la entrada/salida de datos.
  • Interrupciones de tiempo: Son generadas por un timer interno a la CPU para indicar que ha transcurrido un tiempo específico.

1.5 Llamadas a servicios del sistema

Una llamada al sistema es un método o función que puede invocar un proceso para solicitar un cierto servicio al sistema operativo. Algunos recursos del sistema requieren la ejecución de código en modo privilegiado, el sistema operativo ofrece un conjunto de métodos o funciones que el programa puede emplear para acceder a dichos recursos.

1.6 Modos de direccionamiento

Los modos de direccionamiento son los diferentes métodos que se utilizan para especificar la ubicación de un dato o dirección en la memoria. Existen algunos tipos de direccionamiento:

  • Direccionamiento Inmediato: Aquí el valor que se utiliza como operando esta directamente incluido en la instrucción. Es muy útil cuando se necesita un valor constante para realizar alguna operación.
  • Direccionamiento Absoluto: Este modo utiliza una dirección fija en la memoria para acceder a un dato.
  • Direccionamiento Indirecto: Permite acceder a un dato a través de una dirección que se encuentra en otra ubicación en la memoria.
  • Direccionamiento Relativo: Utiliza una dirección relativa a la posición actual del programa para acceder a un dato en la memoria.
  • Direccionamiento de desplazamiento: Utiliza una dirección base y un desplazamiento o offset para calcular la dirección final de una operación.
  • Direccionamiento por indexación: : Este modo permite acceder a una dirección en la memoria a través de una dirección que se encuentra en un registro específico y un desplazamiento adicional que es especificado por un índice.

1.7 Proceso de ensamblado y ligado

El proceso de ensamblado y ligado consiste en dos etapas en la creación de un programa ejecutable a partir del código fuente escrito en un lenguaje como ensamblador. Existen tres tipos de ensamblador: De bajo nivel, de nivel medio y de alto nivel.

En el ensamblado tenemos un código ASCII que se convierte a código objeto y como es un archivo binario, debemos usar un ligado para hacer nuestro programa ejecutable.

En el ligado, el código objeto se combina con otros archivos objeto y bibliotecas para crear un programa ejecutable completo.

⚠️ **GitHub.com Fallback** ⚠️