Файл: О.А.Калашников. Ассемблер Это Просто. Учимся программировать.pdf
Добавлен: 16.02.2019
Просмотров: 29190
Скачиваний: 1689
Предисловие
3
Ответы на некоторые вопросы
1. Почему важно изучить работу процессора в реальном режиме (в MS-DOS)
и только после этого переходить к программированию в защищенном ре-
жиме (в Windows)?
Во-первых, для ассемблера не существует различий между операционными сис-
темами. Ассемблер — это язык самого процессора. Но он может использовать
готовые подпрограммы операционной системы, на которой запущена программа.
Во-вторых, функции WinAPI, о которых пойдет речь в данной книге, — это
прототип прерываний MS-DOS. Но понять принцип работы WinAPI в разы
проще на примерах прерываний, которые до сих пор поддерживаются Win-
dows. Как только вы поймете данный принцип, вы без труда перейдете на ис-
пользование WinAPI.
В-третьих, учиться основам языка, создавая компактные COM-файлы, которые ис-
пользовались в MS-DOS и до сих пор поддерживаются Windows, гораздо проще.
2. Под управлением каких операционных систем будут работать файлы-
приложения?
Компания Microsoft придерживается политики поддержки работоспособности
программ, написанных в более ранних версиях собственных операционных сис-
тем. Если программа разработана, например, для MS-DOS 3.30, то она будет вы-
полняться и в более поздних версиях этой системы, если, конечно, в самой про-
грамме не установлены ограничения, или она не привязана в работе именно
к той версии, для которой написана.
Появление на рынке ОС Windows 95/98/2000/XP/Vista продолжило эту традицию,
оставив возможность загружать и выполнять программы, написанные под опера-
ционную систему MS-DOS, и даже запуск DOS-приложений, требующих загру-
женной "чистой" дисковой системы, к которым относятся, как правило, сложные
графические игры, работающие с расширителями, например, DOS4GW.
Тем не менее, большинство программ прекрасно запускается напрямую из Про-
водника (Windows Explorer), не требуя перезагрузки системы. Например, Norton
Commander, Far Manager, а также необходимые для изучения настоящего курса
средства разработки и отладки, перечисленные далее.
В современных операционных системах компании Microsoft (Windows) есть
возможность работать в эмуляторе MS-DOS: Пуск | Выполнить |
cmd
| <Enter>.
В открывшемся окне и можно запускать все файлы из данной книги, не обращая
внимания на то, что наши COM-программы используют прерывания MS-DOS.
Все примеры протестированы на работоспособность под управлением следующих
операционных систем компании Microsoft на IBM-совместимых компьютерах:
Windows 2000 Pro и Server;
Windows XP Home Edition и Pro;
Windows Vista/Server 2008/7.
Предисловие
4
В
Н И МА Н И Е
!
На ассемблере мы будем напрямую взаимодействовать с аппаратурой, что не очень
приветствуется Windows. Поэтому некоторые программы из учебного курса могут
работать некорректно. Что делать в таких случаях? Все просто: отладчик вам поможет!
3. Какое программное обеспечение нужно для того, чтобы создать программу
на ассемблере, и где его можно достать?
Прежде всего, это текстовый редактор, как отдельный, например, Akelpad, так
и встроенный в какую-нибудь оболочку (например, Far Manager). В принципе,
сгодится даже обычный Блокнот, т. к. ассемблерный код — это обычные тексто-
вые файлы. Мы рекомендуем пользоваться встроенным редактором Far Manager
(<F4>). Думаем, что не следует заострять внимание на том, как пользоваться
данными программами, тем более, что это выходит за рамки настоящей книги.
Потребуется ассемблер — программа, которая переводит ассемблерные
инструкции в машинный код. Это может быть MASM.EXE
®
(ML.EXE)
компании Microsoft, TASM.EXE
®
компании Borland, FASM
®
или другие.
Для программирования на ассемблере под Windows потребуется MASM32
®
.
Скачать все это можно бесплатно на сайте автора книги —
http://Kalashnikoff.ru. В принципе, большой разницы для наших приме-
ров это пока не имеет, за исключением передачи параметров в командной
строке при ассемблировании. Мы будем использовать MASM 6.11 —
Macro Assembler
®
от Microsoft версии 6.11 для программ в части I книги
и MASM32 — для программ в части II, что и вам советую. Если в про-
цессе ассемблирования возникают ошибки, то обращайтесь к приложе-
нию 2 или к нашим экспертам на http://RFpro.ru.
Настоятельно рекомендую иметь отладчик (AFD
®
, SoftIce
®
, CodeView
®
). Он
необходим для отладки программы и в целом для демонстрации ее работы.
Предпочтительно использовать AFD или CodeView для начинающих и SoftIce
для уже имеющих опыт программирования.
В будущем вам, безусловно, понадобится дизассемблер, который необходим
для перевода машинного кода на язык ассемблера. Автор предпочитает IDA
®
,
как один из самых мощных и удобных в пользовании.
Можно также скачать минимальный, но достаточный для изучения настоящего
курса набор программного обеспечения по адресу: http://www.Kalashnikoff.ru.
4. Как построены главы книги?
Ответы на часто задаваемые вопросы.
Заметки, дополнительные примеры и алгоритмы.
Объяснение новой темы (теория).
Примеры программ на ассемблере (практика).
Вы сможете самостоятельно написать простую программу уже после прочтения
главы 1. Надеюсь, что изучать язык будет интересней, если мы сразу перейдем
к практической части, обсуждая параллельно теорию. Попутно отмечу, что дан-
ная книга рассчитана, в первую очередь, на людей, которые ни разу не писали про-
Предисловие
5
граммы ни на ассемблере, ни на каком другом языке программирования. Конечно,
если вы уже знакомы с Basic, Pascal, C или каким-либо иным языком, то это только
на пользу вам. Тем не менее, все новые термины будут подробно объясняться.
Также следует отметить, что для полного изучения курса необходимы мини-
мальные пользовательские знания операционной системы MS-DOS, т. к. ассемб-
лирование программ из данной книги следует выполнять именно в консоли
(Пуск | Выполнить |
cmd
). Однако вы также можете работать в специальных фай-
ловых оболочках типа Far Manager, Windows Commander, Total Commander и т. п.
5. Какие темы будут рассмотрены в книге?
Двоичная и шестнадцатеричная системы счисления.
Основные команды процессоров Intel 8086, 80286, 80386, 80486.
16- и 32-разрядные регистры.
Основы работы с сопроцессором.
Сегментация памяти в реальном режиме.
Расширенная память (XMS-память).
Прямая работа с видеоадаптером.
Режимы CGA, EGA, VGA (кратко).
Управление клавиатурой на уровне прерываний.
Основные функции BIOS (ПЗУ) и MS-DOS.
Работа с дисками, каталогами и файлами.
Управление последовательным портом.
Высокоуровневая оптимизация программ.
Структура и особенности программирования в MS-DOS и Windows.
Не обойдем стороной и технический английский язык, т. к. операторы ас-
семблера образованы от английских слов.
6. Кому можно задать вопросы, касаемые материала из данной книги?
На все ваши вопросы по ассемблеру, а также по многим другим темам, ответят
наши эксперты на портале профессионалов http://RFpro.ru. Стоит отметить,
что на упомянутом портале вы сможете:
установить контакт с начинающими программистами и профессионалами на
ассемблере;
пообщаться в реальном времени с автором данной книги;
принять участие в реальных встречах, чтобы лично познакомиться с профес-
сионалами и экспертами.
Зарегистрируйтесь прямо сейчас на портале http://RFpro.ru и вступайте в наш
клуб профессионалов!
В главе 1 мы рассмотрим шестнадцатеричную систему счисления и пример про-
стейшей программы на ассемблере, традиционно называемой "Hello, world!".
Приятного вам изучения!
Ч А С Т Ь I
Знакомьтесь: ассемблер
Глава 1
Первая программа
1.1. Шестнадцатеричная система счисления
Для написания программ на ассемблере необходимо разобраться с шестнад-
цатеричной системой счисления. Ничего сложного в ней нет. Мы используем в жиз-
ни десятичную систему. Не сомневаемся, что вы с ней знакомы, поэтому попробу-
ем объяснить шестнадцатеричную систему, проводя аналогию с десятичной.
Итак, в десятичной системе, если мы к какому-нибудь числу справа добавим
ноль, то это число увеличится в 10 раз. Например:
1 10 = 10
10 10 = 100
100 10 = 1000
и т. д.
В этой системе мы используем цифры от 0 до 9, т. е. десять разных цифр (собст-
венно, поэтому она и называется десятичной).
В шестнадцатеричной системе мы используем, соответственно, шестнадцать
"цифр". Слово "цифр" специально написано в кавычках, т. к. в этой системе ис-
пользуются не только цифры. От 0 до 9 мы считаем так же, как и в десятичной,
а вот дальше таким образом: A, B, C, D, E, F. Число F, как не трудно посчитать, бу-
дет равно 15 в десятичной системе (табл. 1.1).
Таблица 1.1. Десятичная и шестнадцатеричная системы
Десятичное
число
Шестнадцатеричное
число
Десятичное
число
Шестнадцатеричное
число
0
0
26
1A
1
1
27
1B
2
2
28
1C
3
3
29
1D
4
4
30
1E
...
...
...
...
8
8
158
9E