2012-07-04 15 views
5

All'università ho frequentato il corso obbligatorio in Computer Architecture e Assembly Language Programming. Ho trovato il linguaggio assembly abbastanza lungo e difficile da capire. Non riesco ancora a capire il motivo per cui viene insegnato il linguaggio di assemblaggio. Ho fatto la stessa domanda dal mio istruttore e lui ha sorriso e ha detto che lo saprai in futuro. Ma ho una natura che non posso aspettare tanto a lungo per la risposta una volta che una domanda stuzzica la mia mente. Quindi voglio chiedere perché abbiamo ancora bisogno del linguaggio assembly se ci sono linguaggi di programmazione molto potenti, veloci ed efficienti e in più che tali linguaggi offrono un'ampia varietà di strumenti che rendono facile la programmazione. Allora perché?Perché il linguaggio assembly è ancora necessario se disponiamo di linguaggi di alto livello che offrono strumenti sofisticati?

+4

linguaggi di alto livello sapere quasi nulla circa l'hardware e spesso non hanno modo di accedervi. Ecco dove arriva l'assemblea per il salvataggio. L'altro uso è l'ottimizzazione della dimensione/velocità del codice. –

+6

Questa domanda sembra adattarsi meglio a http://programmers.stackexchange.com. In breve però: perché tutti i linguaggi di alto livello vengono compilati automaticamente in ASM. Questo non ti dà alcun controllo sul risultato finale, su ciò che il computer effettivamente fa. E mentre i compilatori sono bravi, non possono conoscere tutti i trucchi e ottimizzare il codice alla perfezione.Se vuoi le massime prestazioni, devi avere il pieno controllo su ciò che il computer fa in ogni piccolo dettaglio, che un linguaggio di alto livello non ti dà. – deceze

+0

Grazie Alex e inganni –

risposta

5

Il codice macchina è ancora necessario per le attività chiave, ad es. codice specifico

  • hardware, come ad esempio i driver di periferica
  • dispositivi embedded, in cui la dimensione del codice è importante
  • codice a basso livello in cui le prestazioni sono critiche ecc

Spesso, linguaggio assembly può essere mescolato in linguaggi di livello superiore, come C, dove l'assembly può essere aggiunto in linea al codice C.

Detto questo, è comunque una buona idea acquisire una conoscenza dell'architettura hardware sottostante anche se si programmerà in un linguaggio di alto livello, in quanto fornisce informazioni su come funzionano stack, heap, puntatori, ecc.

11

Una ragione abbastanza buona è che tutti i linguaggi di programmazione sono un'astrazione di come funziona un computer. In teoria, per i linguaggi di alto livello, l'astrazione significa che il programmatore non deve mai preoccuparsi dei dettagli del computer.

Ma il abstraction is always leaky, ad es. la maggior parte (se non tutti) i linguaggi di alto livello non si ottimizzano automaticamente molto bene per le cache della CPU (ad esempio coerenza della cache e condivisione falsa) e il multithreading efficiente è sempre complesso. Ciò significa che se le prestazioni sono critiche, il programmatore potrebbe dover scrivere il proprio codice in modo diverso.

Il modo migliore per ottenere le prestazioni è capire come funziona la macchina in modo che il programmatore possa eseguire grandi trasformazioni architettoniche che un compilatore non può facilmente. Ad esempio, assicurandosi che i thread elaborino i dati in multipli di 64 byte (per ridurre la condivisione errata sulle linee della cache) o eseguendo una trasformazione di array di strutture ⇔ struct-of-array.


Assembly (e C in una certa misura) è davvero un buon modo di imparare questi dettagli di prestazioni, dal momento che rende veramente facile da capire esattamente ciò che il computer sta facendo perché è possibile controllare esattamente ciò che accade ad ogni passo.

(Il punto di astrazione che perde vale anche per l'accesso ai componenti hardware specifici/personalizzati.)

+0

Grazie mille per la tua risposta. Ora mi è stato chiarito il bisogno di un linguaggio di assemblaggio. –