Идут технические работы! Возможны перебои с доступом к сайту!

Ассемблер

Из проекта Викизнание

(Перенаправление из статьи Assembler)

Ассемблер (англ. assemblerсборщик), автокодязык программирования низкого уровня, однозначно транслируемый в систему команд микропроцессора.

Также ассемблером обычно называют транслятор языка ассемблера.

Семантика ассемблера прямо, один-в-один, отображается в архитектуру процессора, для которого он сделан - каждая команда на ассемблере соответствует своему единственному коду команды процессора, а также существуют токены для представления каждого из всех остальных программно доступных ресурсов — регистров, векторов прерываний и т.п. Также порядок следования инструкций на ассемблере точно соответстует их порядку в получаемом машинном коде. Таким образом assembler является инструментом самого низкого уровня, позволяющим программисту контролировать программу в самых мелких деталях, и использовать все доступные программе ресурсы процессора. Каждому процессору соответствует своя язык ассемблера, хотя в рамках одной линейки, языки, как правило, схожи.

Язык ассемблера — первый исторически язык программирования микропроцессоров, реализованный в виде машинного транслятора. Его название произошло от английского слова assemble, что означает «собирать», что отображало сей факт, что программа как бы собирается из мелких кирпичиков, являющихся командами процессора. Он был изобретен для того, чтобы упростить запоминание системы команд процессора: числовые коды инструкций были заменены на относительно легко запоминающиеся мнемоники. Часто мнемоники были сокращением слов, обозначающих операции: JMP — jump — «прыжок», на другой адрес, MOV — move — перемещение значения одного регистра в другой. Другой важной возможностью ассемблера является использование символических обозначений для величин и адресов. Это позволило программисту не расчитывать их вручную, что облегчало модификацию программы.

Впоследствии ассемблер вобрал в себя некоторые возможнсти и абстракции, присущие языкам высокого уровня: автоматический выбор кода инструкции, если существует несколько различных кодов для одной и той же операции, например различной длины; возможность производить вычисление выражений во время трансляции; оптимизатор; описание структур данных; и макроподстановки. Макроподстановки к тому же убрали одно ограничение "классического" ассемблера: соотвествие »одна строка на ассемблере — одна инструкция«, так как дал возмоность делать "псевдоинструкции" из нескольких команд процессора. Сильно развитый макроподстановщик позволяет реализовывать многие конструкции, существующие на языках высокого уровня, в частности элементы структурного программирования. Ассемблер с макроподстановщиком называется отдельным термином: макроассемблер, обозначая главное отличие его от "классического" ассемблера. На данный момент "чистых" ассемблеров практически не сущеструет.

До бурного развития оптимизирующих компиляторов, ассемблер был практически единственным средством получения достаточно оптимального машинного кода. Примерно в годах 1990-х ситуация стала меняться. Качество компилированного кода стало приближаться к коду, написанному человеком на ассемблере, а новые процессоры, со сложной архитектурой сильно усложнили анализ оптимальности кода человеком. Языки высокого уровня сильно потеснили ассемблер на рынке средств программирования.

Также ассемблером называется программа трансляции программы на ассемблере в машинный код процессора. Программа, получающая программу на ассемблере из машинного кода называется дизассемблер.


См. также