Справочник от Автор24
Найди эксперта для помощи в учебе
Найти эксперта
+2

Информатика: Ассемблер

Определение 1

Ассемблер — это программа трансляции приложений из текста на языке ассемблера, в программу на машинном языке.

Введение

Ассемблер (от английского слова assemble, что означает собирать) является программой компиляции с языка ассемблера в машинные коды. Сегодня формирование программ на ассемблере используется главным образом в программировании маленьких микропроцессорных систем (микроконтроллеров) обычно встраиваемых в какое-либо оборудование. Крайне редко появляется необходимость применения ассемблера в проектируемых программных приложениях в тех случаях, когда требуется, к примеру, достичь самой высокой скорости исполнения какого-либо фрагмента программы, осуществить операцию, которая не может быть реализована при помощи средств языков высокого уровня, или нужно разместить программу в памяти, имеющей ограниченный объем (типовое требование для загрузчиков операционной системы).

Для каждой архитектуры процессора и для всех операционных систем или семейств операционных систем имеется отдельный ассемблер. Существуют также так называемые кросс ассемблеры, которые позволяют на машинах с одинаковой архитектурой (или в среде одной операционной системой) ассемблировать программы для другой целевой архитектуры или другой операционной системы и формировать исполняемые коды в формате, который пригоден к выполнению на целевой архитектуре или в среде целевой операционной системы.

Язык Ассемблер

Язык ассемблера является типом языка программирования низкого уровня. Команды языка ассемблер полностью должны соответствовать командам процессора и считаются удобной символьной формой записи (мнемокодом) команд и аргументов. Язык ассемблера позволяет связать части программы и данных через метки, выполняемые при ассемблировании. То есть, для всех меток определяется адрес, а далее при каждом вхождении метки заменяются на этот адрес.

Все модели процессоров обладают своим набором команд и соответствующим ему языком (или диалектом) ассемблера. Как правило, программы или участки кода записываются на языке ассемблера тогда, когда программисту критически важно выполнить оптимизацию таких параметров, как быстродействие (к примеру, при создании драйверов) и размер кода (сектора загрузки, программное обеспечение для микроконтроллеров и процессоров с малыми ресурсами, вирусы, навесные защиты).

«Информатика: Ассемблер» 👇
Помощь эксперта по теме работы
Найти эксперта
Решение задач от ИИ за 2 минуты
Решить задачу
Помощь с рефератом от нейросети
Написать ИИ

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

  1. Путём вставки фрагментов на языке ассемблера в текст программы (при помощи специальных директив языка) или написания процедур на языке ассемблера. Метод хорош для простых преобразований данных, но полноформатного ассемблерного кода с информационными данными и подпрограммами, в том числе с подпрограммами с множеством входов и выходов, не поддерживаемыми высокоуровневыми языками, с помощью него сформировать невозможно.
  2. Компиляция по модульному принципу. Практически все современные компиляторы действуют в два этапа. Первый этап состоит в компиляции всех фалов программы в объектные модули. Второй этап заключается в линковании (связывании) объектных модулей в готовую программу. Достоинством модульной компиляции является тот факт, что все объектные модули будущей программы могут быть полноценно написаны на своем языке программирования и скомпилированы своим компилятором (ассемблером).

Среди достоинств языков ассемблера можно выделить следующие основные преимущества:

  1. Самое оптимальное применение средств процессора, при этом задействовано меньшее количество команд и обращений в память и, следовательно, получается больше скорость работы и меньше размер программы.
  2. Применение расширенных наборов инструкций процессора (MMX, SSE, SSE2, SSE3).
  3. Обеспечение доступа к портам ввода-вывода и особым регистрам процессора (практически во всех операционных системах данная доступна лишь на уровне модулей ядра и драйверов).
  4. Возможность применения самомодифицирующегося (включая перемещаемый) кода (под многими платформами такой возможности нет, так как запись в страницы кода запрещена, включая и аппаратную запись, однако в большинстве общедоступных систем из-за их врожденных недостатков существует возможность выполнения кода, который содержится в сегменте (секции) данных, куда запись разрешена).
  5. Максимальный уровень адаптации к нужной платформе.

Необходимо всё же заметить, что сегодняшние технологии безопасности, которые внедряются в операционные системы и компиляторы, не дают возможности создания самомодифицирующего кода, поскольку исключают одновременную возможность выполнения программы и записи в одном и том же участке памяти (технология W^X). Технология W^X применяется в OpenBSD, в других BSD-системах, в Linux. В Microsoft Windows (начиная с Windows XP SP2) используется похожая технология DEP.

К недостаткам языков ассемблера следует отнести следующие аспекты:

  1. Значительные объемы кода, большое число добавочных маленьких задач, меньшее число доступных для применения библиотек в сравнении с языками высокого уровня.
  2. Достаточно трудоемкий процесс чтения и поиска ошибок (хотя тут существует зависимость от правильности комментариев и методики программирования).
  3. Иногда компилятор языка высокого уровня, из-за наличия современных алгоритмов оптимизации, может позволить создать более эффективную программу (по соотношению качество/время разработки).
  4. Отсутствие переносимости на другие платформы (кроме совместимых).
  5. Ассемблер считается более сложным языком для совместных проектов.
Воспользуйся нейросетью от Автор24
Не понимаешь, как писать работу?
Попробовать ИИ
Дата написания статьи: 23.06.2021
Найди решение своей задачи среди 1 000 000 ответов
Крупнейшая русскоязычная библиотека студенческих решенных задач
Все самое важное и интересное в Telegram

Все сервисы Справочника в твоем телефоне! Просто напиши Боту, что ты ищешь и он быстро найдет нужную статью, лекцию или пособие для тебя!

Перейти в Telegram Bot