Spazio di indirizzamento di un sistema a 16 bit: 64 KiB spiegato
Un sistema con **indirizzi a 16 bit** può generare 216 indirizzi univoci = **65.536 (64 KiB)**. Ogni indirizzo tipicamente riferisce **un byte** (8 bit), quindi lo spazio di memoria direttamente indirizzabile totale è **64 KB**.
Scomposizione spazio di indirizzamento
| Range (Esadecimale) | Range (Decimale) | Dimensione | Uso tipico (Modalità reale classica 8086/8088) |
|---|---|---|---|
| 00000–0FFFF | 0–65.535 | 64 KiB | Intero spazio di indirizzamento |
| 00000–003FF | 0–1.023 | 1 KiB | Tabella vettori interrupt (IVT) — 256 vettori × 4 byte |
| 00400–004FF | 1.024–1.279 | 256 B | Area dati BIOS (BDA) |
| 00500–7FFFF | 1.280–524.287 | ~512 KiB* | **Memoria convenzionale** (app DOS, TSR, driver) — *effettivamente limite 640 KiB |
| 80000–9FFFF | 524.288–655.359 | 128 KiB | Video RAM (VGA: A0000–BFFFF), Option ROMs (C0000–DFFFF), Estensione BIOS |
| A0000–FFFFF | 655.360–1.048.575 | 384 KiB | Area memoria superiore (UMA) — BIOS di sistema (F0000–FFFFF), Adattatori |
*Nota: l'indirizzamento segmentato a 16 bit (segmento:offset) consente indirizzi fisici a 20 bit (1 MiB) su 8086/8088. Indirizzamento flat puro a 16 bit = 64 KiB.
Segmentazione: Rompere la barriera dei 64 KiB
L'8086 usa **Segmento:Offset** (16 bit ciascuno) → Indirizzo fisico = (Segmento × 16) + Offset. Ciò produce **indirizzamento a 20 bit (1 MiB)**.
- Code Segment (CS):IP → Recupero istruzione.
- Data Segment (DS):SI/DI → Accesso dati.
- Stack Segment (SS):SP → Operazioni stack.
- Extra Segment (ES):DI -> Operazioni stringa, puntatori far.
Segmenti sovrapposti consentono multiple finestre da 64 KiB nello spazio da 1 MiB.
Tecniche di gestione memoria (oltre 1 MiB)
- EMS (Expanded Memory Spec / LIM 4.0): Pagine da 16 KiB con bank-switching in finestra UMA (page frame). Fino a 32 MiB (80386+).
- XMS (Extended Memory Spec): HIMEM.SYS gestisce >1 MiB su 286+ (modalità protetta). VCPI/DPMI per DOS extenders.
- Paging (386+): Pagine da 4 KiB, tabelle delle pagine, registro CR3 → 4 GiB virtuale (32-bit).
- Segmentazione (Modalità Protetta): Tabelle descrittori (GDT/LDT), selettori, anelli di privilegio (0–3).
Contesto moderno
- MCU a 16 bit (MSP430, AVR, PIC24, STM32F0): Spazio flat da 64 KiB o banked (MSP430X = 20-bit, 1 MiB).
- Bootloader / Firmware: Spesso eseguiti inizialmente in modalità reale a 16 bit (BIOS x86, UEFI CSM).
- DOS / Retrocomputing: Ancora rilevante per embedded legacy, emulatori, educazione.
In sintesi: Bus di indirizzo a 16 bit = spazio byte-indirizzabile da 64 KiB. Segmentazione, banking e paging sono gli hack storici per superarlo. Moderno a 64 bit = 264 byte (16 EiB) — effettivamente infinito per ora.