Linguaggi di alto livello come C non espongono tutte le funzionalità del set di istruzioni della CPU. A volte il compilatore è abbastanza intelligente da usare quelle funzioni senza che gli venga detto, ma a volte sperare che il meglio non sia un'opzione - è necessario scrivere un po 'di assembly.
Ci sono tre modi tipici per farlo:
- Il compilatore potrebbe offrire intrinseche , pseudo-funzioni che il compilatore tradurrà in un'istruzione di assemblaggio. Il codice risultante assomiglia a C, ma è necessaria una certa conoscenza dell'insieme di istruzioni per usarlo correttamente.
- assembly inline
- separa i file di assiemi collegati in seguito
Nella maggior parte dei casi questi snippet di assembly sono motivati dall'avere accesso a istruzioni di assemblaggio speciali (ad esempio syscall
o istruzioni relative agli interrupt). Questo tipo di codice si trova in genere nei kernel o nelle librerie standard. In alcuni casi il codice assembly viene utilizzato per percorsi di codice estremamente sensibili alle prestazioni, in cui non è corretto dipendere dalle ottimizzazioni del compilatore. Per esempio. alcuni runtime linguistici utilizzano snippet di assembly per funzionalità critiche come il metodo di invio. In particolare per il codice crittografico, potrebbe anche essere preferibile impedire eventuali ottimizzazioni del compilatore in quanto potrebbero rendere l'implementazione vulnerabile agli attacchi temporali.