Unidad 1 : Introducción al lenguaje ensamblador - JosueGGC/Lenguajes-de-Interfaz GitHub Wiki
1.1 Importancia de la programación en lenguaje ensamblador.
El lenguaje ensamblador es un tipo de lenguaje de bajo nivel utilizado para escribir programas informáticos, y constituye la representación más directa del código máquina específico para cada arquitectura de microprocesador.
La importancia del lenguaje ensamblador es principalmente que se trabaja directamente con el microprocesador; por lo cual se debe de conocer el funcionamiento interno de este, tiene la ventaja de que en el se puede realizar cualquier tipo de programas que en los lenguajes de alto nivel nolo pueden realizar. Otro punto sería que los programas en ensamblador ocupan menos espacio en memoria.
Algunas de las razones por las que es importante:
- Optimización de rendimiento.
- Sistemas Embebidos.
- Reversión de Ingeniería.
- Entendimiento profundo de Hardware.
1.2 El procesador y sus registros internos.
Componentes Principales de una computadora.
- Unidad Central de Procesamiento (CPU): Es el cerebro de la computadora básicamente realiza todo tipo de procesos.
- Tarjeta Madre: Es donde se conectan todos los componentes de una computadora desde el procesador hasta la memoria ram,etc.
- Memoria RAM(Random Access Memory): Almacena los datos y programas que se están utilizando así como aquí es donde se precarga el sistema operativo.
- Disco Duro: Almacenamiento principal de la computadora, también pueden ser ssd.
- Tarjeta de Video :En los procesadores sin gráficos se encarga de procesar todo lo grafico.
- Fuente de Poder: Es la que proporciona energía a los componentes de la pc.
- Pantalla: Pc manda la señal de video a un dispositivo digital para visualizar lo que hacemos.
- Teclado y Mouse: Dispositivos necesarios de entrada para interactuar con la pc.
Componentes del CPU.
- ALU: Completa las instrucciones aritméticas que llegan al procesador para completar el proceso.
- Unidad de Control: Básicamente coordina todas las instrucciones para completar el procesamiento.
- Registros: Los registros básicamente son pilas que almacenan temporalmente las instrucciones que están siendo procesadas.
- Buses de datos: Son los canales de comunicación que permiten la transferencia de datos entre los componentes de la pc.
Evolución de los transistores.
fue inventado en 1947 y rápidamente se convirtió en un componente clave en la electrónica, se descubrió que también podían ser usados para crear circuitos lógicos básicos. Poco después los ingenieros electrónicos comenzaron a desarrollar compuertas lógicas basadas en transistores. Las compuertas lógicas son elementos básicos que pueden realizar operaciones lógicas. A medida que la tecnología avanzó, los flip-flops y las compuertas lógicas se integraron en chips más grandes y complejos, conocidos como microprocesadores.
Zoom al CPU.
El CPU (Central Processing Unit) es el cerebro de una computadora y se encarga de procesar los datos y ejecutar las instrucciones. Está compuesto por varios componentes, como la arquitectura, las unidades de ejecución, los registros, los buses de datos, la unidad de control y la cache.
- La arquitectura define cómo debe funcionar la CPU.
- Las unidades de ejecución realizan tareas específicas de procesamiento de datos y ejecución de instrucciones.
- Los registros son pequeñas áreas de memoria que se utilizan para almacenar y transferir datos.
- Los buses de datos son canales de comunicación que permiten el intercambio de información entre los componentes de la CPU.
- La unidad de control es la encargada de coordinar el procesamiento de datos y la ejecución de instrucciones.
- La cache es una pequeña área de memoria que se utiliza para almacenar información de programas y instrucciones que se usan con frecuencia para mejorar el rendimiento de la CPU.
Tipos de unidades de ejecución.
- La ALU es una parte de la CPU que se encarga de hacer cálculos matemáticos y lógicos.
- La unidad de control dirige los procesos en la computadora y controla el flujo de información.
- La FPU es una unidad especializada en el cálculo de números con punto flotante para aplicaciones científicas y de ingeniería.
- La SIMD es una unidad que permite realizar la misma operación en varios datos al mismo tiempo para aplicaciones gráficas y de procesamiento de imágenes.
Tipos de registros de una computadora.
En un procesador de computadora hay diferentes registros que almacenan información y se utilizan para realizar cálculos y controlar el flujo de información. Estos incluyen:
- El Registro de Programa: Contador que guarda la dirección de la siguiente instrucción a ejecutar.
- El Registro de Operando: Guarda los datos y operandos utilizados en operaciones matemáticas y lógicas.
- El Registro de Acumulador: Guarda los resultados de operaciones matemáticas.
- El Registro de Instrucción: Guarda la instrucción actualmente en ejecución.
- El Registro de Control: Guarda información sobre el estado de la CPU.
- El Registro de Propósito General: Se utiliza para almacenar valores intermedios.
- El Registro de Estado: Guarda información sobre el estado de la CPU.
- El Registro de Banderas: Es un registro especial que contiene información sobre estados específicos utilizados para controlar el flujo de ejecución.
- Los Registros de Segmento: Se utilizan para dividir la memoria en segmentos y proteger los datos.
- Los Registros de Segmento de Pila: Guardan información sobre la pila.
- El Registro de Interrupción: Guarda la dirección de una rutina de interrupción y se utiliza para manejar eventos específicos como interrupciones.
Tipos de buses de datos.
Existen tres tipos de buses en una computadora: bus de datos, bus de direcciones y bus de control.
- El bus de datos se usa para transferir datos entre la memoria y el procesador.
- El bus de direcciones se usa para decirle al procesador dónde encontrar los datos en la memoria.
- El bus de control se usa para transferir información de control. Además, hay otros dos buses especiales, el PCI y el USB, que se utilizan para conectar dispositivos externos a la computadora.
Microprocesadores.
Un microprocesador es un chip o un circuito donde se almacenan todos los transistores del CPU así como su arquitectura, las unidades de ejecución, los registros y la unidad de control, la alu, etc. La combinación de flip-flops, compuertas lógicas y transistores en un solo chip permitió a los ingenieros crear procesadores más pequeños, más rápidos y más eficientes. Actualmente los procesadores se crean en tamaños de 7nm para abajo.
Arquitecturas.
La arquitectura es la forma en la que un procesador realiza sus ciclos de instrucciones para realizar un proceso. Las Arquitecturas mas conocidas son:
- Arquitectura Von Neumann (1946).
- Arquitectura Harvard (1950).
- Arquitectura CISC (1960s-1970s).
- Arquitectura RISC (1980s).
- Arquitectura VLIW (1980s-1990s).
- Arquitectura EPIC (1990s-2000s).
- Arquitectura x86 (1978-presente).
1.3 Memoria RAM.
La RAM es un tipo de memoria en computadoras que se usa para almacenar datos y programas que se están usando. Es una memoria rápida que permite acceder a los datos de manera aleatoria, pero sus contenidos se borran cuando se apaga la computadora.
Tipos de memoria RAM.
- La SRAM es un tipo de memoria estática que mantiene los datos sin necesidad de actualización constante y puede ser no volátil.
- La DRAM es un tipo de memoria dinámica que requiere actualización constante y es más comúnmente utilizada.
- La SDRAM es una versión más avanzada de la DRAM con un reloj interno que permite la ejecución simultánea de varias órdenes.
- La DDR SDRAM es la versión actual más utilizada y es sincrónica.
Hay varios tipos de memoria RAM que se han desarrollado a lo largo de los años. DDR SDRAM es una de las primeras generaciones, seguida por DDR2 SDRAM, DDR3 SDRAM, DDR4 SDRAM y DDR5 SDRAM. Cada generación ha mejorado la eficiencia energética y la velocidad de transferencia de datos. LPDDR5 es un tipo de memoria RAM más nuevo y más eficiente en términos de energía que se utiliza en dispositivos electrónicos como teléfonos inteligentes. Puede proporcionar más datos a estos dispositivos con un menor consumo de energía. En resumen, las diferentes generaciones de memoria RAM ofrecen mejoras en términos de velocidad y eficiencia energética, lo que les permite ser utilizados en una amplia variedad de dispositivos electrónicos.
1.4 El concepto de interrupciones.
Una interrupción es una instrucción que detiene la ejecución de un programa para darle tiempo de procesador a otro proceso más importante. El utilizar una interrupción en ensamblador permite al procesador llevar a cabo funciones especiales predefinidas por ensamblar llamadas de servicios, las cuales permiten entre otras cosas el desplegar información. Las interrupciones se separan en dos tipos:
- Interrupciones por software: Son aquellas programadas por el usuario, es decir, el usuario decide cuando y donde ejecutarlas, generalmente son usadas para realizar entrada y salida.
- Interrupciones por hardware: Son aquellas que son provocadas por dispositivos externos al procesador su característica principal es que no son programadas, esto es, pueden ocurrir en cualquier momento en el programa.
1.5 Llamadas a servicios del sistema.
Las llamadas a sistemas (system calls) son un mecanismo por el cual un programa solicita servicios al sistema operativo, permitiendo al programa interactuar con los recursos del sistema y el hardware. Estas llamadas se realizan a través de una interrupción especial y son el medio más común para que los programas obtengan acceso a servicios y funciones del sistema operativo.
Algunos ejemplos de llamadas al sistema son:
- open(): para abrir un archivo.
- read(): para leer datos de un archivo.
- write(): para escribir datos en un archivo.
- fork(): para crear un proceso hijo.
- execve(): para ejecutar un programa en el sistema.
Para realizar una llamada a un servicio, el programa invoca una interrupción especial que es manejada por el sistema operativo. Luego, el sistema operativo ejecuta el servicio solicitado y retorna el control al programa que lo invocó.
Las llamadas a servicios del sistema permiten que los programas interactúen con el sistema operativo y utilicen sus servicios sin tener que conocer los detalles internos de su funcionamiento. Esto hace que el desarrollo de software sea más fácil y permite que los programas se ejecuten en diferentes sistemas operativos sin tener que ser reescritos.
1.6 Modos de direccionamiento.
Describe cómo una CPU accede a la memoria. Hay diferentes modos de direccionamiento que se utilizan para lograr objetivos diferentes, tales como eficiencia, seguridad y compatibilidad con otros dispositivos. Algunos de los modos de direccionamiento más comunes incluyen:
- Direccionamiento Absoluto: Direcciona a una dirección de memoria específica, sin tener en cuenta la posición de la CPU en el momento de la dirección.
- Direccionamiento Relativo: Direcciona a una dirección de memoria en relación a la posición actual de la CPU.
- Direccionamiento Indirecto: Direcciona a una dirección de memoria que contiene la dirección real de la memoria a la que se quiere acceder.
- Direccionamiento por indexación: Direcciona a una dirección de memoria a través de un registro específico.
- Direccionamiento Implícito: Direcciona a una dirección de memoria sin especificar explícitamente la dirección en el código de programación.
1.7 Proceso de ensamblado y ligado.
El proceso de ensamblado y ligado aseguran que el código sea eficiente y esté bien estructurado antes de su ejecución.
Ensamblado.
Es el proceso de traducción de código escrito en lenguaje ensamblador a código máquina que puede ser entendido por la CPU. Durante el ensamblado, se asignan direcciones de memoria a los datos y a las instrucciones y se crea un archivo objeto.
- Ensamblador de bajo nivel: Este ensamblador requiere que el programador escriba código en lenguaje ensamblador, que es un lenguaje de bajo nivel y cercano al código binario. Es muy eficiente, pero requiere un conocimiento detallado de la arquitectura del procesador y una gran habilidad para escribir código.
- Ensamblador de nivel medio: Este ensamblador permite a los programadores escribir código en un lenguaje ensamblador más alto y más fácil de entender que el lenguaje de bajo nivel. Además, proporciona más herramientas y abstracciones para facilitar el desarrollo.
- Ensamblador de alto nivel: Este ensamblador permite a los programadores escribir código en un lenguaje de programación de alto nivel como C o Python. El ensamblador de alto nivel traduce el código a lenguaje ensamblador y luego a código binario, permitiendo una programación más rápida y fácil de entender.
Ligado.
Es el proceso de combinación de varios archivos objetos y/o bibliotecas en un archivo ejecutable. En este proceso, se resuelven las referencias cruzadas entre los archivos y se optimiza el código para mejorar el rendimiento.
- Ligador estático: combina archivos objeto y crea un archivo ejecutable independiente que incluye todas las bibliotecas necesarias para su ejecución.
- Ligador dinámico: combina archivos objeto y crea un archivo ejecutable que depende de bibliotecas externas para su ejecución.
- Ligador de tiempo de ejecución: combina archivos objeto y crea un archivo ejecutable que se vincula a las bibliotecas necesarias durante la ejecución del programa.
1.8 Desplegado de mensajes en el monitor.
El despliegue de mensajes en el monitor se realiza a través de la utilización de una serie de instrucciones y subrutinas específicas. Por ejemplo, en NASM (un ensamblador popular para x86), se utilizan las instrucciones de salida de caracteres y de conversión de números a cadenas para mostrar mensajes en la pantalla. Todos los gráficos y el texto que se muestran en el monitor se escriben en la RAM de visualización de video, para después enviarlos al monitor mediante el controlador de video. El controlador de video es en sí un microprocesador de propósito especial, que libera a la CPU principal del trabajo de controlar el hardware de video. Un monitor de pantalla de cristal líquido (LCD) digital directo recibe un flujo de bits digitales directamente desde el controlador de video, y no requiere del barrido de trama.