Quali sono i vantaggi e gli svantaggi del set di istruzioni Thumb rispetto alle istruzioni ARM a 32 bit?
Svantaggi:
25% - 35% più piccola dimensione del programma. Oppure, guardandolo dall'altro lato, 33% - 50% di funzioni in più nella stessa quantità di codice. Questo è importante sia per i computer embedded di fascia molto bassa con spazio limitato per i programmi nella ROM sia, forse controintuitivamente, nei server di massa con un numero enorme di core della CPU e cache di dimensioni limitate.
Svantaggi:
1: non un set di istruzioni completo. Non solo mancano cose necessarie ai sistemi operativi, ma anche cose necessarie occasionalmente ai programmi normali, richiedendo così che sia presente anche l'intero set di istruzioni ARM, e un passaggio ad esso e ritorno. Questo non è enormemente lento, ma ha bisogno di diverse istruzioni per farlo. Alcune cose nei programmi Thumb1 possono finire per essere più grandi e più lente che in ARM. Thumb1 è stato progettato tanto per funzionare su un bus di memoria largo 16 bit (senza cache) quanto per programmi più piccoli. Questo si applica raramente oggi.
Thumb2: nessuno svantaggio. È un set di istruzioni completo, e alcune CPU sono fatte solo con Thumb2, senza modalità ARM. Essenzialmente tutte le istruzioni di ARM sono disponibili come istruzioni Thumb2 a 32 bit, e si possono mescolare liberamente con istruzioni a 16 bit. L'unico svantaggio molto lieve è che la codifica binaria è un po' brutta, quindi è praticamente impossibile leggere il codice macchina in hex a "mano". Ma è molto insolito ora non avere un debugger che possa disassemblare il codice per voi. Anche i sistemi embedded di solito possono essere "legati" a un debugger su un "PC" collegato, e tutti possono permettersi un PC (qualsiasi cosa dal Raspberry Pi in su).
Per me la cosa più strana è che ARM Ltd ha dimenticato le lezioni di Thumb2 quando hanno progettato ARM64 (Aarch64) Tutte le istruzioni hanno una dimensione fissa di 32 bit, e non c'è spazio nella codifica per aggiungere convenientemente istruzioni più corte in seguito. Potrebbero duplicare il trucco di Thumb1, ma non c'è grasso nelle istruzioni per fare il trucco di Thumb2 (essenzialmente scambiando i quattro bit usati per l'esecuzione predeterminata).
RISC-V d'altra parte ha fatto questo bene. È progettato come un set di istruzioni a 64 bit (con un sottoinsieme possibile di 32 bit). Tutte le istruzioni standard sono lunghe 32 bit e si può fare un computer usando solo quelle (RV64I{MA}). Ma fin dall'inizio è stato lasciato spazio sia per istruzioni a 16 bit che per istruzioni più lunghe. Come risultato, RISC-V con l'estensione standard C è di gran lunga il set di istruzioni più compatto per un computer a 64 bit (ed essenzialmente eguaglia Thumb2 per il più compatto a 32 bit).
Questo potrebbe finire per danneggiare Aarch64.
Articoli simili
- Perché è stato creato il set di istruzioni ARM Thumb?
- Perché è necessaria una licenza di ARM per progettare una CPU ARM? Come sono protetti i set di istruzioni?
- Qual è la differenza tra un'istruzione LDM e una VLDM nell'architettura del set di istruzioni ARM?
- Perché molti programmi hanno il download di default a 32 bit invece che a 64 bit anche se la maggior parte delle persone usa finestre a 64 bit?