BEGREPPET SEGMENTERING
                    ----------------------

Av klart st�rst intresse n�r det g�ller BIU:n �r att i denna del
av processorn finns de viktiga segmentregistren. Det �r med hj�lp
av dessa som man kan klara av att adressera 1 MByte minne.

F�r att hantera en 20-bitars adressbuss utan ett 20-bitars
register har man tillgripit principen med att segmentera minnet.
Detta inneb�r att man delat in minnet i mindre delar som pekas ut
av segmentregistren. Man delar helt enkelt in minnet i delar, d�r
varje del h�gst kan omfatta 64 KByte minne.

Detta inneb�r att stora program skrives n�got annorlunda �n vad
vi kanske varit vana vid, n�r det g�ller assemblerprogrammering
n�mligen s� att vi fr�n b�rjan skiljer p�:

DATAAREA, PROGRAMKODSAREA och STACKAREA.

Det inneb�r att vi efter en speciell syntax talar om mellan vilka
gr�nser sj�lva *programkoden* f�r v�rt program �terfinnes. Vidare
beskriver vi omr�det f�r *dataarean* samt omr�det f�r
*stackarean*. Syntaxen f�r detta skall vi �terkomma till.

Detta med segmentering brukar ofta anv�ndas som argument d� man
s�ger att assemblerprogrammering p� INTEL:s nyare processorer �r
sv�r. Men om man bet�nker att segmentering kan liknas vid vilken
indelning som helst av en st�rre enhet i mindre mera
l�tthanterliga s� blir denna indelningsprincip mindre
sv�rf�rst�elig.

L�t oss se p� indelningen i en telefonkatalog. Som bekant delas
landet in i riktnummeromr�den, som i sin tur delas in i
abonnemang.

Om vi nu antar att abonnemangsnumret 123456 i 035-omr�det innehas
av Andersson och abonnemangsnumret i 123456 i 044-omr�det innehas
av Pettersson s� f�rst�r vi analogin med segmentering.

F�r att n� kontakt med Andersson sl�r vi f�rst riktnumret (035)
och sedan abonnemangsnumret (123456). Det motsvaras i ett
segmenterat minne av att vi f�rst pekar ut segmentet och sedan
adressen inom aktuellt segment. Den sistn�mna adressen kallas f�r
*offset-adressen*.

Riktnumret motsvarar s�ledes inneh�llet i aktuellt
segmentregister, medan abonnemangsnumret motsvarar inneh�llet i
IP-registret = Offset-adressen.


                  HUR ADRESSERINGEN FUNGERAR
                  --------------------------


Man brukar anv�nda nedanst�ende bild f�r att illustrera hur en
minnescell pekas ut av en 80(2)86 pocessor.

Via en intern process bildas s�ledes den fysiska adressen enligt:

FYS. ADRESS = (SEGMENTADRESS) * 10h + (OFFSETADRESS)

(Den fysiska 20-bitars adressen kan beskrivas med ett 5-teckens
hexadecimalt tal XXXXXh)

Normalt anv�nder vi oss inte av den kompletta 5-teckensadressen
utan anger en adress enligt formen:

SSSS:OOOO

Detta �r helt enkelt ett annat skrivs�tt f�r det tidigare n�mnda,
d�r SSSS �r begynnelseadressen i aktuellt segment medan OOOO �r
inneh�llet i IP-registret dvs Offset-adressen.

Om vi nu antar att vi �nskar ange minnescell 8A2Fh i segentet som
t�nkas b�rja i adress 4000h s� skrives denna adress l�mpligen
som:

4000:8A2E   (Fys. adress: 4000 * 10 + 8A2E = 48A2E)

Men rent matematiskt st�r ett otal m�jligheter till buds n�r det
g�ller att ange denna fysiska adress. Nedan visas n�gra exempel:

3B90:EF2E  (Fys. adress: 39B0 * 10 + EF2E = 48A2E)
39F0:EB2E  (Fys. adress: 39F0 * 10 + EB2E = 48A2E)
4100:7A2E  (Fys. adress: 4100 * 10 + 7A2E = 48A2E)


Denna teknik att bilda den kompletta fysiska adressen inneb�r
vidare att ett segment m�ste omfatta minst 10h = 16 bytes
minnesceller.

L�t oss illustrera det hela med ett exempel:

Antag att segment 0 b�rjar i adress 00000 = 0000:0000.
F�rsta adressen i n�sta segment, segment 1, kan d�rvid inte b�rja
innan adress 0001:0000, dvs p� den fysiska adressen 00010.

Man anv�nder termen *paragraf* i betydelsen 10h (16d) bytes.