|
 |
Il Processore e il Debugger |
PROCESSORE 80x86 8/14
[19 di 60] |
 |
|
I Registri di
uso Generale |
|
 | Siamo pronti: questa è la prima vera interfaccia con la
programmazione
Assembly. |
 | Descrivere i
Registri di una CPU e discuterne le
istruzioni è un tutt'uno: i primi sono spesso gli
operandi delle seconde... e le
seconde
tendono a specializzare l'uso dei primi. |
 | Come d'accordo per pura opportunità e per precisa scelta
didattica (probabilmente discutibile, ma adottata da tutti i docenti, almeno
all'inizio) prenderemo in considerazione i 14
registri a 16 bit dell'8086; il
passaggio allo studio e all'uso di quelli a 32
bit sarà comunque indolore e immediato. |
 | I primi sottoposti a esame sono i 4
registri di uso
generale (General Purpose Registers); il loro nome è
AX, BX,
CX e DX
ed hanno tutti la caratteristica di poter essere utilizzati
così come sono definiti (cioè
a 16 bit) o in 2 metà
a 8 bit. |
 | Naturalmente il loro impiego nell'una o nell'altra
dimensione dipende dal contesto, cioè
dall'istruzione che li coinvolge; nel secondo
caso i nomi dei registri a 8 bit conservano l'iniziale di quello che li
contiene, seguita dalla lettera L o
H, rispettivamente per la parte bassa (Low) e
alta (High) del registro a 16 bit da cui hanno origine. |
 | Sebbene la cosa sia, al lato pratico,
del tutto irrilevante la loro
lettera iniziale può essere interpretata come
iniziale del compito che al registro riesce
meglio, cioè:
 | AX,
Accumulatore: si tratta del registro
più coinvolto dal set delle istruzioni e
nessuno come AX è altrettanto
efficiente; il suo nome è storicamente associato all'immagine di colui che
prende su di se (accumula) il maggior carico di lavoro; in concreto è
coinvolto per default in alcune
importanti istruzioni:
 | aritmetiche: come MUL , IMUL, DIV, IDIV, nelle quali
rappresenta in ingresso il moltiplicando
e il dividendo e in uscita il
risultato |
 | di spostamento dati dalla e verso la memoria, come LODSB
(equivalente a MOV
AL,DS:[SI] )
e STOSB (equivalente
a MOV
ES:[DI],AL) |
 | di uso particolare (come IN AL,DX o OUT
DX,AL , nelle quali
costituisce rispettivamente il registro destinazione e sorgente dei dati
da scambiare con dispositivi di Input/Output). |
 | Le sue metà a 8 bit
sono AL e
AH; le variazioni di ciascuna di esse influenzano ovviamente
il contenuto di AX. |
|
 | BX,
Base: il suo nome deriva dal fatto che,
unico tra i 4 registri di uso generale, può essere usato
istituzionalmente come
puntatore; le istruzioni che utilizzano questa tecnica sono, per esempio:
 | quelle di puntamento diretto, come MOV
AL,DS:[BX] . |
 | quelle di puntamento appunto con registro base, come MOV
AL,DS:[SI+BX+00] , di
solito con l'aiuto di un registro indice e di uno spiazzamento. |
 | Le sue metà a 8 bit
sono BL e
BH; le variazioni di ciascuna di esse influenzano ovviamente
il contenuto di BX. |
|
 | CX,
Contatore: il suo nome deriva dal fatto
che numerose istruzioni lo utilizzano per default
come contatore di eventi; tra esse:
 | tutte quelle che consentono il prefisso REP
, il compito del quale è proprio di ripetere l'istruzione fino a quando in
registro CX,
decrementato ad ogni giro, raggiunge il valore zero. |
 | l'istruzione LOOP
, e le sue simili, nelle quali fa da contatore dei cicli eseguiti: il ciclo
viene ripetuto fino a quando CX,
decrementato ad ogni giro, raggiunge il valore zero. |
 | Le sue metà a 8 bit
sono CL e
CH; le variazioni di ciascuna di esse influenzano ovviamente
il contenuto di CX. |
|
 | DX,
Data: il suo nome vuole rimarcare la
generica disponibilità ad essere usato per memorizzare dati; in realtà anche
per questo registro esistono istruzioni che gli riservano un uso
di default; tra esse:
 | alcune aritmetiche, come MUL , IMUL, DIV, IDIV, nelle quali,
quando l'operando è una word,
rappresenta la parte alta del risultato. |
 | nelle istruzioni di Input/OutpuT, come IN
AL, DX o OUT
DX,AL , nelle quali
rappresenta l'indirizzo del dispositivo periferico. |
 | Le sue metà a 8 bit
sono DL e
DH; le variazioni di ciascuna di esse influenzano ovviamente
il contenuto di DX.
|
|
|
 | E' bene sottolineare che i 4
registri di uso
generale,
AX, BX,
CX e DX,
possono tranquillamente essere usati nel modo più
diverso e libero; tuttavia se si desidera
ottimizzare il proprio codice è saggio tener conto
delle indicazioni suggerite, riservando a ciascuno di essi
il compito che
meglio lo realizza. |
 | Solo per completezza, a partire
dal 80386 sono disponibili registri a 32
bit; i 4 registri di uso generale sono detti
EAX, EBX,
ECX e EDX,
e quelli descritti in questa pagina sono ancora riconosciuti come
loro parte
bassa. |
©
2001-2010 - Studio Tecnico
ing. Giorgio OBER
Tutti i diritti sono riservati
|