Файл: О.А.Калашников. Ассемблер Это Просто. Учимся программировать.pdf

ВУЗ: Не указан

Категория: Книга

Дисциплина: Программирование

Добавлен: 16.02.2019

Просмотров: 29186

Скачиваний: 1689

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

 

 

Олег

 

Калашников  

 
 
 
 
 
 
 

 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Санкт-Петербург 

«БХВ-Петербург» 

2011 


background image

 

 

УДК  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 

 


background image

 

 

Оглавление 

 

Предисловие ................................................................................................................................... 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 


background image

Оглавление 

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 


background image

Оглавление 

Глава 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