QUESTO E' IL MIO TUTORIAL di + nin sò!!!!!!!!!!!
Studialo e cerca di capire da solo, è il mio consiglio migliore come abbiamo fatto tutti.
Per capire devi far lavorare le tue meningi e applicarti da solo(comunque un giorno), quando qualcuno ti chiederà come il tutto funziona, tu nella tua testa lo sai............., ma lui non capirà se non si applica da solo!!!!!!!!!
Questa è la programmzione (pensa che ho un amico che dopo 10 anni mi chiede ancora la differenza tra una variabile e una costante ): ):
TUTORIAL
MEMORIA RAM
il programmatore, vede la RAM non come una matrice, ma come un vettore i cui elementi sono le celle
numerate 0, 1, 2, 3, ...; ad esempio, in un PC dotato di 128 Mb di RAM, la memoria viene vista dai
programmi come un vettore di 134217728 byte i cui indici sono 0, 1, 2, 3, ..., 134217727
(ricordiamoci che gli indici partono da 0, per cui l'indice dell'ultimo elemento si ottiene
sottraendo uno al numero totale di elementi).
Le celle contengono 8 elementi elettronici, 8 bit
Cella o indirizzo della ram = 1111 1111 8 bit
REGISTRI
1111 1111 1111 1111
F F F F
15 15 15 15
AH AL
AX
BUS INDIRIZZI a 20 linee
AF AE AD AC AB AA A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 A16 A17 A18 A19 A20
----------AH---------- | ---------AL----------|
----------------------AX ---------------------|
AL byte meno significativo
AH byte pi— significativo
PARAGRAFO = 16 byte
1 byte = 8 bit rappresento fino al numero 255
16 byte = 128 bit rappresento fino a: 16 bit = 65536 + 16 = 1048576 1Mb
BUS a 20 linee 1111 1111 1111 1111 1111 = FFFFF
FFFFH:000FH corrisponde all'indirizzo lineare a 20 bit FFFFFH
BLOCCHI o SEGMENTI
SEG0 0 a 65535 = 1111 1111 1111 1111
SEG1 16 a 65551 = 1111 1111 1111 1111
SEG2 32 a 65567 = 1111 1111 1111 1111
SEG3 48 a 65583 = 1111 1111 1111 1111
SEG4 64 a 65599 = 1111 1111 1111 1111
SEG5 80 a 65615 = 1111 1111 1111 1111
SEG6 96 a 65631 = 1111 1111 1111 1111
SEG7 112 a 65647 = 1111 1111 1111 1111
SEG8 128 a 65663 = 1111 1111 1111 1111
SEG9 144 a 65663 = 1111 1111 1111 1111
SEG10 160 a 65679 = 1111 1111 1111 1111
SEG11 176 a 65695 = 1111 1111 1111 1111
SEG12 192 a 65711 = 1111 1111 1111 1111
SEG13 208 a 65727 = 1111 1111 1111 1111
SEG14 224 a 65743 = 1111 1111 1111 1111
SEG15 240 a 65759 = 1111 1111 1111 1111
Bene, questi blocchi, che d'ora in poi chiameremo col loro nome, ossia SEGMENTI, nel
modello base sono sedici, numerati da 0 a 15, alcuni di questi blocchi non sono disponibili
ai programmi perch‚ vengono monopolizzati da altre parti del computer o dal sistema operativo, per
esempio il blocco 0 Š usato dal BIOS e dal DOS per i loro affari, mentre i blocchi 10 e 11 sono di
propriet… della scheda video che li usa per mostrare sullo schermo tutto quello che i programmi
memorizzano in queste locazioni di memoria, inoltre il blocco 15 Š di propriet… del BIOS e non potete
neanche scriverci perch‚ Š un blocco di sola lettura. In pratica i blocchi disponibili ai programmi
sono solo quelli che vanno dal n.1 al n. 9 e neanche completamente
segffset
21F2:C01E indirizzo logico
calcolo per indirazzemto fisico
21F2 * 10 = 21F20 +
C0E1 =
-------
2E001
Otteniamo cos un indirizzo a 20 bit 1111 1111 1111 1111 1111 ora posso indirizzare 1 Mb
2^20 = 1048576
Come abbiamo visto prima i registri dedicati a contenere il valore del segmento sono CS,DS,ES e SS
(sono registri a 16 bit).
Un segmento Š lungo 64Kb, perchŠ l'offset (ad es. specificato in BX) Š lungo 16 bit; ogni valore
di CS,DS,ES,SS individua un segmento; dentro ogni segmento posso indirizzare quindi 2^16 byte=64 Kb
di memoria. Noto ancora che i segmenti sono sovrapposti, con un nuovo segmento che inizia ogni 16 byte
di memoria che corrisponde ad un paragrafo, ad Š appunto per questo che pur usando indirizzi a 32bit si
pu• indirizzare solo 1 MB
INFATTI
--------------------------------------------------
0 cella di memoria = 1111 1111 = 255 AH \
= AX 65535 \
1 cella di memoria = 1111 1111 = 255 AL / \
= EAX = 4 Gb = 4294836225
2 cella di memoria = 1111 1111 = 255 AH \ /
= AX 65535 /
3 cella di memoria = 1111 1111 = 255 AL /
ciao