[Assembly]I Registri di Segmento - Indirizzi Logici e Indirizzi Fisici

Andare in basso

[Assembly]I Registri di Segmento - Indirizzi Logici e Indirizzi Fisici

Messaggio  Admin il Mer Ago 31, 2011 6:20 pm

Scusate per il tempo di distacco di questa guida, ma per capire questo argomento ci ho impiegato un po' di tempo e ci sono riuscito grazie all'aiuto di un utente di un forum.

Questo è un argomento che ci tormenterà in futuro, per questo è importantissimo capirlo, cercherò di essere il più chiaro possibile.

Il processore 8086, prevedeva quattro registri di segmento: CS, DS, SS ed ES tutti a 16 bit ed indivisibili (finché morte non li separi Very Happy).

I registri di segmento, puntano ad un'area di 64K, di 65536 locazioni consecutive, un file *.exe può avere disponibili fino a quattro registri di segmento (cioè quattro aree da 64K).

Riassumendo, i registri segmento servono per individuare le rispettive aree da 64K, nelle quali si svolgono le attività vitali per la "vita" del programma.

Un problema che hanno avuto i progettisti dell'8086 è stato di avere un bus address da 20 bit e i registri da 16, quindi non si riusciva a porre un indirizzo valido sul bus address, e per questo hanno inventato uno: "stratagemma":

  1. Quello di porre un indirizzo valido, usando due registri a 16 bit:
    • Il primo detto registro di segmento (CS, DS, ES ecc.) e il secondo registro di offset (per esempio il registro IP = Index Pointer), esso può assumere una delle 65536 (64K) locazioni di un registro segmento.



Ora c'è un importante argomento: il concetto d'indirizzo logico e fisico:
  1. L'indirizzo logico: è una forma di tipo segmento:offset (esempio CS:IP), moltiplicando il segmento per 16 e aggiungendo il registro di offset, si ottiene l'indirizzo logico
  2. L'indirizzo fisico: è un numero binario da 20 bit posto sul bus address (come si ottiene è scritto sopra).


Ovviamente per scrivere gli indirizzi è consigliato usare il sistema numerico esadecimale, in quanto è più leggibile rispetto il binario:
01010 = 10 ....non è il massimo della leggibilità (sopratutto con grandi numeri).

Ricordo che il registro di offset può assumere ben 65536 valori (i 64K del segmento).

Finisco elencando i registri di segmento, di quelli di offset ne parlerò avanti:
  1. CS, Code Segment: punta l'area di 64k destinata a contenere i bytes del codice eseguibile
  2. SS, Stack Segment: punta ai 64K destinati a contenere i dati per lo stack (di cui parlerò più avanti), per ora dico solo che è l'area dove il processore "annota" gli indirizzi, li richiamerà poi con una funzione call o int.
  3. DS, Data Segment: panta all'area destinata a contenere i dati del programma in esecuzione
  4. ES, Extra segment: punta l'area di 64k destinata a contenere i dati del programma in esecuzione (oltre a quelli puntati da DS)


Con l'arrivo dei processori a 32 bit il problema della segmentazione della memoria, ha perso importanza, in quanto i registri sono diventati più potenti.

I registri segmento possono essere usate in due modalità: real mode o protected mode.

Il primo, mantiene la compatibilità verso il basso, cioè usa il primo mega di memoria, quindi il programma sarà utilizzabile anche in un processore a 16 bit.

A partire dal 80386 sono disponibile due registri segmento in più: GS e FS.

Un saluto!


Ultima modifica di Admin il Lun Set 19, 2011 3:07 pm, modificato 1 volta
avatar
Admin
Admin
Admin

Messaggi : 148
Punti : 14812
Reputazione : 0
Data d'iscrizione : 24.04.11
Età : 38
Località : Emiglia Romagna

Visualizza il profilo dell'utente http://c88software.blogspot.com

Tornare in alto Andare in basso

I Registri di Segmento - Indirizzi Logici e Indirizzi Fisici

Messaggio  giobe2000 il Lun Set 19, 2011 2:52 pm

Guarda il testo originale: Indirizzi Logici e Indirizzi Fisici.

giobe2000

Messaggi : 14
Punti : 12570
Reputazione : 10
Data d'iscrizione : 02.09.11

Visualizza il profilo dell'utente

Tornare in alto Andare in basso

Tornare in alto


 
Permessi di questa sezione del forum:
Non puoi rispondere agli argomenti in questo forum