Ассемблеры
Ассемблер – компьютерная программа компилятор исходного текста программы написанный на языке ассемблера в программу на машинном языке.
Ассемблеры как правило специфичны конкретной архитектуре ОС и варианту синтаксиса языка.
Ассемблеры DOS
Наиболее известны ассемблеры ОС DOS являлись:
Borland Turbo Assembler (TASM)
Microsoft Macro Assembler (MASM)
Watcom Assembler (WASM)
Так же в своё время был популярен простой ассемблер А86.
Ассмеблер для Windows
При появление ОС Windows появились расширения TASM, именуемое TASM 5+ позволившее создавать программы для выполнения в среде Windows
Microsoft поддерживает свой продукт под названием Microsoft Macro Assembler (MASM). Кроме того, Стивен Хатчессон создал пакет для программирования на MASM под названием «MASM 32».
Ассемблеры для 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 – синтаксис .
Язык ассемблер
Язык программирования низкого уровня мнемонические команды которого (за редким исключением), соответствуют инструкциям процессора ВС. Трансляция программы в исполняемый машинный код производится программой Ассемблер – транслятором, которая и дала языку ассемблера его название.
Команды языка ассемблера один к одном соответствует командам процессора, фактически, они представляют собой более удобную для человека символьную форму записи (мнемокод) команд и их аргументов.
При этом одной команде языка ассемблера может соответствовать несколько вариантов команд процессора, в зависимости от операндов.
Каждая модель процессоров (или семейств) процессоров имеет набор команд и соответствующий ему язык ассемблера.
Наиболее популярный синтаксисы:
Intel-синтаксис at&t-синтаксис Достоинства языка ассемблера
При достаточной квалификации программиста, языка ассемблера позволяет писать самый быстрый компактный код.
Если код программы достаточно большой, данные не помещаются целиком в регистрах процессора, то искусный программист, как правило, способен значительно оптимизировать программу по сравнению с высокоурвненвыми трансляторами по одному или нескольким параметрам: скорость работы, объём команды.
Обеспечение максимального использования специфических возможностей конкретной платформы, что также позволяет создавать более эффективные программы с меньшими затратами ресурсов.
При программировании на языке ассемблера возможен непосредственный доступ к аппаратуре, в том числе портам
ввода-вывода, регистрам процессора и др. Язык ассемблера применяется для создания драйверов и ядра ОС.
Язык ассемблера используется для создания «прошивок» BIOS.
С помощью языка ассемблера создаются компиляторы и интерпретаторы языков высокого уровня, а также реализуются совместимость платформ.
Существует возможность исследования других программ с отсутствующим исходным кодом с помощью дизассемблера.
Недостатки языка ассемблера
В СИЛУ МАШИННОЙ ОРИЕНТАЦИИ («низкого уровня») языка ассемблера человек сложнее читать и понимать программу на нём по сравнению с языками программирования высокого уровня; программа состоит из слишком «мелких» машинных команд, соответственно, усложняются программирование и отладка, растет трудоемкость, велика вероятность внесения ошибок.
Требуется высокая квалификация программиста
Код на ассемблере выполняется быстрее но написанный неопытным программистом обычно оказываются хуже сгенерированного компилятором.
Как правило меньшее кол-во доступных библиотек по сравнению с современными языками программирования.
Отсутствует переносимость программ на компьютеры с другой архитектурой и системой команд.
Основы 32-битного программирования Windows
Перерисовать схему
Двум стадиям трансляции соответствует две основыне программы: ассемблер ML.EXE и редактор связей LINK.EXE.
Файл с текстом программы на языке ассемблера называется Prog.asm
Тогда трансляции будут выглядеть следующим образом
Стадия 1 – в результате модуль PROG.OBJ
Стадия 2 – в результате появляется исполняемый модуль Prog.exe
Формат конечного модуля зависит от ОС. Установив стандарт на структуру объектного модуля, мы получаем возможность.
Использовать уже готовые объектные модули.
Стыковать между собой программы написанные на разных языках.
Если стандарт объективного модуля распространить на разные ОС, то можно использовать модули, написанные в разных ОС.
Программы для программирования на ассемблере.