Поза навчальним складанням, я вважаю, що вивчення того, як складається мова низького рівня, як 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, параметр у функцію), зміщує його вліво на 2 місця (помножимо на 2 ^ 2 або 4) і потім додає вихідне значення до результату. Кінцевим результатом є множення на 5. Такий приклад ілюструє ряд речей, про які слід пам’ятати, наприклад оптимізацію компілятора. Замість того, щоб викликати інструкцію безпосередньо помножити на 5, вона зміщує два місця на множення на 4, а потім додає початкове значення. Я знайшов подібні приклади, які значно покращили моє розуміння речей на нижчому рівні.
Створити вихід асемблера з gcc за допомогою -S
параметра. Однак майте на увазі, що результати залежать від компілятора та рівня оптимізації.
У будь-якому випадку, я не думаю, що програміст мови асемблера - це не те саме, що розуміти збірку . Знову ж таки, я відчуваю, що програмування на такій мові, як C, і знання того, як воно потрапляє в машинний код, є цінною практикою.