Ich habe aus Kip Irvines Buch gelernt . Wenn Sie die (faire) Kritik an seinen (irrelevanten) Bibliotheken ignorieren, kann ich sie als gute Einführung in die Sprache selbst empfehlen - obwohl Sie für die wirklich interessanten Dinge im Internet nach Obsessiven suchen müssen.
Ich denke, es ist nützlich zu verstehen, was auf den unteren Ebenen passiert. Während Sie nach Assembler suchen, lernen Sie CPU-Pipelining, Verzweigungsvorhersage, Cache-Ausrichtung, SIMD, Neuordnung von Befehlen usw. kennen. Wenn Sie diese kennen, können Sie besseren Code auf hoher Ebene schreiben.
Darüber hinaus besteht die übliche Weisheit darin, die meiste Zeit nicht zu versuchen, die Assembly von Hand zu optimieren, sondern den Compiler sich darum kümmern zu lassen. Wenn Sie einige Beispiele für die verdrehten Dinge sehen, die Compiler erzeugen, werden Sie besser verstehen, warum die konventionelle Weisheit gilt.
Beispiel: LFSRs werden mit der Anweisung "Mit Übertrag drehen" schnell ausgeführt. In bestimmten Fällen wie diesem ist es genauso einfach, die Assembler-Version zu schreiben, wie festzustellen, ob der Compiler intelligent genug ist, um dies herauszufinden. Manchmal weiß man einfach etwas , was der Compiler nicht weiß.
Es verbessert auch Ihr Verständnis für Sicherheitsprobleme - Schreiben oder Ausführen, Stapelüberschreitungen usw.
Einige Parallelitätsprobleme treten erst auf, wenn Sie wissen, was auf Befehlsebene geschieht.
Es kann manchmal beim Debuggen hilfreich sein, wenn Sie nicht über den vollständigen Quellcode verfügen.
Da ist der Wert der Neugier. Wie werden virtuelle Funktionen überhaupt implementiert? Haben Sie jemals versucht, DirectX- oder COM-Programme in Assembler zu schreiben? Wie werden große Strukturen zurückgegeben, bietet die aufrufende Funktion einen Platz für sie oder umgekehrt?
Dann gibt es spezielle Assemblersprachen für Grafikhardware, obwohl Shader-Sprachen vor einigen Jahren auf hohem Niveau waren. Alles, was Sie über ein Problem auf andere Weise nachdenken lässt, ist gut.