Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Раздел 3.Ассемблеры. Тема3.1Программа Ассемблер. Переносимые ассемблеры.. Тема3.2 Язык Ассемблер




Раздел 3. Ассемблеры

Тема3. 1Программа Ассемблер

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

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

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

Ассемблеры для DOS. Наиболее известными ассемблерами для операционной системы DOS являлись Borland Turbo Assembler (TASM), Microsoft Macro Assembler (MASM) и Watcom Assembler (WASM). Также в своё время был популярен простой ассемблер A86.

Ассемблеры для Windows. При появлении операционной системы Windows появилось расширение TASM, именуемое TASM 5+ (неофициальный пакет, созданный человеком с ником! tE), позволившее создавать программы для выполнения в среде Windows. Последняя известная версия TASM — 5. 3, поддерживающая инструкции MMX, на данный момент включена в Turbo C++ Explorer. Но официально развитие программы полностью остановлено.

Microsoft поддерживает свой продукт под названием Microsoft Macro Assembler (MASM). Она продолжает развиваться и по сей день.. Но версия программы, направленная на создание программ для DOS, не развивается. Кроме того, Стивен Хатчессон создал пакет для программирования на MASM под названием «MASM32».

Ассемблеры для GNU и GNU/Linux. В состав операционной системы GNU входит пакет binutils, включающий в себя ассемблер gas (GNU Assembler), использующий AT& T-синтаксис, в отличие от большинства других популярных ассемблеров, которые используют Intel-синтаксис (поддерживается с версии 2. 10).

Переносимые ассемблеры.

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

NASM (Netwide Assembler).

YASM — это переписанная с нуля версия NASM под лицензией BSD (с некоторыми исключениями).

FASM (flat assembler) — молодой ассемблер под модифицированной для запрета перелицензирования BSD-лицензией. Есть версии для Linux, DOS и Windows; использует Intel-синтаксис.

Тема

Тема3. 2 Язык Ассемблер

 

Язы́ к Ассе́ мблер — язык программирования низкого уровня, мнемонические команды которого (за редким исключением) соответствуют инструкциям процессора вычислительной системы. Трансляция программы в исполняемый машинный код производится программой Аассемблер - транслятором, которая и дала языку ассемблера его название.

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

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

Директивы ассемблера позволяют, в частности, включать блоки данных, задать ассемблирование фрагмента программы по условию, задать значения меток, использовать макроопределения с параметрами.

Каждая модель (или семейство) процессоров имеет свой набор команд и соответствующий ему язык ассемблера. Наиболее популярные синтаксисы — Intel-синтаксис и AT& T-синтаксис.

Достоинства:

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

Если код программы достаточно большой, данные, которыми он оперирует, не помещаются целиком в регистрах процессора, то есть частично или полностью находятся в оперативной памяти, то искусный программист, как правило, способен значительно оптимизировать программу по сравнению с высокоуровневыми трансляторами по одному или нескольким параметрам: скорость работы (за счёт оптимизации вычислений и/или более рационального обращения к ОП, перераспределения данных), объём кода (в том числе за счёт эффективного использования промежуточных результатов).

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

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

Язык ассемблера применяется для создания драйверов оборудования и ядра операционной системы.

Язык ассемблера используется для создания «прошивок» BIOS.

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

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

Недостатки:

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

Требуется высокая квалификация программиста. Код на ассемблере выполняется быстрее, но написанный неопытным программистом, обычно оказывается хуже сгенерированного компилятором[2]

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

Отсутствует переносимость программ на компьютеры с другой архитектурой и системой команд.

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...