bootloader_x64.asm
section .text
global _start
_start:
; Configuración inicial del procesador
cli ; Desactiva interrupciones
xor rax, rax ; Limpia el registro RAX
mov ds, ax ; Configura el segmento de datos
mov es, ax ; Configura el segmento adicional
mov fs, ax ; Configura el segmento FS
mov gs, ax ; Configura el segmento GS
; Inicialización de la memoria
xor rdi, rdi ; Limpia RDI
mov rdi, 0x7C00 ; Dirección de carga del bootloader
mov rcx, 512 ; Tamaño de un sector estándar
rep stosb ; Rellena con ceros el espacio asignado
; Configuración del puerto serie para comunicación
mov dx, 0x3F8 ; Puerto serie (COM1)
mov al, 0x80 ; Configura divisor de velocidad baud
out dx, al ; Escribe el valor en el puerto
mov dx, 0x3F8 ; Puerto serie
mov al, 'X' ; Mensaje a enviar (carácter ASCII)
out dx, al ; Envía el carácter al puerto
; Cargar etapa 2 del bootloader
mov rsi, 0x7C00 ; Dirección de inicio de la segunda etapa
mov rdi, 0x1000 ; Dirección destino
mov rcx, 256 ; Número de palabras a copiar
rep movsq ; Copia la etapa 2 a la dirección destino
; Salta a la segunda etapa
jmp 0x1000 ; Transferir control a la etapa 2
section .data
mensaje db "Bootloader x64 inicializado.", 0
Makefile
AS = nasm
LD = ld
OBJCOPY = objcopy
OBJ = bootloader_x64.o
all: bootloader_x64.bin
bootloader_x64.bin: $(OBJ)
$(LD) -Ttext 0x7C00 -o bootloader_x64.elf $(OBJ)
$(OBJCOPY) -O binary bootloader_x64.elf $@
%.o: %.asm
$(AS) -f elf64 $< -o $@
clean:
rm -f *.o *.elf *.bin
loadsManager/bootloader_x64$ make
nasm -f elf64 bootloader_x64.asm -o bootloader_x64.o
ld -Ttext 0x7C00 -o bootloader_x64.elf bootloader_x64.o
objcopy -O binary bootloader_x64.elf bootloader_x64.bin
El comando make
ejecutó correctamente las instrucciones del Makefile en el directorio loadsManager/bootloader_x64
. Estas instrucciones compilan, enlazan y generan un archivo binario para el bootloader en la arquitectura x86-64.
Etapas del Proceso
-
Ensamblado con
nasm
:nasm -f elf64 bootloader_x64.asm -o bootloader_x64.o
- Qué hace: Convierte el archivo ensamblador
bootloader_x64.asm
en un archivo objetobootloader_x64.o
. - Formato: Usa
-f elf64
para generar un archivo objeto en formato ELF de 64 bits, compatible con sistemas x86-64.
- Qué hace: Convierte el archivo ensamblador
-
Enlace con
ld
:ld -Ttext 0x7C00 -o bootloader_x64.elf bootloader_x64.o
- Qué hace: Combina el archivo objeto
bootloader_x64.o
en un archivo ejecutable ELF llamadobootloader_x64.elf
. - Dirección de carga: La opción
-Ttext 0x7C00
define que el código debe cargarse en la dirección de memoria0x7C00
, común en bootloaders.
- Qué hace: Combina el archivo objeto
-
Generación del binario con
objcopy
:objcopy -O binary bootloader_x64.elf bootloader_x64.bin
- Qué hace: Convierte el archivo ELF
bootloader_x64.elf
en un archivo binario purobootloader_x64.bin
, listo para cargar directamente en memoria. - Formato: Usa la opción
-O binary
para eliminar metadatos y crear un archivo binario crudo.
- Qué hace: Convierte el archivo ELF
Significado General
Este flujo asegura que el bootloader, escrito en ensamblador para x86-64, sea transformado en un archivo binario que puede utilizarse en un entorno de arranque real.
Resultado final: El archivo bootloader_x64.bin
está listo para probarse en un emulador como qemu-system-x86_64
o cargarse en hardware.
Próximos Pasos
- Usa un emulador o herramientas de depuración para probar el binario.
Tags
Lenguaje ensamblador