Писання в збірці не дасть вам магічного збільшення швидкості, оскільки завдяки кількості деталей (розподіл реєстру тощо) ви, ймовірно, напишете самий тривіальний алгоритм.
Крім того, з сучасними (читання - розробленими після 70-80-х років) складання процесорів не дасть вам достатньої кількості деталей, щоб знати, що відбувається (тобто - на більшості процесорів). Сучасні ПУ (процесори та графічні процесори) є досить складними, оскільки йдеться про інструкції щодо планування. Знання основ складання (або псевдоскладування) дозволить зрозуміти книги / курси архітектури комп’ютера, які дадуть додаткові знання (кеші, виконання поза замовленнями, MMU тощо). Зазвичай вам не потрібно знати складні ISA, щоб їх зрозуміти (MIPS 5 - досить популярний IIRC).
Навіщо розуміти процесор? Це може дати вам набагато більше розуміння того, що відбувається. Скажімо, ви пишете матричне множення наївно:
for i from 0 to N
for j from 0 to N
for k from 0 to N
A[i][j] += B[i][k] + C[k][j]
Це може бути "досить добре" для вашої мети (якщо це матриця 4x4, вона все одно може бути складена до векторних інструкцій). Однак при складанні масивних масивів є досить важливі програми - як їх оптимізувати? Якщо ви пишете код на зборах, у вас може бути поліпшення на кілька% (якщо ви не зробите так, як це робить більшість людей - також наївним способом, недостатньо використовуючи регістри, постійно завантажуючи / зберігаючи в пам'ять і фактично маючи повільнішу програму, ніж на мові HL) .
Однак ви можете перетворити рядки тхо і магічним чином отримати продуктивність (чому? Я залишаю це як "домашнє завдання") - IIRC, залежно від різних факторів для великих матриць, це може бути навіть 10 разів.
for i from 0 to N
for k from 0 to N
for j from 0 to N
A[i][j] += B[i][k] + C[k][j]
Це сказало - там працюють над компіляторами, які можуть це зробити ( графіт для gcc та Polly для будь-якого використання LLVM) Вони навіть здатні перетворити це на (вибачте - я пишу блокування з пам'яті):
for i from 0 to N
for K from 0 to N/n
for J from 0 to N/n
for kk from 0 to n
for jj from 0 to n
k = K*n + kk
j = J*n + jj
A[i][j] += B[i][k] + C[k][j]
Підводячи підсумок - знання основ складання дозволяє вам зануритися в різні "деталі" з дизайнерського процесора, що дозволить вам писати швидші програми. Можливо, буде добре знати відмінності між архітектурами RISC / CISC або VLIW / векторний процесор / SIMD / ... Однак я б не починав з x86, оскільки вони, як правило, досить складні (можливо, і ARM) - знаючи, що таке реєстр тощо, достатньо для запуску IMHO.