Мій друг запитав мене сьогодні “а от ці всі асемблери, їм взагалі є застосування?”. Самому мені було важко вигадати застосування асемблера сьогодні. Тому для нього (і для себе також) я вирішив перекласти частину вступу з матеріалів мого ВУЗу з предмету “низькорівневе програмування”.
Навіть не зважаючи на те, що я вже писав про можливе застосування ассемблера.

Чи потрібне знання асемблера?

  1. Сучасні компілятори так добре оптималізують код, що він працює так само швидко якби він був оптималізуваний вручну
  2. Складність сучасних процесорів і різних рівнів пам’яті настільки висока, що навіть ручна оптималізація є доволі важкою
  3. Процесори стали настільки швидкими, що більшість часу просто чекають на читання або запис даних в/з пам’яті або пристроїв вводу-виводу

Переваги асемблера

  1. Малий розмір коду
    1. програміст керує усім; це дозволяє позбутись деяких змінних чи інструкцій
    2. до коду не додається надмірних стандартних бібліотек
    3. можна вжити інструкції які коротші або які швидші
  2. Висока швидкість роботи
  3. Знання того, як працює програма; допомагає при програмуванню в мовах високого рівня
  4. Асемблерні вставки

Застосування асемблера

  • невеликі програми для компактних систем (embedded devices)
  • ПЗ для телефонів, холодильників, авто і т. д.
  • драйвери
  • виконання команд процесора, недоступних з мов високого рівня (нп. ротація бітів для кодування)
  • векторні обрахунки (MMX, SIMD)
  • ПЗ, яке вимагає параноідальної швидкодії - ігри, пакети лінійної алгебри
  • ПЗ для комп’ютерів, для яких ще не існує мов високого рівня
  • написання компіляторів
  • написання вірусів і бутлоадерів
  • реверс-інжинірінг, зміна бінарних файлів програм, ламання безпеки
  • самозмінний код