Kip Irvineの本から学びました。彼の(無関係な)ライブラリーの(公正な)批判を無視する場合、私はそれを言語自体への良い入門としてお勧めできます- 非常に興味深いもののために、あなたはネット上の強迫観念を探し出さなければなりません。
下位レベルで何が起こるかを理解することは有用だと思います。アセンブラを研究するにつれて、CPUパイプライン処理、分岐予測、キャッシュアライメント、SIMD、命令の並べ替えなどについて学習します。これらの知識は、より良い高レベルのコードを書くのに役立ちます。
さらに、従来の知識では、ほとんどの場合、アセンブリを手動で最適化しようとせず、コンパイラにそれを心配させることです。コンパイラーが生成するねじれたもののいくつかの例を見ると、従来の知識が保持されている理由がよくわかります。
例:LFSRは、carry-with-carry命令で高速に実行されます。このような特定のケースでは、コンパイラーが十分にスマートであるかどうかを見つけるのと同じくらい簡単に、アセンブラーバージョンを記述できます。コンパイラーが知らないことを知っていることがあります。
また、書き込みや実行、スタックオーバーランなどのセキュリティ問題の理解も深まります。
いくつかの同時実行の問題は、命令ごとのレベルで何が起こっているのかを知っている場合にのみ明らかになります。
完全なソースコードがない場合、デバッグ時に役立つことがあります。
好奇心の値があります。とにかく仮想関数はどのように実装されていますか?アセンブラーでDirectXまたはCOMプログラムを作成しようとしたことがありますか?大きな構造はどのように返されますか?呼び出し側の関数はそれらにスペースを提供しますか、またはその逆ですか?
次に、グラフィックハードウェア用の特別なアセンブリ言語がありますが、シェーダー言語は数年前に高レベルになりましたが、別の方法で問題について考えることができるものは何でも良いです。