Assembler — язык программирования низкого уровня, представляющий
собой формат записи машинных команд, удобный для восприятия человеком.
Команды языка ассемблера один в один соответствуют командам
процессора и, фактически, представляют собой удобную символьную форму
записи (мнемокод) команд и их аргументов. Также язык ассемблера
обеспечивает базовые программные абстракции: связывание частей
программы и данных через метки с символьными именами и директивы.
Директивы ассемблера позволяют включать в программу блоки данных
(описанные явно или считанные из файла); повторить определённый
фрагмент указанное число раз; компилировать фрагмент по условию;
задавать адрес исполнения фрагмента, менять значения меток в процессе
компиляции; использовать макроопределения с параметрами и др.
Каждая модель процессора, в принципе, имеет свой набор команд и соответствующий ему язык (или диалект) ассемблера.
Достоинства и недостатки
минимальное количество избыточного кода (использование
меньшего количества команд и обращений в память). Как следствие —
большая скорость и меньший размер программы
большие объемы кода, большое число дополнительных мелких задач
плохая читабельность кода, трудность поддержки (отладка, добавление возможностей)
трудность реализации парадигм программирования и любых других
сколько-нибудь сложных конвенций, сложность совместной разработки
меньшее количество доступных библиотек, их малая совместимость
непосредственный доступ к аппаратуре: портам ввода-вывода, особым регистрам процессора
возможность написания самомодифицирующегося кода (т.е.
метапрограммирования, причем без необходимости программного
интерпретатора)
максимальная «подгонка» для нужной платформы (использование специальных инструкций, технических особенностей «железа»)
непереносимость на другие платформы (кроме двоично совместимых).