А.И.Маргулев. Ассемблер для школьника. - ШО №1, 2005

Об авторе

 

Опубликовано в журнале "Школьное обозрение" № 1, 2005, с. 58

 

 Андрей Маргулев

Ассемблер для школьника

Крупник А.Б. Ассемблер для школьника

Крупник А.Б. Ассемблер для школьника. – СПб.: Питер, 2004


Лично для меня Ассемблер был первым изучаемым языком программирования - на 1 курсе института (30 лет назад, когда и информатики-то, тем более школьной, еще не существовало). Поэтому могу засвидетельствовать: автор не лукавит, говоря, что "ассемблер, вопреки ожиданиям, совсем не сложен и выучить его гораздо проще, чем С++" и что "это обширный, со множеством инструкций, но прямолинейный и однозначный язык" - с. 5. Другое дело - понять, можно ли (и в каких случаях целесообразно) "встроить" этот язык в школьную программу?

Собственно, претензий на это книга "Изучаем Ассемблер" и не содержит, причем для характеристики самого языка аннотация использует довольно спорные "аргументы": "Это любимый язык хакеров; его знание позволяет менять по своему усмотрению программы, имея только исполнимый файл без исходных текстов". Вообще говоря, у термина "хакер" есть несколько различных значений как положительного, так и отрицательного смысла. И "умение менять по своему усмотрению" исполняемые файлы указывает, скорее, на опасность предмета, чем на его полезность. Хорошо, что хоть в последней главе книги сказано, наконец, главное:

"Прежде всего, без знания ассемблера невозможно понять, как работает операционная система, как она делит ресурсы между программами и как хранит данные в своих служебных областях. Ассемблер необходим при создании программ, взаимодействующих с аппаратурой. Это могут быть драйверы устройств, работающих с Windows или DOS. Далее, ассемблер нужен программисту, чтобы понять, почему программа работает неправильно. Современные компиляторы очень хороши, но и они ошибаются. И если программист не понимает, в чем дело, он велит компилятору дать "отчет о проделанной работе" - показать листинг программы на ассемблере. Наконец, ассемблер необходим там, где от программы требуется большая скорость. Вычислительная мощь современных компьютеров чудовищно велика и стремительно растет. Но сложность решаемых задач растет еще быстрее. Когда обнаруживается, что программа на языке высокого уровня работает правильно, но слишком долго, программист прежде всего пытается найти узкие места в программе, для чего она подвергается профилированию: специальная программа следит, сколько времени потрачено на определенные участки программы… Как правило, профилирование выявляет узкие места программы, на которые тратится большая часть времени процессора. Вот эти места и следует переписать на ассемблере, потому что квалифицированный программист делает это лучше, чем компилятор языка высокого уровня" - с. 242-243.

Итак, в первых двух главах рассматриваются азы командного управления процессором (это, конечно, линейка Intel 80386) с использованием связки оболочка FAR - программа-ассемблер MASM. К сожалению, почти не приведено никаких сведений о логической структуре процессора и не описан принцип его работы, что сильно затруднит восприятие материала. Глава 3 посвящена устройству памяти и адресации, а также организации связи программы с периферией на основе функций Windows API. В главах 4-5 рассмотрены программные реализации алгоритмических структур и структур данных, в главе 6 - работа с файлами, в главе 7 - программирование математического сопроцессора. В главе 8 мы переходим к изучению программирования для DOS, откуда - естественный переход к таким "загадочным" деталям работы с памятью, как реальный и защищенный режимы, сегментация и межсегментные переходы. Наконец, в главе 10 рассказывается о макросах и ряде других "полезностей", а в главе 11 - о том, как с помощью ассемблера улучшать программу, написанную на С.

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

Имеет ли смысл (и поможет ли этому данная книга) вводить ассемблер в школьную программу (подразумевается, конечно же, профильная информатика) - как изучаемый язык программирования, либо для поддержки, например, темы "Программная и аппаратная организация компьютеров и компьютерных систем"? Только в том случае, если учитель сам имеет соответствующую подготовку и опыт практической работы на этом языке. Что, разумеется, встречается очень нечасто.