1.1. Что нужно для работы с ассемблером

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

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

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

 

 

 

Microsoft

Borland

Watcom

DOS,

masm или ml,

tasm

v/asm

16 6m-

link (16 бит)

tlink

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

tasm

wasm

link (32 бита)

tlink32

wlink

rc

brcc32

wrc

Windows DLL

masm386 или ml link (32 бита)

tasm

tlink32

implib

wasm wlink wlib

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

Во всех программах встречаются ошибки. Если вы собираетесь не только упражняться на примерах из книги, но и написать что-то свое, то вам рано или поздно обязательно потребуется отладчик. Кроме поиска ошибок отладчики иног­да применяют и для того, чтобы исследовать работу существующих программ. Бе­зусловно, самый мощный отладчик на сегодняшний день - SoftlCE от 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, lview, hexit) имеют встроенный дизассемблер, так что можно, например, открыв в таком ре­дакторе свою программу, посмотреть, как скомпилировался тот или иной участок программы, поправить какую-нибудь команду ассемблера или изменить значения констант и тут же, без перекомпиляции, запустить программу, чтобы посмотреть

на результат изменений.