Ассемблер

Ассе́мблер (asm, assembler); от англ. assemble — собирать, монтировать) — язык программирования низкого уровня, вспомогательная программа в составе операционной системы для автоматического перевода исходной программы, подлежащей выполнению на компьютере, на машинный язык; вид транслятора. Понятия ассемблера отражают архитектуру электронно-вычислительной машины. Ассемблер — символьная форма записи машинного языка, использование которой упрощает написание машинных программ. Для одного и того же компьютера могут быть разработаны разные языки ассемблера. В отличие от языков высокого уровня, в котором проблемы реализации алгоритмов скрыты от разработчиков, язык ассемблера тесно связан с системой команд компьютера. Ассемблер обеспечивает доступ к регистрам, указание методов адресации и описание операций в терминах команд процессора. Он может содержать средства более высокого уровня: встроенные и определяемые макрокоманды, соответствующие нескольким машинным командам, автоматический выбор команды в зависимости от типов операндов, средства описания структур данных.

Особенности ассемблера

Ассемблером называют также компилятор с языка ассемблера в команды машинного языка. Другое название такого компилятора — мнемокод. Он предназначен для представления в удобном (мнемоническом) виде машинных кодов команд, обеспечивает эффективное использование ресурсов системы (процессор, память, периферия). Мнемокод используется в местах, где требуется быстродействие, ограничен по размер оперативной памяти. Ассемблером также называют иногда систему команд центрального процессора.
Под каждую архитектуру процессора и под каждую операционную систему существует свой ассемблер. Кросс-ассемблеры позволяют на машинах с одной архитектурой ассемблировать программы для другой архитектуры или другой операционной системы. Ассемблер обеспечивает доступ к регистрам, указание методов адресации и описание операций в терминах команд процессора. Ассемблер может содержать средства высокого уровня: встроенные и определяемые макрокоманды, соответствующие нескольким машинным командам, автоматический выбор команды в зависимости от типов операндов, средства описания структур данных.
Команды языка ассемблера соответствуют командам процессора и представляют собой символьную форму записи команд и аргументов. Язык ассемблер обеспечивает связывание частей программы и данныx через метки, выполняемое при ассемблировании (для каждой метки высчитывается адрес, после чего каждое вхождение метки заменяется на этот адрес). Поскольку системы команд микропроцессоров различаются, каждый процессор имеет свой набор команд на языке ассемблера и свои компиляторы-ассемблеры.
Обычно программы или участки кода пишутся на языке ассемблера в случаях, когда разработчику нужно оптимизировать быстродействие (при создании драйверов), размер кода. Большинство компиляторов позволяют комбинировать в одной программе, код написанный на разных языках программирования. Это позволяет писать сложные программы используя высокоуровневый язык, не теряя быстродействия в критических ко времени задачах, используя для них части написанные на языке ассемблера. Комбинирование достигается вставкой фрагментов на языке ассемблера в текст программы (специальными директивами языка) или написанием процедур на языке ассемблера. Этот способ используется для несложных преобразований данных, но он неприменим в полноценном ассемблерном коде с данными и подпрограммами с множеством входов и выходов, не поддерживаемых высокоуровневыми языками.
В таком случае используют модульную компиляцию, когда каждый файл программы компилируется в объектный модуль, которые затем линкуются (связываются) в готовую программу. Объектные файлы представляют собой блоки машинного кода и данных, с неопределенными адресами ссылок на данные и процедуры в других объектных модулях, а также список своих процедур и данных. Линкер собирает код и данные каждого объектного модуля в программу, вычисляет и заполняет адреса перекрестных ссылок между модулями. В процессе линковки происходит связывание программы со статическими и динамическими библиотеками (являющихся архивами объектных файлов).При модульной компиляции каждый объектный модуль программы может быть написан на своем языке программирования и скомпилирован своим компилятором (ассемблером).

Смотри также

Статья находится в рубриках
Яндекс.Метрика