Assembly Language & x86 Low-Level Systems Programming · Lección

Segmentación y la tabla de descriptores globales (GDT)

Aprenda cómo funciona la segmentación de x86 junto con la paginación: selectores de segmento, descriptores, la GDT y cómo los modelos de memoria plana preparan el terreno para el modo protegido.

Lección 4 de 413 pasos

Segmentación y la tabla de descriptores globales (GDT) es una lección gratuita de Assembly Language & x86 Low-Level Systems Programming en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Assembly Language & x86 Low-Level Systems Programming, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Assembly Language & x86 Low-Level Systems Programming incluye 4 lecciones en total.

Partes de esta lección aún no han sido traducidas y se muestran en inglés.

What Is Segmentation?

Segmentation divides memory into variable-sized regions called segments, each with a base address, limit, and access rights. It predates paging and is the first translation step in x86 address generation.

Real Mode Segments

In 16-bit real mode, a physical address is computed as segment * 16 + offset. This gave access to 1 MB using 16-bit registers but offered no protection at all.

Protected Mode Selectors

In protected mode a segment register no longer holds a base directly. It holds a selector — an index into a descriptor table plus a privilege level and table indicator bit.

The Segment Descriptor

Each descriptor is 8 bytes and encodes:

  • Base (32-bit start address)
  • Limit (size of the segment)
  • Type (code, data, system)
  • DPL (descriptor privilege level 0-3)
  • Flags (granularity, default size)

The Global Descriptor Table

The GDT is an array of these descriptors in memory. The CPU finds it through the GDTR register, which holds the table base and limit. Entry 0 is always the null descriptor.

Loading the GDT

You point the CPU at your GDT with the lgdt instruction, which reads a 6-byte pseudo-descriptor (limit + base).

gdt_descriptor:
    dw gdt_end - gdt_start - 1   ; limit
    dd gdt_start                 ; base

lgdt [gdt_descriptor]            ; load GDTR

Defining a Flat Code Segment

Modern OSes use a flat model: base 0 and a 4 GB limit, so segmentation becomes a no-op and paging does the real work. Here is a typical code descriptor.

gdt_code:
    dw 0xFFFF      ; limit low
    dw 0x0000      ; base low
    db 0x00        ; base mid
    db 10011010b   ; present, ring 0, code, readable
    db 11001111b   ; granularity 4K, 32-bit, limit high
    db 0x00        ; base high

Activating Protected Mode

You enter protected mode by setting bit 0 (PE) of control register CR0, then performing a far jump to flush the prefetch queue and load CS with a protected-mode selector.

mov eax, cr0
or eax, 1          ; set PE bit
mov cr0, eax
jmp 0x08:pmode     ; far jump, 0x08 = code selector

Selectors in Practice

A selector like 0x08 breaks down as: index 1 (byte offset 8 / 8), table indicator 0 (GDT), requested privilege level 0. After the jump, data segment registers are loaded with the data selector (often 0x10).

Segmentation vs Paging Today

In long (64-bit) mode segmentation is largely disabled: base and limit are ignored for most segments. Protection and translation are handled by paging. Segmentation survives mainly for FS/GS base pointers used for thread-local storage.

Why It Still Matters

Even though the flat model neutralizes segmentation, every protected-mode and long-mode OS must set up a valid GDT to boot. Understanding selectors and descriptors is essential for kernel bring-up and exception handling.

Quick Check

Test your segmentation knowledge.

Recap

You learned x86 segmentation:

  • A selector indexes a descriptor in the GDT
  • Descriptors hold base, limit, type, and privilege level
  • lgdt loads the table; setting CR0.PE plus a far jump enters protected mode
  • The flat model neutralizes segmentation so paging does the work
Gratis para empezar

Aprende Assembly con un tutor de IA — gratis

Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.

Cursos
12
Lecciones
48

Preguntas frecuentes

¿La lección «Segmentación y la tabla de descriptores globales (GDT)» es gratis?

Sí — el texto completo de «Segmentación y la tabla de descriptores globales (GDT)» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Assembly Language & x86 Low-Level Systems Programming, actualiza a CoddyKit PRO. El curso de Assembly Language & x86 Low-Level Systems Programming incluye 4 lecciones en total.

¿Qué aprenderé en «Segmentación y la tabla de descriptores globales (GDT)»?

Aprenda cómo funciona la segmentación de x86 junto con la paginación: selectores de segmento, descriptores, la GDT y cómo los modelos de memoria plana preparan el terreno para el modo protegido. Practicas Assembly Language & x86 Low-Level Systems Programming con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Assembly Language & x86 Low-Level Systems Programming?

No se requiere experiencia previa. Assembly Language & x86 Low-Level Systems Programming en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.

¿Cuánto tiempo toma la lección «Segmentación y la tabla de descriptores globales (GDT)»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Assembly Language & x86 Low-Level Systems Programming?

Sí. Cada lección de Assembly Language & x86 Low-Level Systems Programming incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Paginación y unidad de gestión de memoria (MMU)
  2. Anillos de protección y privilegios
  3. Fundamentos de hipervisores y virtualización
  4. Segmentación y la tabla de descriptores globales (GDT)
← Volver a Assembly Language & x86 Low-Level Systems Programming