アセンブリの学習以外にも、Cのような低水準言語がどのようにコンパイルされるかを学習することは非常に価値があると思います。だから私の答えはイエスですが、低レベルのプログラミングを楽しんでいるので、私はおそらく偏っています。
たとえば、単純なステートメントがどのようにコンパイルされるかを理解するだけです。以下の機能、
int func(int val)
{
int num = val * 5;
return num;
}
...になる(少なくとも興味深いビット):
movl %edi, -20(%rbp)
movl -20(%rbp), %edx
movl %edx, %eax
sall $2, %eax
addl %edx, %eax
このコードはスタックから引数(val、funcへのパラメーター)を取り、それを左に2桁シフト(2 ^ 2または4で乗算)してから、元の値を結果に追加します。最終結果は5倍になります。このような例は、コンパイラーの最適化など、認識しておくべき多くのことを示しています。5を直接乗算する命令を呼び出す代わりに、2桁シフトして4を乗算し、元の値を追加します。このような例を見つけて、下位レベルでの理解を大幅に向上させました。
-S
オプションでgccからアセンブラ出力を生成します。ただし、結果はコンパイラと最適化レベルによって異なることに注意してください。
とにかく、私はアセンブリ言語プログラマであるということは、アセンブリを理解することと同じだとは思いません。繰り返しになりますが、Cのような言語でプログラミングし、それがマシンコードにどのように組み込まれるかを知ることは貴重な習慣だと感じています。