Sistemi E Reti

I Segmenti Di Memoria

I segmenti di memoria nei programmi Assembly in formato .COM, con analisi del modello di memoria, inizio e fine del segmento e sperimentazione pratica tramite emulatore.

Durata

50 minuti

Software

EMU8086

Assembly X86 | I Segmenti Di Memoria

L’architettura 8086 utilizza un modello di memoria segmentata. La memoria non viene vista come un unico spazio continuo, ma come più aree logiche chiamate segmenti. Ogni segmento rappresenta un punto di inizio da cui la CPU calcola gli indirizzi interni tramite un offset.


I segmenti principali

Nel processore 8086 i segmenti principali sono:

SegmentoRegistroFunzione
CodiceCSContiene le istruzioni del programma
DatiDSContiene variabili e dati
StackSSGestisce chiamate e ritorni
ExtraESUsato per operazioni particolari

Inizio e fine di un segmento

Il valore contenuto in un registro di segmento (ad esempio CS) indica solo l’inizio del segmento, non la sua dimensione.

  • Dimensione del segmento: Ogni segmento ha una dimensione massima di 64 KB (65536 byte).
  • Indirizzo di inizio del segmento: Il registro del segmento (CS, DS, SS, ES) contiene l’indirizzo iniziale del segmento.
    Esempio: se CS = 0800h, l’indirizzo fisico dell’inizio del segmento di codice è 0800h:0000.
  • Offset interno: L’offset indica quanti byte ci si sposta dall’inizio del segmento. Può variare da 0000h a FFFFh (cioè 0 a 65535 in decimale).
  • Indirizzo di fine segmento: Sommando l’inizio del segmento e l’offset massimo si ottiene l’indirizzo di fine.
    Esempio: 0800h:FFFFh è l’ultimo byte del segmento.
Registro di segmentoInizio segmentoFine segmentoDimensione
CS = 0700h0700:00000700:FFFF64 KB
CS = 0800h0800:00000800:FFFF64 KB

Questo significa che il segmento copre sempre tutti gli offset da 0000h a FFFFh. Il registro di segmento stabilisce dove inizia questo intervallo in memoria fisica.


Modello di memoria nei file .COM

I file .COM utilizzano un modello di memoria molto semplice:

  • un solo segmento di memoria
  • CS, DS, SS ed ES hanno lo stesso valore
  • l’esecuzione del programma inizia sempre all’offset 0100h

In questo modo il programmatore lavora sempre all’interno dello stesso segmento e varia solo l’offset.

LABORATORIO

Inizio e fine del segmento in un file .COM

Osservare in EMU8086 dove inizia e dove termina un segmento di memoria


1 Creazione del programma

Avviare EMU8086 e creare un nuovo programma Assembly in formato .COM. Inserire la direttiva org 100h, necessaria perché l’esecuzione nei file .COM parte sempre dall’offset 0100h.


org 100h

mov ax, 1234h
mov bx, ax

ret

2 Osservazione del segmento

Avviare il programma in modalità Single Step. Annotare il valore del registro CS.

  • L’inizio del segmento è CS:0000
  • La fine del segmento è CS:FFFF

3 Verifica pratica

Aprire la finestra di memoria dell’emulatore:

  • posizionarsi all’indirizzo CS:0000 e osservare l’inizio del segmento
  • posizionarsi all’indirizzo CS:0100 e individuare il codice del programma
  • posizionarsi all’indirizzo CS:FFFF per identificare la fine del segmento

4 Rispondi alle domande

  • Perchè i registri CS, DS, SS, ES hanno tutti lo stesso valore?
  • I registri dei segmenti cambiano valore durante l'esecuzione del programma?
  • Che dimensione ha un segmento? Dove inizia e dove finisce?





Assembly, 8086, segmenti di memoria, file .COM, CS, DS, SS, Informatica,