NASM: Compilador y Lenguaje
Introducción
NASM (Netwide Assembler) es un ensamblador ampliamente utilizado para traducir código escrito en lenguaje ensamblador a código máquina ejecutable. En este proyecto, NASM se ha empleado en dos contextos fundamentales:
- Como herramienta de compilación: Para convertir los archivos
.asm
en archivos binarios planos.bin
que la CPU puede ejecutar directamente. - Como lenguaje de programación: Se ha escrito código en lenguaje ensamblador para arquitecturas de 16 bits, controlando el hardware de manera precisa y eficiente.
NASM como herramienta de compilación
NASM es un programa que toma como entrada código fuente en lenguaje ensamblador y lo ensambla en código máquina. Este proceso es esencial porque el procesador no entiende las instrucciones en texto simbólico; necesita el código binario que representa dichas instrucciones.
Gracias a NASM, podemos generar archivos binarios que serán cargados y ejecutados directamente por el procesador, como el bootloader o el kernel del sistema operativo.
El lenguaje ensamblador y el concepto de 16 bits
El lenguaje ensamblador es un lenguaje de bajo nivel que permite al programador interactuar directamente con el hardware. A diferencia de los lenguajes de alto nivel, el ensamblador se escribe con instrucciones que se corresponden casi uno a uno con las instrucciones máquina.
¿Qué significa trabajar en 16 bits?
- Arquitectura de 16 bits: Significa que el procesador maneja datos, registros y direcciones de memoria que ocupan 16 bits (2 bytes).
- Ventajas y limitaciones:
- Permite direccionar hasta 64 KB de memoria por segmento (en modo real del procesador x86).
- Es más eficiente y rápido para ciertas tareas de bajo nivel.
- Tiene limitaciones en cuanto a la cantidad máxima de memoria y la complejidad de operaciones en comparación con arquitecturas de 32 o 64 bits.
Características del lenguaje de bajo nivel
- Control directo sobre registros, memoria y periféricos.
- Ausencia de abstracciones propias de lenguajes de alto nivel (no hay gestión automática de memoria, estructuras de datos complejas, etc.).
- Uso frecuente en programación de sistemas operativos, controladores de hardware, bootloaders y otros componentes cercanos al hardware.
Archivos ASM
El sistema operativo consta de dos archivos principales en formato ASM:
kernel.asm
Este archivo contiene el núcleo (kernel) del sistema operativo. El kernel es responsable de la gestión de recursos, la comunicación con el hardware, la administración de memoria y la ejecución de tareas. En este archivo, se implementa la lógica principal que controla el flujo de operaciones del sistema operativo.
bootloader.asm
Este archivo contiene el cargador de arranque (bootloader). El bootloader es el primer programa que se ejecuta cuando se inicia la computadora. Su tarea principal es cargar el núcleo del sistema operativo en la memoria y pasar el control al mismo. En este archivo, también se manejan las primeras interacciones con el hardware para preparar el sistema operativo para su ejecución.
Resumen
En este proyecto, NASM ha sido fundamental tanto como herramienta para ensamblar código en lenguaje ensamblador como para escribir código eficiente y de bajo nivel en arquitectura de 16 bits. Esto nos permite controlar el hardware con precisión y construir desde cero componentes básicos como el bootloader y el kernel.
Yo he elegido 16 bits ya que he preferido empezar desde lo mas bajo antes que complicarme mas con otras arquitecturas.