Файл: О.А.Калашников. Ассемблер Это Просто. Учимся программировать.pdf
Добавлен: 16.02.2019
Просмотров: 29186
Скачиваний: 1689
Олег
Калашников
Санкт-Петербург
«БХВ-Петербург»
2011
УДК 681.3.068+800.92Ассемблер
ББК 32.973.26-018.1
К17
Калашников О. А.
К17
Ассемблер — это просто. Учимся программировать. — 2-е изд., перераб. и доп. —
СПб.: БХВ-Петербург, 2011. — 336 с.: ил. + CD-ROM
ISBN 978-5-9775-0591-8
Подробно и доходчиво объясняются все основные вопросы программирования на ассемб-
лере. Рассмотрены команды процессоров Intel, 16- и 32-разрядные регистры, основы работы
с сопроцессором, сегментация памяти в реальном масштабе времени, управление клавиатурой
и последовательным портом, работа с дисками и многое другое. Описано, как разработать без-
обидный нерезидентный вирус и антивирус против этого вируса, как написать файловую обо-
лочку (типа Norton Commander или FAR Manager) и как писать резидентные программы.
Каждая глава состоит из объяснения новой темы, описания алгоритмов программ, многочис-
ленных примеров и ответов на часто задаваемые вопросы. Во второе издание внесены исправле-
ния и добавлены новые примеры. Компакт-диск содержит исходные коды всех примеров, при-
веденных в книге, с подробными описаниями.
Для программистов
УДК 681.3.068+800.92Ассемблер
ББК 32.973.26-018.1
Группа подготовки издания:
Главный редактор
Екатерина Кондукова
Зам. главного редактора
Игорь Шишигин
Зав. редакцией
Григорий Добин
Редактор
Анна Кузьмина
Компьютерная верстка
Натальи Караваевой
Корректор
Виктория Пиотровская
Дизайн серии
Инны Тачиной
Оформление обложки
Елены Беляевой
Зав. производством
Николай Тверских
Лицензия ИД № 02429 от 24.07.00. Подписано в печать 31.01.11.
Формат 70 100
1
/
16
.
Печать офсетная. Усл. печ. л. 27,09.
Тираж 2000 экз. Заказ №
"БХВ-Петербург", 190005, Санкт-Петербург, Измайловский пр., 29.
Санитарно-эпидемиологическое заключение на продукцию
№ 77.99.60.953.Д.005770.05.09 от 26.05.2009 г. выдано Федеральной службой
по надзору в сфере защиты прав потребителей и благополучия человека.
Отпечатано с готовых диапозитивов
в ГУП "Типография "Наука"
199034, Санкт-Петербург, 9 линия, 12.
ISBN 978-5-9775-0591-8
© Калашников О. А., 2011
© Оформление, издательство "БХВ-Петербург", 2011
Оглавление
Предисловие ................................................................................................................................... 1
Несколько советов .......................................................................................................................... 2
Ответы на некоторые вопросы ...................................................................................................... 3
ЧАСТЬ I. ЗНАКОМЬТЕСЬ: АССЕМБЛЕР ............................................................................. 7
Глава 1. Первая программа ........................................................................................................ 9
1.1. Шестнадцатеричная система счисления ................................................................................ 9
1.2. Наша первая программа ........................................................................................................ 12
1.3. Введение в прерывания ......................................................................................................... 13
1.4. Резюме .................................................................................................................................... 16
Глава 2. Регистры процессора .................................................................................................. 17
2.1. Введение в регистры микропроцессоров 8086—80186 ...................................................... 17
2.1.1. Регистры данных ............................................................................................................. 17
2.1.2. Регистры-указатели ......................................................................................................... 18
2.1.3. Сегментные регистры ..................................................................................................... 18
2.2. Команды сложения и вычитания .......................................................................................... 19
2.2.1. Оператор add ................................................................................................................... 19
2.2.2. Оператор sub ................................................................................................................... 19
2.2.3. Оператор inc .................................................................................................................... 20
2.2.4. Оператор dec ................................................................................................................... 21
2.3. Программа для практики ....................................................................................................... 21
Глава 3. Сегментация памяти в реальном режиме .............................................................. 23
3.1. Двоичная система счисления. Бит и байт ............................................................................ 23
3.1.1. Как перевести двоичное число в десятичное ................................................................ 25
3.1.2. Как перевести десятичное число в двоичное ................................................................ 25
3.1.3. Как перевести шестнадцатеричное число в десятичное .............................................. 26
3.2. Сегментация памяти в реальном режиме ............................................................................. 26
3.2.1. Исследование программы в отладчике ......................................................................... 28
3.3. Наше первое прерывание ...................................................................................................... 32
3.3.1. Что такое ASCII? ............................................................................................................. 32
3.4. Программа для практики ....................................................................................................... 33
3.5. Подведем итоги ...................................................................................................................... 34
ЧАСТЬ II. УСЛОЖНЯЕМ ЗАДАЧИ ....................................................................................... 37
Глава 4. Создание циклов ......................................................................................................... 39
4.1. Еще немного о сегментации памяти..................................................................................... 39
4.1.2. Введение в адресацию .................................................................................................... 39
4.2. Создание циклов .................................................................................................................... 42
4.2.1. Пример высокоуровневой оптимизации ....................................................................... 43
4.3. Условный и безусловный переходы ..................................................................................... 44
4.3.1. Пример низкоуровневой оптимизации .......................................................................... 45
Оглавление
IV
4.4. Программа для практики ....................................................................................................... 45
4.4.1. Принцип работы программы.......................................................................................... 46
Глава 5. Подпрограммы ............................................................................................................ 47
5.1. Исправляем ошибку ............................................................................................................... 47
5.2. Подпрограммы ....................................................................................................................... 48
5.3. Программа для практики ....................................................................................................... 51
5.4. Несколько слов об отладчике AFD ....................................................................................... 53
Глава 6. Работа со стеком ......................................................................................................... 54
6.1. Стек ......................................................................................................................................... 54
6.2. Программа для практики ....................................................................................................... 61
6.2.1. Оператор nop ................................................................................................................... 61
6.2.2. Хитрая программа ........................................................................................................... 62
Глава 7. Операторы сравнения ................................................................................................ 64
7.1. Разбор программы из главы 6 ............................................................................................... 64
7.2. Оператор сравнения ............................................................................................................... 66
7.3. Понятия условного и безусловного переходов.................................................................... 69
7.4. Расширенные коды ASCII ..................................................................................................... 69
7.5. Программа для практики ....................................................................................................... 71
Глава 8. Учимся работать с файлами ..................................................................................... 74
8.1. Программа из прошлой главы .............................................................................................. 74
8.2. Основы работы с файлами .................................................................................................... 76
8.3. Программа для практики ....................................................................................................... 82
Глава 9. Работа с файлами ........................................................................................................ 84
9.1. Программа из прошлой главы .............................................................................................. 84
9.2. Программа для практики ....................................................................................................... 87
ЧАСТЬ III. ФАЙЛОВАЯ ОБОЛОЧКА, ВИРУС, РЕЗИДЕНТ ........................................... 91
Глава 10. Введение в вирусологию. Обработчик прерываний .......................................... 93
10.1. Программа из прошлой главы ............................................................................................ 93
10.2. Вирус ..................................................................................................................................... 97
10.2.1. Структура и принцип работы вируса .......................................................................... 98
Что должен делать вирус? .................................................................................................... 98
Какой объем памяти занимает вирус? ................................................................................. 98
Что может вирус? .................................................................................................................. 98
Какой вирус мы будем изучать? .......................................................................................... 98
Что будет делать вирус? ....................................................................................................... 98
Как оформляется вирус? ....................................................................................................... 98
10.3. Резидент ................................................................................................................................ 99
10.3.1. Подробней о прерываниях ........................................................................................... 99
10.4. Первый обработчик прерывания ...................................................................................... 101
10.4.1. Новые операторы и функции прерываний ................................................................ 104
10.5. Работа с флагами процессора ........................................................................................... 104
10.5.1. Как проверить работу программы? ........................................................................... 106
Глава 11. Управление видеоадаптером ................................................................................ 109
11.1. Оболочка ............................................................................................................................. 109
11.2. Управление видеокартой ................................................................................................... 112
Оглавление
V
Глава 12. Повторная загрузка резидента ............................................................................. 115
12.1. Резидент .............................................................................................................................. 115
12.2. Проверка на повторную загрузку резидента.................................................................... 115
12.3. Команды работы со строками ........................................................................................... 118
12.4. Использование xor и sub для быстрого обнуления регистров ........................................ 125
12.5. Задание для освоения информации из данной главы ...................................................... 126
Глава 13. Поиск и считывание файлов: вирус.................................................................... 127
13.1. Теория ................................................................................................................................. 127
13.2. Практика ............................................................................................................................. 128
13.3. Команда пересылки данных movs ..................................................................................... 132
13.4. Передача управления программе, расположенной в другом сегменте ......................... 134
13.5. Поиск файлов ..................................................................................................................... 135
Глава 14. Вывод окна в центре экрана ................................................................................. 137
14.1. Модели памяти ................................................................................................................... 137
14.1.1. Почему мы пишем только файлы типа COM?.......................................................... 137
14.1.2. Что такое модель памяти и какие модели бывают? ................................................. 137
14.2. Оболочка SuperShell .......................................................................................................... 139
14.2.1. Управление курсором ................................................................................................. 139
14.2.2. Операторы работы со стеком процессора 80286+ ................................................... 140
14.3. Процедура рисования рамки (окна) .................................................................................. 142
14.3.1. Прямое отображение в видеобуфер........................................................................... 142
14.3.2. Процедура Draw_frame ............................................................................................... 143
Что такое линейный адрес и зачем он нужен? ................................................................. 144
14.4. Практика ............................................................................................................................. 145
14.5. Новые операторы ............................................................................................................... 145
Глава 15. Обработка аппаратных прерываний .................................................................. 148
15.1. Теория ................................................................................................................................. 148
15.1.1. Сохранение предыдущего вектора прерывания ....................................................... 150
15.1.2. Способы передачи управления на прежний адрес прерывания .............................. 151
Первый способ .................................................................................................................... 151
Второй способ ..................................................................................................................... 151
15.2. Инструкции ret и retf .......................................................................................................... 152
15.2.1. Оператор ret ................................................................................................................. 152
15.2.2. Оператор retf................................................................................................................ 153
15.3. Механизм работы аппаратных прерываний. Оператор iret ............................................ 155
15.4. Практика ............................................................................................................................. 157
15.5. Логические команды процессора ..................................................................................... 159
15.5.1. Оператор or ................................................................................................................. 159
15.5.2. Оператор and ............................................................................................................... 160
15.5.3. Оператор xor ................................................................................................................ 161
15.6. Аппаратные прерывания нашего резидента .................................................................... 162
15.6.1. Аппаратное прерывание 05h ...................................................................................... 162
15.6.2. Аппаратное прерывание 09h ...................................................................................... 162
15.6.3. Аппаратное прерывание 1Ch ..................................................................................... 163
15.7. Резюме ................................................................................................................................ 164
Глава 16. Принципы работы отладчиков ............................................................................ 165
16.1. Как работает отладчик ....................................................................................................... 165
16.1.1. Прерывание 03h .......................................................................................................... 165