Qual è la differenza tra scrivere in assembly e convertire il linguaggio di alto livello in assembly usando il compilatore?

2

Quindi ho sentito che nei moderni sistemi operativi e driver di periferica, alcune parti di esse sono ancora scritte in assembly per ottimizzare l'ottimizzazione e la velocità della memoria

ma gli sviluppatori lo scrivono effettivamente in assembly o usano semplicemente uno strumento per convertire il loro codice di alto livello in assembly?

considerando che i compilatori hanno anche una fase di ottimizzazione del codice, non è meglio usare i compilatori? ho bisogno del linguaggio assembly principale per scrivere un buon driver di periferica o sistema operativo?

    
posta John P 14.08.2018 - 14:25
fonte

1 risposta

7

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.

    
risposta data 14.08.2018 - 14:54
fonte

Leggi altre domande sui tag