Пирогов В. Ю. Ассемблер для Windows. Изд. 2-е. СПб.: БХВ-Петербург, 2003. - 656 с.
Зубков С. В. Assembler для DOS, Windows и Unix. Изд. 2-е, испр. и доп. М.: ДМК-Пресс, 2003. - 608 с.
Несмотря на повсеместное распространение языков высокого уровня, в первую очередь Си и С++, ассемблер прочно занимает почетное место в умах и сердцах небольшой, но весьма квалифицированной группы программистов. В самом деле, лишь ассемблер позволяет решить на компьютере все без исключения задачи, которые только поддаются решению вообще (хотя писать на нем какую-нибудь, к примеру, бухгалтерскую программу - это некая разновидность мазохизма).
Обычно изучение ассемблера ограничивается программированием в среде DOS, что резко сужает возможности его использования на практике: как ни крути, а DOS давно уже мертва. Однако книга Владислава Пирогова посвящена исключительно применению ассемблера в среде Windows 9x/NT. Она состоит из четырех частей и четырех приложений. Сразу отметим, что она рассчитана на читателей, уже умеющих программировать на ассемблере в какой-нибудь другой системе, и прежде всего в DOS, поэтому в ней отсутствуют сведения для начинающих - что такое регистры, какими инструкциями располагает процессор и т. п.
Первая часть книги отведена основам 32-разрядного программирования в Windows: инструментальным средствам, способам обращения к функциям Windows API и тому подобным базовым вопросам.
Во второй части программирование под Windows рассматривается более подробно. Разбираются консольные приложения, использование редакторов и трансляторов ресурсов, работа с файлами. Затрагиваются также макросредства ассемблера.
В третьей части описываются более сложные моменты программирования в Windows: синхронизация событий, многозадачность, создание DLL, работа с локальной сетью, некоторые вопросы системного программирования, а также совместная работа с программами на ассемблере в языках высокого уровня.
Последняя, четвертая часть посвящена вопросам отладки, дизассемблированию программ, а также созданию VxD-драйверов для Windows 9x (в следующем издании книги автор обещает рассмотреть драйверы Windows NT).
Приложения содержат краткий справочник по наиболее употребительным сообщениям и функциям Windows API, справочник по архитектуре и системе команд микропроцессоров, включая защищенный режим, и описание структуры исполняемых модулей.
Книга Сергея Зубкова состоит из 11 глав и двух приложений. Поскольку она предназначена в том числе и для начинающих, значительный объем в ней занимают сведения, отсутствующие в книге В. Пирогова. Так, в первой главе даются материалы об ассемблере, системах счисления, методах кодировки символов и т. п., а во второй описываются регистры, способы адресации и основные инструкции процессора. Правда, здесь же рассматриваются плавающая арифметика, команды MMX, 3DNow! и SSE, то есть вещи, явно рассчитанные не на "чайников".
Третья глава посвящена директивам ассемблера. И снова вместе с самыми основными директивами приводятся сведения о макросредствах и условном ассемблировании - "продвинутых" возможностях, используемых довольно редко.
Две главы (4-я и 5-я) посвящены программированию под DOS, при этом наряду с элементарными вопросами разбирается, например, и программирование на уровне портов ввода-вывода, а также драйверы устройств для DOS.
Шестая глава отведена программированию в защищенном режиме под DOS, в частности с применением так называемых расширителей DOS, а седьмая - программированию под Windows. Хотя по набору тем эта глава сопоставима с книгой Вл. Пирогова, разница в объеме (47 страниц против 650) не позволяет рассмотреть их сколько-нибудь подробно.
В восьмой главе очень кратко (5 страниц против 33 у Пирогова) рассматриваются проблемы сопряжения программ на ассемблере с языками высокого уровня.
Последние три главы посвящены вопросам оптимизации, работе процессора в защищенном режиме и программированию в системе Unix.
Первая из рецензируемых книг, сконцентрированная в основном вокруг программирования под Windows, представляется куда более цельной и "удобоваримой", чем вторая. Сразу отказавшись от попыток "объять необъятное", В. Пирогов разбирает в ней большинство основных вопросов, возникающих при создании реальных приложений под Windows. Даже такая сложная задача, как создание драйверов, разобрана достаточно подробно, чтобы понять общую идею (хотя для полноценного и всестороннего освещения этой темы может понадобиться отдельная книга примерно такого же объема). Естественно, однако, что наличие этой книги не избавляет от необходимости приобретать дополнительную литературу или пользоваться электронными источниками информации: Windows API содержит слишком много функций, чтобы их толковое описание вместилось в книгу, служащую прежде всего учебным целям.
В противоположность В. Пирогову, автор второй книги попробовал охватить как темы для новичков, только приступающих к программированию на ассемблере, так и информацию для весьма квалифицированных программистов. По-моему, ничего хорошего из этого не вышло. В учебнике для начинающих необходимо последовательное изложение материала от простого к сложному, с многочисленными примерами и достаточно развернутыми комментариями, при этом особо трудные темы можно либо вообще не затрагивать, либо рассматривать в последних главах. Профессионалу объяснение прописных истин не только не требуется, но и мешает - текст загромождается совершенно ненужными с его точки зрения вещами, что рассеивает внимание и затрудняет поиск необходимой информации, а оставшегося объема для изложения действительно важных вопросов не хватает. Наконец, справочник должен вообще обходиться минимумом примеров и комментариев учебного характера, но он должен быть четко структурирован и содержать как можно более полный материал по теме - на то он и справочник. Следует признать, что книгу С. Зубкова рационально использовать только в качестве справочника по системе команд микропроцессоров семейства 80x86 (однако уместно заметить, что описание архитектуры этого семейства, доступное в виде трех PDF-файлов на сайте фирмы Intel (www.intel.com), занимает 1881 стр.). Правда, и по собственному опыту, и по отзывам других читателей предыдущих книг этого автора следует отметить, что он действительно тщательно проверяет свои примеры, благодаря чему достигается почти (если не абсолютно) 100-процентная выполняемость их на компьютерах читателей, - немаловажное качество для учебника, ведь самостоятельно найти ошибку в примере начинающему бывает зачастую очень непросто.
Серьезный недостаток обеих книг - отсутствие CD-ROM или хотя бы дискеты с текстами приведенных в них примеров. Для ассемблера это особенно ощутимо - объемы исходных текстов, мягко говоря, не вызывают энтузиазма для ручного их набора.
Подводя итоги, можно заключить, что книга В. Пирогова вполне подойдет уже хорошо знакомому с ассемблером читателю, желающему научиться создавать программы под Windows, творение же С. Зубкова может оказаться полезным человеку, овладевшему основными навыками программирования для DOS и желающему углубить свои знания прежде всего в этой области, а также в ручном программировании защищенного режима. Для начинающих программистов обе эти книги малоподходящи.