www.spartan.3000.it  ASSEMBLER HOME PAGE ASSEMBLER  www.spartan.da.ru 

 ASSEMBLER  Lezione 1 Lezione 2 Lezione 4 Lezione 5 Lezione 6 Lezione 7 Lezione 8  ASSEMBLER 

LEZIONE 3




  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.



 
 




@2ooo-2oo1 SPARTAN