1. ホーム
  2. programming-languages

[解決済み] アセンブリ言語を学ぶ価値はあるのか?[クローズド]

2022-11-13 16:34:54

質問

を学ぶことはまだ価値があるのでしょうか? ASM ?

私は少し知っていますが、実際に使ったことも、きちんと学んだこともありません。なぜなら、私がアセンブラで学ぶことはすべて、CやC++のようなある言語で1/10の時間でできるからです。では、本当にASMを勉強して使うべきなのでしょうか?プロとして何か役に立つのでしょうか?臨機応変に対応できるようになるのだろうか?要するに、よりよいプログラマーになれるのでしょうか?

注:私が話しているのは、以下のような低レベルのアセンブリのことです。 FASM または NASM のようなものでなく HLA (ハイレベル・アセンブラ) のようなものではありません。

どのように解決するのですか?

私は キップ・アーバイン氏の の本から学びました。彼の(無関係な)ライブラリに対する(正当な)批判を無視すれば、私はこの言語自体への良い入門書としてこの本を推薦できます。 本当に しかし、本当に興味深いものについては、ネット上でこだわりのある人たちを探し出す必要があります。

下位のレベルで何が起こっているかを理解することは有用だと思います。アセンブラを研究していると、CPU パイプライン、分岐予測、キャッシュのアライメント、SIMD、命令の並べ替えなどについて学ぶことができます。これらの知識は、より良い高レベルのコードを書くのに役立ちます。

さらに、従来の常識では、ほとんどの場合、手作業でアセンブリを最適化しようとせず、コンパイラーに心配させるようにします。コンパイラが生成するねじれたものの例をいくつか見れば、なぜこの常識が成り立つのかがよりよく理解できるでしょう。

例 このような特定のケースでは、コンパイラーがそれを理解するのに十分賢明であるかどうかを発見するのと同じくらい、アセンブラー バージョンを書くのは簡単です。時には を知ることがあります。 を知っていて、コンパイラがそれを理解できないこともあります。

また、セキュリティ問題(write-or-execute、スタックオーバーランなど)についての理解も深まります。

いくつかの 同時実行 の問題は、命令レベルで何が起こっているかを認識したときに初めて明らかになります。

完全なソース コードがない場合、デバッグの際に役立つことがあります。

好奇心が満たされます。仮想関数はどのように実装されるのでしょうか。DirectX や COM プログラムをアセンブラで書こうとしたことはありますか? 大きな構造体がどのように返されるのか、呼び出し側の関数がそれらのためのスペースを提供するのか、あるいはその逆なのか。

それから、グラフィックスハードウェアのための特別なアセンブリ言語があります。シェーダー言語は数年前に高レベルになりましたが、問題を別の方法で考えることができるものは何でも良いのです。