|
Nei capitoli precedenti si è visto che in assembler le istruzioni
sono del tipo MOV AX,25 ecc.
cioè che questa istruzione andrebbe scritta
nel file .EXE .COM con i corrispondenti numeri, ossia B8 C0 19 00;
il processore li interpreta
in questo modo: Vogliono che prenda il valore 0019h (25 in decimale) e lo
metta nel registro AX .Nota bene: in memoria viene messo prima il valore
basso (19h) e poi il valore alto 00,Questa è una convenzione legata al
progetto originale dei primi processori, i processori della Motorola, invece,
usano il contrario, ma non preoccupatevi di queste sottigliezze, poiché voi
scrivete il numero come lo scrivereste su un foglio e penserà il compilatore
a metterli nel giusto ordine.
Ora c'è un particolare che avrete notato benissimo, il registro AX è a 16 bit
e quindi si aspetta un valore a 16 bit, ma 25 entra benissimo in 8 bit, ma lui è
testardo vuole 16 bit e noi lo accontendiamo portando il valore a 16 bit con
l'aggiunta di uno zero, 0019h, in alternativa avremmo potuto caricare 25 in AL
e lui non avrebbe protestato, ma AH sarebbe rimasto al suo valore originale, e
questo se non ci creava problemi era la cosa più logica, ma se volevo 25 in tutto
AX la soluzione è quella usata nell'esempio.
D'ora in poi, per comodità, per indicare i numeri aggiungerò una 'h' finale se il
numero è decimale, una 'b' finale se il numero è binario e niente se il numero è decimale.
Visto che abbiamo conosciuto i registri approfondiamo questo importante argomento;
Abbiamo visto che esistono 8 registri (AX,BX,CX,DX,DI,SI,SP,BP).
I progettisti della INTEL hanno pensato bene di dividere i registri in 2 sottoregistri
da 8 bit l'uno, quindi il registro AX è formato dai due sottoregistri AH e AL,
ovviamente AL (L sta per low basso) sono i primi 8 bit di AX a partire da destra, ,
mentre AH sono gli altri 8 (H sta per high alto), e questo vale per tutti i quattro
registri base (AX,BX,CX,DX), non esistono per SI e DI, ma tanto non servirebbero, visto
l'uso cui sono destinati questi ultimi due.
Quindi l'istruzione vista prima MOV AX,25 caricherebbe il valore 25 nel registro
AL ed il valore 0 nel registro AH e l'aspetto complessivo di AX sarebbe 0019h, ora
è anche chiaro che scrivendo i numeri nel formato esadecimale si riesce chiaramente
a vedere i valori presenti nei singoli sottoregistri.
Chiaramente queste istruzioni scritte nella forma MOV XX,YY vanno poi passate ad un
compilatore, ossia un programma che legge ciò che voi avete scritto e lo trasforma
nella giusta sequenza di numeri leggibili dalla CPU.
I REGISTRI DI SEGMENTO:
Abbiamo visto nella lezione precedente che la memoria è divisa in blocchi da 64Kbyte
ciascuno e che i registri di segmento selezionavano il blocco desiderato, ma perché
esistono 6 registri?. E qui ti volevo, dunque per capire il perché bisogna capire
come è strutturato un programma quando viene caricato in memoria.
STRUTTURA DI UN PROGRAMMA IN MEMORIA:
Qualsiasi programma generalmente è formato dal codice, cioè le istruzioni che voi
avete inserito, più i dati necessari, per esempio la stringa 'Hello world'
che nella prima lezione abbiamo stampato sullo schermo, bene, il codice ed i dati
dei file EXE vengono caricati in memoria in due blocchi separati, inoltre il DOS o
Windows che si occupano di caricare in memoria questi programmi inseriscono nel
registro CS il blocco che contiene le istruzioni.
|