Assembler - язык неограниченных возможностей

         

Что потребуется для работы с ассемблером


Прежде всего вам потребуется ассемблер. Здесь самое время сказать, что на самом деле язык программирования, которым мы собираемся заниматься, называется «язык ассемблера» (assembly language). Ассемблер — это программа, которая переводит текст с языка, понятного человеку, в язык, понятный процессору, то есть говорят, что она переводит язык ассемблера в машинный код. Однако сначала в повседневной речи, а затем и в литературе слово «ассемблер» стало также и названием самого языка программирования. Понятно, что, когда говорят «программа на ассемблере», имеют в виду язык, а когда говорят «макроассемблер версии 6.13», имеют в виду программу. Вместе с ассемблером обязательно должна быть еще одна программа — компоновщик (linker), которая и создает исполнимые файлы из одного или нескольких объектных модулей, полученных после запуска ассемблера. Помимо этого для разных целей могут потребоваться дополнительные вспомогательные программы — компиляторы ресурсов, расширители DOS и тому подобное (см. табл. 1).

Microsoft Borland Watcom
DOS, 16 бит masm или ml,
link (16 бит)
tasm
tlink
wasm
wlink
DOS, 32 бита masm или ml,
link (32 бита) и dosx
link (16 бит) и dos32
tasm
tlink
wdosx или dos32
wasm
wlink
dos4gw, pmodew,
zrdx или wdosx
Windows EXE masm386 или ml,
link (32 бита)
rc
tasm
tlink32
brcc32
wasm
wlink
wrc
Windows DLL masm386 или ml,
link (32 бита)
tasm
tlink32
implib
wasm
wlink
wlib

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

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


Разумеется, существуют и другие компиляторы, например бесплатно распространяемый в сети Internet NASM или условно бесплатный А86, но пользоваться ими проще, если вы уже знаете турбо- или макроассемблер. Бесплатно распространяемый GNU ассемблер, gas, вообще использует совершенно непохожий синтаксис, который будет рассмотрен в главе 11, рассказывающей о программировании для UNIX.

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

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

И наконец, последняя необязательная, но крайне полезная утилита — шестнадцатеричный редактор. Многие такие редакторы (hiew, proview, Iview, hexit) тоже имеют встроенный дизассемблер, так что можно, например, открыв в таком редакторе свою программу, посмотреть, как скомпилировался тот или иной участок программы, поправить какую-нибудь команду ассемблера или изменить значения констант и тут же, без перекомпиляции, запустить программу, чтобы посмотреть на результат изменений.

Содержание раздела