Au-delà de l'apprentissage de l'assemblage, je crois qu'apprendre comment un langage de bas niveau comme C est compilé est très précieux. Donc ma réponse est oui, mais là encore, je suis probablement biaisé parce que j'aime la programmation de bas niveau.
Par exemple, comprendre comment les instructions simples sont compilées. La fonction suivante,
int func(int val)
{
int num = val * 5;
return num;
}
... devient (le bit intéressant au moins):
movl %edi, -20(%rbp)
movl -20(%rbp), %edx
movl %edx, %eax
sall $2, %eax
addl %edx, %eax
Ce code prend l'argument de la pile (val, le paramètre à func), le décale de 2 places à gauche (multipliez par 2 ^ 2 ou 4) puis ajoute la valeur d'origine au résultat. Le résultat final est une multiplication par 5. Un exemple comme celui-ci illustre un certain nombre de choses à prendre en compte, telles que les optimisations du compilateur. Au lieu d'appeler une instruction à multiplier directement par 5, elle décale de deux endroits pour se multiplier par 4, puis ajoute la valeur d'origine. J'ai trouvé des exemples comme celui-ci pour améliorer considérablement ma compréhension des choses à un niveau inférieur.
Générez la sortie de l'assembleur à partir de gcc avec l' -S
option. Cependant, sachez que les résultats varient selon le compilateur et le niveau d'optimisation.
Quoi qu'il en soit, je ne pense pas qu'être programmeur en langage assembleur équivaut à comprendre l'assemblage . Encore une fois, je pense que la programmation dans un langage comme C et savoir comment il est mis dans le code machine est une pratique précieuse.