J'ai appris du livre de Kip Irvine . Si vous ignorez les (justes) critiques de ses bibliothèques (non pertinentes), je peux le recommander comme une bonne introduction au langage lui-même - même si pour les choses vraiment intéressantes, vous devez chasser les obsessionnels sur le net.
Je pense qu'il est utile de comprendre ce qui se passe aux niveaux inférieurs. En recherchant l'assembleur, vous en apprendrez davantage sur le pipelining du processeur, la prédiction de branche, l'alignement du cache, la SIMD, la réorganisation des instructions, etc. La connaissance de ceux-ci vous aidera à écrire un meilleur code de haut niveau.
De plus, la sagesse conventionnelle est de ne pas essayer d'optimiser manuellement l'assemblage la plupart du temps mais de laisser le compilateur s'en soucier. Lorsque vous verrez quelques exemples des choses tordues générées par les compilateurs, vous comprendrez mieux pourquoi la sagesse conventionnelle tient.
Exemple: les LFSR s'exécutent rapidement avec l'instruction rotate-with-carry, pour des cas spécifiques comme celui-ci, il est tout aussi facile d'écrire la version de l'assembleur que de découvrir si le compilateur est suffisamment intelligent pour le comprendre. Parfois, vous savez simplement quelque chose que le compilateur ne sait pas.
Cela vous permet également de mieux comprendre les problèmes de sécurité - écriture ou exécution, dépassements de pile, etc.
Certains problèmes de concurrence ne deviennent apparents que lorsque vous êtes conscient de ce qui se passe au niveau par instruction.
Cela peut parfois être utile lors du débogage si vous ne disposez pas du code source complet.
Il y a la valeur de la curiosité. De toute façon, comment les fonctions virtuelles sont-elles implémentées? Avez-vous déjà essayé d'écrire des programmes DirectX ou COM dans l'assembleur? Comment les grandes structures sont-elles renvoyées, la fonction appelante leur offre-t-elle un espace ou vice-versa?
Ensuite, il existe des langages d'assemblage spéciaux pour le matériel graphique, bien que les langages de shader aient atteint un niveau élevé il y a quelques années, tout ce qui vous permet de penser un problème d'une manière différente est bon.