Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СПО / Лекции (Assembler).doc
Скачиваний:
389
Добавлен:
07.02.2015
Размер:
968.7 Кб
Скачать

Программные оболочки и их состав

Для программирования на языке Assembler, который изучается в данном курсе, как и в случае других языков программирования, прежде всего, необходимы программные оболочки. Но перед началом их рассмотрения отметим, что под словом Ассемблер (от англ. Assembly – «ассемблирование», «компоновка», «сборка»; Assembler – «сборщик», «транслятор») понимают два различных понятия.

1. Под Ассемблером понимают язык Ассемблера (Assembly Language – «язык ассемблирования»; Assembler Language – «язык ассемблера») – это один из языков программирования низкого уровня (машинно-ориентированный язык программирования), в котором для представления команд используются сокращения и аббревиатуры. Каждый тип процессоров имеет собственный набор машинных команд, поэтому под него создаётся свой уникальный язык Ассемблера.

2. Под Ассемблером понимают программу (оболочку) Ассемблера (Assembly Program – «программа ассемблирования», Assembler Program – «программа ассемблера») – это транслятор с языка ассемблера, компонующая программа, программа сборки. Программа Ассемблера переводит (транслирует) команды исходного текста программы на языке Ассемблера в объектный код или непосредственно в исполняемый машинный код, т. е. переводит текст с языка, понятного человеку, в язык, понятный процессору.

И в повседневной речи, и в литературе под словом «Ассемблер» понимают как сам язык программирования, так и программу для её написания, отладки и запуска на выполнение. Понятно, что, когда говорят «программа на Ассемблере», имеют в виду язык, а когда говорят «Макроассемблер версии 6.13», имеют в виду программу.

Одним из элементов любой программной оболочки, в том числе и Ассемблера, является текстовый редактор (Text Editor), который необходим для ввода текста программы.

Далее необходим компилятор (транслятор) (Compiler, Translator) – это программа, которая переводит текст программы в объектный или непосредственно исполняемый код. Процесс компиляции (трансляции) состоит из двух стадий: 1) анализа (лексического, синтаксического, семантического); 2) синтеза.

На стадии анализа программа разбивается на составные части и проверяется её корректность (правильность использования команд, переменных и т. д.).

На стадии синтеза из внутреннего представления сначала генерируется программа на промежуточном языке, которая затем оптимизируется, после чего кодогенератор порождает программу на машинном языке (объектный или исполняемый код).

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

Во всех программах встречаются ошибки. Если не только пробовать приводимые в лекциях примеры, но и писать что-то своё, то рано или поздно обязательно потребуется отладчик (Debugger). Кроме поиска ошибок отладчики иногда применяют и для того, чтобы исследовать работу существующих программ. Безусловно, самый мощный отладчик на сегодняшний день – SoftICE от NuMega Software. Это фактически единственный отладчик для Windows 95/NT, позволяющий исследовать всё – от ядра Windows до программ на С++, поддерживающий одновременно 16- и 32-битный код и многое другое. Другие популярные отладчики, распространяемые вместе с соответствующими ассемблерами, – Codeview (Microsoft), Turbo Debugger (Borland) и Watcom Debugger (Watcom).

Ещё одна особенность ассемблера, отличающая его от всех остальных языков программирования, – возможность дизассемблирования. То есть, имея исполнимый файл, с помощью специальной программы дизассемблера (Disassembler) почти всегда можно получить исходный текст на Ассемблере. Например, можно дизассемблировать BIOS вашего компьютера и узнать, как выполняется переключение видеорежимов, или драйвер для DOS, чтобы написать такой же для Windows. Дизассемблер не необходим, но иногда оказывается удобно иметь его под рукой. Лучшие дизассемблеры на сегодняшний день – Sourcer от V Communications и IDA.

И, наконец, последняя необязательная, но крайне полезная утилита – шестнадцатеричный редактор (Hexadecimal Editor). Многие такие редакторы (Hiew, Proview, Iview, Hexit) тоже имеют встроенный дизассемблер, так что можно, например, открыв в таком редакторе свою программу, посмотреть, как скомпилировался тот или иной участок программы, поправить какую-нибудь команду ассемблера или изменить значения констант и тут же, без перекомпиляции, запустить программу, чтобы посмотреть на результат изменений.

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

В таблице 1 показаны Ассемблеры и вспомогательные программы различных фирм-производителей программного обеспечения.

Таблица 1. Ассемблеры и сопутствующие программы

 

Microsoft

Borland

Watcom

DOS, 16 бит

Masm или ML

Tasm

Wasm

Link (16 бит)

Tlink

Wlink

DOS, 32 бита

Masm или ML

Tasm

Wasm

Link (32 бита) и Dosx

Tlink

Wlink

Link (16 бит) и Dos32

Wdosx или Dos32

Dos4gw, Pmodew,

Zrdx или Wdosx

Windows EXE

Masm386 или ML

Tasm

Wasm

Link (32 бита)

Tlink32

Wlink

RC

Brcc32

Wrc

Windows DLL

Masm386 или ML

Tasm

Wasm

Link (32 бита)

Tlink32

Wlink

 

Implib

Wlib

Трудно говорить о том, продукция какой из этих трёх компаний однозначно лучше. С точки зрения удобства компиляции Tasm лучше подходит для создания 16-битных программ для DOS, Wasm – для 32-битных программ для DOS, Masm – для Windows. С точки зрения удобства программирования развитость языковых средств растёт в ряду Wasm–Masm–Tasm. Все примеры программ в этом пособии построены так, что можно использовать любой из этих компиляторов.

Разумеется, существуют и другие компиляторы, например, бесплатно распространяемый в сети Интернет Nasm или условно бесплатный А86, но пользоваться ими проще, если вы уже знаете турбо- или макроассемблер. Бесплатно распространяемый GNU ассемблер, Gas (для программирования под Unix), вообще использует совершенно непохожий синтаксис.

Соседние файлы в папке СПО