Calcolatori elettronici/Formato delle istruzioni macchina, tempi di esecuzione
Formato delle istruzioni macchina
[modifica | modifica sorgente]In ambiente 8086 il formato delle istruzioni macchina è variabile, cioè le istruzioni hanno codici macchina di lunghezze diverse: al codice operativo sono riservati 1 o 2 byte, agli operandi fino a 4 byte. L'unità di controllo, dopo aver letto il primo byte dell'istruzione, deve capire la lunghezza dell'istruzione.
Primo byte
[modifica | modifica sorgente]Oltre ad accogliere una parte del codice operativo, il primo byte può contenere a seconda dell'istruzione alcuni bit particolari:
- W: specifica se l'istruzione opera su byte (W = 0) o su word (W = 1);
- D: specifica l'ordine degli operandi (ad. es vale 0 se il registro è l'operando sorgente o 1 se è l'operando destinazione);
- S: specifica se l'operando immediato è rappresentato su 1 o 2 byte.
Secondo byte
[modifica | modifica sorgente]Nelle istruzioni con due operandi, il secondo byte contiene i campi MOD, REG e R/M:
- il campo REG specifica un registro su 3 byte;
- il campo MOD specifica il significato dell'operando R/M (ad es. se MOD vale 11, anche il secondo operando è un registro che è specificato in R/M).
Esempi di istruzioni in base alla lunghezza
[modifica | modifica sorgente]- 1 byte:
NOP
,PUSH
,POP
- 2 byte:
MOV AX
,BX
,MOV AX
,[BX]
- 3 byte:
MOV AX
,imm
- 4 byte:
MOV AX
,var
,MOV [BX]
,imm
- 6 byte:
MOV var
,imm
Tempi di esecuzione
[modifica | modifica sorgente]Il linguaggio assembler viene usato quando è richiesto un tempo di esecuzione minimo in termini di colpi di clock e non è disponibile un compilatore sufficientemente efficiente in termini di ottimizzazione del tempo di esecuzione. I tempi di esecuzione delle istruzioni sono specificati nel manuale in base a:
- tipo di istruzione;
- posizione degli operandi: gli operandi in memoria richiedono un tempo di accesso maggiore di quello richiesto dagli operandi immediati, e oltretutto l'indirizzo potrebbe dover essere calcolato (es.
[BX]var
) o un'istruzione potrebbe richiedere un accesso sia in lettura sia in scrittura (es.ADD var
,AX
); - allineamento degli operandi in memoria: BHE
Le istruzioni lunghe occupano il processore per tutto il tempo di esecuzione, durante il quale le richieste di interrupt non vengono ascoltate.