Ho imparato dal libro Kip Irvine's. Se si ignorano le (giuste) critiche delle sue (irrilevanti) biblioteche, posso raccomandarlo come una buona introduzione alla lingua stessa - sebbene per lo in realtà roba interessante devi cacciare gli ossessivi sulla rete.
Penso che sia utile capire cosa succede ai livelli inferiori. Mentre studierai l'assemblatore, imparerai a conoscere il pipelining della cpu, la predizione delle branche, l'allineamento della cache, la SIMD, il riordino delle istruzioni e così via. La conoscenza di questi ti aiuterà a scrivere un codice di alto livello migliore.
Inoltre, la saggezza convenzionale consiste nel non tentare di ottimizzare l'assemblaggio manuale per la maggior parte del tempo, ma lasciare che il compilatore si preoccupi di ciò. Quando vedi alcuni esempi delle cose contorte che i compilatori generano, capirai meglio perché la saggezza convenzionale regge.
Esempio: gli LFSR corrono veloci con l'istruzione di rotazione con trasporto, per casi specifici come questo è altrettanto semplice scrivere la versione assembler così come scoprire se il compilatore è abbastanza intelligente da capirlo. A volte you just know something che il compilatore non ha.
aumenta anche la comprensione dei problemi di sicurezza - scrivere-o-esecuzione, il superamento dello stack, ecc
Alcuni concurrency problemi diventano evidenti solo quando si è consapevoli di ciò che sta accadendo a livello per-istruzioni.
Può essere utile a volte durante il debug se non si dispone del codice sorgente completo.
C'è il valore della curiosità. In che modo vengono comunque implementate le funzioni virtuali? Hai mai provato a scrivere programmi DirectX o COM in assembler? Come vengono restituite le strutture di grandi dimensioni, la funzione di chiamata offre uno spazio per loro o viceversa?
Poi ci sono linguaggi di assemblaggio speciali per l'hardware grafico, anche se i linguaggi shader sono diventati di alto livello qualche anno fa, qualsiasi cosa che permetta di pensare a un problema in un modo diverso è buona.
Nota, quel linguaggio assembly legato a un processore/controller. – rmflow
Vuoi dire che non è multipiattaforma? !! – ApprenticeHacker
No. Ad esempio: http://www.worldofspectrum.org/Z80instructions.html – rmflow