Для чего используются программы ассемблеры

Учебный курс. Часть 0. Зачем учить ассемблер

В настоящее время существует множество языков программирования. Созданы самые разные языки, удобные для решения любых задач. Большинство этих языков является языками высокого уровня.

Ассемблер — это практически самый древний язык программирования. До него было лишь программирование в машинных кодах

Итак, какие же преимущества дает знание ассемблера:

  1. Глубокое понимание работы компьютера и операционной системы.
  2. Максимальная гибкость при работе с аппаратными ресурсами.
  3. Оптимизация программ по скорости выполнения.
  4. Оптимизация программ по размеру кода.
  5. Дизассемблирование и отладка.

Глубокое понимание работы компьютера и операционной системы.

Даже если вы пишете программу на языке высокого уровня, знание ассемблера поможет понять, как будет выполнятся программа, как хранятся переменные, как вызываются функции. А это позволит избежать многих очень неприятных ошибок. Есть такие люди, которые знают программирование только на уровне языка. То есть знают что надо написать, чтобы получить какой-то результат.

Чем машинный код отличается от ассемблера

А как оно работает, для них остается тайной, покрытой мраком. Человек, владеющий ассемблером, будет лучше программировать и на других языках.

Максимальная гибкость при работе с аппаратными ресурсами.

Используя ассемблер, можно делать с компьютером все что угодно! А языки высокого уровня ограничены компилятором и используемыми библиотеками. Такие современные языки, как Java и C# вобще не позволяют работать с аппаратными ресурсами и операционной системой напрямую.

Оптимизация программ по скорости выполнения.

Современные компиляторы довольно неплохо оптимизируют код, поэтому писать на ассемблере все подряд, конечно, не имеет смысла. Однако, если вы пишите прогу для шифрования или архивации больших файлов, то применение ассемблера позволит в несколько раз увеличить скорость выполнения программы. Причем достаточно реализовать на ассемблере небольшой критически важный участок программы, который производит вычисления или сложные преобразования, а интерфейс может быть написан на языке высокого уровня.

Оптимизация программ по размеру кода.

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

Читайте также:
Desktop portal что это за программа

Дизассемблирование и отладка.

Знание ассемблера позволяет расковырять любую программу дизассемблером и изучить механизм её работы! Только представьте — можно залезть внутрь любой программы и посмотреть как она работает. Иногда бывает, что попадается интересная программа и не понятно, что там внутри, как она написана. Зная ассемблер, можно заглянуть внутрь любой программы и удовлетворить свое любопытство, даже не имея исходников.

ЯЗЫК АССЕМБЛЕРА за 3 МИНУТЫ

Ассемблер очень может помочь при отладке. Иногда случаются ошибки и в компиляторах — очень злая тема. Вроде бы корректно написанный код выполняется вовсе не так, как предполагалось. Чтобы обнаружить такую ошибку надо посмотреть, во что скомпилился код, а разобраться в этом без ассемблера невозможно.

Источник: fasmworld.ru

7. Язык Ассемблера

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

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

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

Очень часто программы-переводчики (компиляторы) с языков высокого уровня дают весьма неэффективную программу на машинном языке. Обычно это касается программ вычислительного характера, в которых большую часть времени выполняется очень небольшой (порядка 3-5%) участок программы (главный цикл).

Для решения этой проблемы могут использоваться так называемые многоязыковые системы программирования, которые позволяют записывать части программы на различных языках. Обычно основная часть программы записывается на языке программирования высокого уровня (Фортране, Паскале, С и т.д.), а критические по времени выполнения участки программы – на Ассемблере.

Читайте также:
Программа солекс воркс что это

Скорость работы всей программы при этом может значительно увеличиться. Часто это единственный способ заставить программу дать результат за приемлемое время. При дальнейшем изучения архитектуры компьютера нам придётся писать как фрагменты, так и полные программы на машинном языке.

Для написания этих программ мы будем использовать одну из версий языка Ассемблера, так называемый Макроассемблер версии 4.0 (MASM-4.0). Достаточно полное описание этого языка приведено в учебнике [5], изучения этого учебника (или аналогичных учебников по языку Ассемблера [6-8]) являетсяобязательнымдля хорошего понимания материала по нашему курсу.

На лекциях мы подробно будем изучать только те особенности и тонкие свойства языка Ассемблера, которые недостаточно полно описаны в указанных учебниках. Изучение языка Ассемблера начнём с рассмотрения общей структуры программы на этом языке. Программа на языке Ассемблера состоит из одного или более независимых модулей.

В каком смысле модуль являетсянезависимойединицей языка Ассемблер, мы выясним несколько позже, когда будем изучать тему «Модульное программирование». Наши первые программы будут содержать всего один модуль, но позже будут рассмотрены и многомодульные программы. Каждый модуль обычно содержит описание одного или нескольких сегментовпамяти.

Напомним, что в нашей архитектуре для работы программы каждая команда и каждое данное должны располагаться в каких-либо сегментах памяти. Как мы уже знаем, в младшей модели нашего семейства ЭВМ в каждый момент времени определены четыреактивных(илитекущих) сегмента памяти, на которые указывают соответствующие сегментные регистрыCS,DS,SSиES.

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

Стоит заметить, что сегменты могут перекрываться в памяти ЭВМ и даже полностью совпадать (накладываться друг на друга). Однако максимальный размер сегмента в младшей модели нашего семейства ЭВМ равен 64К, и, если сегменты будут перекрываться, то одновременно для работы будет доступно меньшее количество оперативной памяти.

Читайте также:
Платформа Android что это за программа

Заметим, что пересечение сегментов никак не влияет на логику работы центрального процессора. 1 В соответствии с принципом фон Неймана, мы имеем право размещать в любом из сегментов памяти как числа, так и команды. Но такой подход ведёт к плохому стилю программирования, программа перестаёт легко читаться и пониматься программистами.

Будем поэтому стараться размещать команды программы в одним сегментах, а данные – в других. Весьма редко программисту будет выгодно размещать данные среди команд, один такой случай будет рассмотрен позже в нашем курсе. На текущий сегмент команд должен указывать регистр CS, а на сегмент данных – регистрDS. Дело в том, что эти регистрыспециализированные.

В частности, устройство управления может выбирать команды для выполнениятолькоиз сегмента, на который указывает регистрCS. Производить арифметические операции можно над числами из любого сегмента, однако в соответствии с принципомумолчаниявсе переменные, если прямо не указано противное, сегментируются по региструDS.

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

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

Источник: studfile.net

Assembler

Ассемблер (от англ. assemble — собирать) — компилятор с языка ассемблера в команды машинного языка.

История ассемблера

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru