Una istruzione consiste in :
- OPCODE - codice operativo : specifica il comportamento
- indirizzi degli operandi ( opzionale )

Alcune macchine hanno istruzioni della stessa lunghezza e altre invece di lunghezza diversa. Avere della stessa lunghezza semplifica la loro decodifica ma implica uno spreco di spazio. La seguente figura mostra infatti alcune relazioni che possono esserci tra la lunghezza delle istruzioni e la dimensione della word :

Criteri progettuali per i formati d’istruzioni
Le scelta del formato delle istruzioni, che si fa quando si progetta un ISA, è una decisione critica, siccome deve essere presa dall’inizio della progettazione e può durare più di 40 anni. I criteri di progettazione sono :
- istruzioni corte , siccome sono preferibili a quelle lunghe per le seguenti ragioni :
- meno memoria occupata : permette di avere programmi più piccoli
- permette di memorizzare più istruzioni nella cache dei processori e quindi sfruttare la bandwidth limitata ( passano più istruzioni al processore )
Se minimizziamo troppo la dimensione delle istruzioni , abbiamo difficoltà poi a decodificarle.
- prevedere spazio sufficiente nel formato delle istruzioni , per esprimere le istruzioni volute
- numero di bit da utilizzare nell’indirizzamento della memoria (per prelevare operandi), infatti dobbiamo considerare che :
- se indirizziamo a byte ( 8 bit ) : abbiamo una precisione massima , ma indirizzi lunghi che portano a istruzioni più lunghe
- se indirizziamo a word da 32 bit ( 4 byte ) : abbiamo una precisione minore , ma indirizzi corti che portano a istruzioni corte
Codice operativo espandibile
Si possono costruire compromessi tra la lunghezza degli opcode e lunghezza degli indirizzi , per esempio consideriamo una istruzione lunga bit , allora si può scegliere :
- per opcode e bit per indirizzo : avremo operazioni disponibili e celle di memoria indirizzabili
- per opcode e bit per indirizzo : avremo il contrario , quindi più operazioni disponibili e meno celle di memoria indirizzabili
Introduciamo quindi il concetto di codice operativo espandibile ( descriviamo con esempio ) per costruire compromessi più sofisticati. Consideriamo una macchina con istruzioni lunghe 16 bit e con 3 indirizzi da 4-bit l’uno. Quindi avremo un opcode da 4-bit :

Tuttavia , se i progettisti avrebbero bisogno di :
- 15 istruzioni con 3 indirizzi ( tipo
ADD R1,R2,R3) - 14 istruzioni con 2 indirizzi ( tipo
MUL R1,R2) - 31 istruzioni con 1 indirizzo
- 16 istruzioni con 0 indirizzi
Per soddisfare questi bisogni , viene usato un sistema o “trucco” che funziona nel seguente modo :


dove si utilizzano le varie soluzioni :
- utilizzo i primi 4 bit per l’opcode ( in modo da avere 15 istruzioni , 0000-1110 ovvero da 0 a 14 ) e il resto di 12 bit li spezzo in 3 da 4 bit per gli indirizzi
- siccome devo dire in qualche modo alla macchina che voglio avere 14 istruzioni con 2 indirizzi , allora devo impostare i primi 4 bit dell’opcode a 1111 solo per diversificarlo dal precedente ( 1. ). Quindi utilizzo 4+4 = 14 bit per l’opcode , dove 4 bit aggiuntivi servono per avere 14 istruzioni ( 11110000-11111101 ovvero da 240 a 253 )
- utilizzo 7+5 = 12 bit , siccome 7 mi servono per diversificarlo dal precedente e 5 per avere 31 istruzioni da 1 indirizzo
- utilizzo 12+4 = 16 bit per avere 16 istruzioni con 0 indirizzi
Formati delle istruzioni del Core i7
I formati delle istruzioni del Core i7 hanno le 2 caratteristiche principali :
- 6 campi ( 5 opzionali ) di lunghezza variabile
- l’operazione di somma avviene solo tra registro-registro o registro-memoria ( non memoria-memoria )

Dove :
- PREFIX - Prefisso : byte extra per modificare l’istruzione
- OPCODE : che specifica con
- 6 bit l’istruzione
- 1 bit per specificare quale operando è sorgente
- 1 bit per specificare se lavorare con byte o word
- MODE : contiene informazioni relative all’operando
MOD: 2 bit e consente di specificare la modalità di indirizzamento degli operandiREG\R/M: 3 bit l’uno
- SIB ( Scala , Index e Base ) : byte supplementare
- DISPLACEMENT - Spaziamento : byte aggiuntivi che specificano l’indirizzo di memoria
- IMMEDIATE - Operando immediato : contiene una costante
