Преамбула: когда-то давно я интересовался ассемблером и взломом программ, занимался дизассемблированием, писал несложные вещи на ассемблере под win32. Сейчас пишу на высокоуровневых языках.
Тут есть пара ошибок в предпосылках к вопросам. Прежде чем отвечать на сами вопросы, нужно учесть, что:
- Не существует единого языка ассемблера. Есть два разных стандарта синтаксиса (AT&T и Intel), у каждого компилятора (MASM, GAS, NASM и прочие) свой диалект, но главное — у каждой аппаратной платформы будет свой собственный набор инструкций, а значит свой ассемблер.
- Программы не станут быстрее просто от того, что написаны на ассемблере. Они становятся быстрее от того, что мы экономим на сопутствующих расходах (жертвуя при этом надёжностью, безопасностью, простотой или ещё чем-то). Неэффективный алгоритм при этом всё равно останется неэффективным.
- Ассемблер это не совсем машинный код. Если декомилировать машинный код, не получится изначального кода на ассемблере. Подробнее об этом рассказывают здесь.
Возвращаясь к вопросу, если вам интересно низкоуровневое программирование, я бы советовал изучать C/C++ или Rust. C/C++ изучают в вузах, есть курсы, спрос на язык на рынке довольно большой. Rust это современная альтернатива C/C++, "самый любимый язык" по результатам опроса на Stackoverflow за 2021 год, но к сожалению далеко не самый популярный.
Ассемблер сам по себе это простой императивный язык, но чтобы написать на нём что-то работоспособное, требуется глубокое понимание аппаратной базы и ОС. Пишут на нём очень специфические вещи, например подпрограммы для однокристальных процессоров в микроконтроллерах. Никто уже не пишет прикладные программы на ассемблере. Даже такие низкоуровневые вещи как драйвера и операционные системы сейчас пишутся как минимум на Си.
Главный минус ассемблера как ЯП для разработки — это то, что программы на нём плохо читаются человеком, при этом статический анализ затруднён или невозможен из-за отсутствия в нём системы типов и тотальной императивности (в ассемблере нет привычных структур ЯП, есть только условные и безусловные переходы а-ля go to). Чтобы представить себе, как может выглядеть разработка на ассемблере, попробуйте решить пару простейших задач на языке Brainfuck, например на сайте
codewars.
В будущем ассемблер не устареет совсем, так как не устареют процессоры, но программистов на чистом ассемблере нет уже сейчас. Изучать его стоит, но только вдобавок к более привычным в индустрии языкам, таким как C/C++ или Java.