|
 |
Istruzioni
della Cpu 80x86 |
SCHEDA n° 07 [
15
di 16] |
|
 |
|
Aggiornato
9 aprile 2006 |
 |
|
Legenda degli Esempi in Codice - HELP |
| |
| Nelle schede dedicate alle
singole istruzioni sono spesso presenti Tabelle
che raccolgono alcuni Esempi
d'Applicazione; esse sono il frutto di una compilazione
in ambiente
MASM e di una
successiva (eventuale) analisi in ambiente
Debug. Per ognuna
tabella sono disponibili: |
| |
|
 | Indirizzo corrente:
l'indirizzo (di Offset
nel Segmento di Codice) è fatto partire da 0100H, come
risulta dopo la sua compilazione come se dovesse realizzare un eseguibile di
tipo intrasegmentale, COM; naturalmente scorrendo questo tipo d'informazione
è facile desumere il
numero di bytes necessari per la compilazione di ciascuna
delle istruzioni proposte come esempio:
|
Addr |
|
Codifica
Masm |
|
Sequenza
Bytes |
|
Istruzione |
|
0100
0103
0107 |
|
|
|
|
|
|
|
|
|
 | Codifica in
linguaggio macchina: la sequenza dei
numeri esadecimali di questo campo è esattamente quella
presente nel listato
MASM associato alla sequenza d'istruzioni; si può
sottolineare il modo usato per esprimere indirizzi o dati a più bytes, in
una proposta "umana" dell'informazione binaria:
|
Addr |
|
Codifica
Masm |
|
Sequenza
Bytes |
|
Istruzione |
|
|
|
03
D3
02 0E 0100
03 0E 0101 |
|
|
|
|
|
|
|
 | Sequenza effettiva dei
bytes in memoria: la sequenza effettiva
dei bytes in memoria è, invece, quella che il processore è
chiamato ad interpretare, letta in ambiente debug
, con il comando
D; si possono individuare il byte (o i bytes) del
codice operativo (di solito il primo o i primi, pensati dai creatori del
processore 80x86 per esprimere un modo unico e irripetibile il codice
mnemonico associato all'istruzione) e la (eventuale) sequenza dei bytes di
dato, nella caratteristica sequenza Lo-Hi
(cioè prima la parte bassa e poi quella
più significativa):
|
Addr |
|
Codifica
Masm |
|
Sequenza
Bytes |
|
Istruzione |
|
|
|
|
|
03 D3
02 0E 00 01
03 0E 01 01 |
|
|
|
|
|
 | Codice mnemonico:
l'ultimo campo esprime la classica forma dell'istruzione sotto
test:
|
Addr |
|
Codifica
Masm |
|
Sequenza
Bytes |
|
Istruzione |
|
|
|
|
|
|
|
|
ADD DX,BX
ADD CL,[Depo01]
ADD CX,[Depo02] |
|
|
 | Tutti i 4 campi sono, in realtà,
strettamente legati tra di loro: il loro confronto può aiutare a capire i
meccanismi che hanno consentito di scrivere questo Set d'Istruzioni. |
 | I codici operativi (bytes) sono scritti a
partire da uno schema ben preciso, che
coinvolge che coinvolge diversi campi di bit;
negli esempi proposti in questa pagina possiamo vedere che le 3 istruzioni
hanno 2 codici operativi. |
 | Il primo (02H=00000010b
o 03H=00000011b)
evidenzia:
 | il pacchetto base di 6 bit, 000000,
tipico dello mnemonico ADD |
 | il bit1
(uguale a 1 in tutti i casi) ad indicare un
rapporto tra registro e memoria o tra registro e registro |
 | il bit0,
uguale a 1 (con operandi a
16 o 32 bit,
word o doubleword) o uguale a 0 (con
operando a 8 bit, byte) |
|
 | Il secondo (D3H=11010011b
o 0EH=00001110b)
composto da 3 campi:
 | i primi 2 bit (bit7,bit6)
uguali a 11 (se l'istruzione coinvolge 2
registri) o diversi da
11 (se viene
coinvolto un operando di memoria
o operando immediato,
cioè una costante) |
 | i secondi 3 bit (bit5,bit4,bit3)
indicano il tipo di registro coinvolto; nell'esempio 010
significa DX o DL mentre 001 indica
CX o
CL [ma ovviamente è possibile anche 000
per AX o
AL, 011 per
BX o BL,
100
per SP o
AH, 101 per
BP o CH,
110 per SI o
DH e
111 per
DI o BH] |
 | gli ultimi 3 bit (bit2,bit1,bit0)
forniscono informazioni sul secondo operando:
 | nel caso si tratti di un
registro (bit7,bit6=11)
la terna bit2,bit1,bit0
utilizza gli stessi valori affidati ai bit5,bit4,bit3
(nel nostro esempio si ha 011 per
BX o
BL) |
 | nel caso si tratti di una
locazione di memoria la
terna bit2,bit1,bit0 viene
utilizzata insieme alla coppia bit7,bit6
per creare un codice a 5 bit (bit7,bit6,bit2,bit1,bit0)
in grado di individuare una delle 24 possibili
modalità di indirizzamento; da
notare che con 5 bit sono possibili
32 (=25)
combinazioni, ma
solo 24 sono in questo caso
significative, dovendo escludere quelle con
bit7,bit6=11,
ovviamente affidate alle 8 rimanenti modalità tra registri |
|
|
 | Naturalmente la logica usata per costruire un codice
operativo è decisamente impegnativa e caratterizzata da
numerose varianti, tutte per altro logicamente inquadrate; pur stimolante
l'argomento tende ad essere puramente accademico, nè, di solito, il programmatore si cura
di conoscere il valore binario dei bytes che corrispondono allo mnemonico di
un'istruzione: è una pura curiosità... |
 | Per questo si evita di spingere più a fondo
l'indagine su questo argomento, almeno per ora. |
©
2001-2010 - Studio Tecnico
ing. Giorgio OBER
Tutti i diritti sono riservati
|