trucchi-com

assembler per principianti


Cap. 3 I registri Nella lezione precedente abbiamo visto che in assembler le istruzioni sono del tipo MOV AX,25 ecc. ecc., cosa vuol dire? Semplicemente che questa istruzione andrebbe scritta nel file .EXE .COM con i corrispondenti numeri, ossia B8 C0 19 00, capirete che letti così questi numeri non significano un granché per chi li legge, mentre per il processore è tutto chiaro, lui 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 accontentiamo 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). Tralasciamo per ora i registri SP e BP perché sono usati per speciali funzioni che descriverò in un'altra lezione, dunque, i 6 rimanenti sono registri a 16 bit e possono contenere numeri fino a 65535 ossia FFFFh, ma se io volessi operare su numeri a 8 bit? Si può fare ragazzi. 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 SEGMENTOAbbiamo 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.: