Содержание
Введение........................................................................................11
Глава 1. Предварительные сведения ..................................13
1.1. Что нужно для работы с ассемблером...............................13
1.2. Представление данных в компьютерах..............................14
1.2.1. Двоичная система счисления ...................................................14
1.2.2. Биты, байты и слова.................................................................15
1.2.3. Шестнадцатеричная система счисления .................................. 16
1.2.4. Числа со знаком....................................................................... 17
1.2.5. Логические операции ...............................................................18
1.2.6. Коды символов ....................................................................... 18
1.2.7. Организация памяти ................................................................ 19
Глава 2. Процессоры Intel в реальном режиме...............20
2.1. Регистры процессора.............................................................20
2.1.1. Регистры общего назначения ...................................................20
2.1.2. Сегментные регистры ..............................................................22
2.1.3. Стек......................................................................................... 22
2.1.4. Регистр флагов........................................................................23
2.2. Способы адресации................................................................ 24
2.2.1. Регистровая адресация............................................................24
2.2.2. Непосредственная адресация ..................................................25
2.2.3. Прямая адресация..................................................................25
2.2.4. Косвенная адресация...............................................................25
2.2.5. Адресация по базе со сдвигом .................................................26
2.2.6. Косвенная адресация с масштабированием ............................26
2.2.7. Адресация по базе с индексированием....................................27
2.2.8. Адресация по базе с индексированием
и масштабированием...............................................................27
2.3. Основные непривилегированные команды.......................28
2.3.1. Пересылка данных ..................................................................28
2.3.2. Двоичная арифметика..............................................................34
2.3.3. Десятичная арифметика ..........................................................38
2.3.4. Логические операции.............................................................41
2.3.5. Сдвиговые операции................................................................43
2.3.6. Операции над битами и байтами..............................................45
2.3.7. Команды передачи управления................................................47
2.3.8. Строковые операции................................................................ 54
2.3.9. Управление флагами ................................................................57
2.3.10. Загрузка сегментных регистров............................................. 59
2.3.11. Другие команды.....................................................................59
2.4. Числа с плавающей запятой............................................. 63
2.4.1. Типы данных FPU ...................................................................... 63
2.4.2. Регистры FPU...........................................................................65
2.4.3. Исключения FPU......................................................................67
2.4.4. Команды пересылки данных FPU ..............................................68
2.4.5. Базовая арифметика FPU........................................................70
2.4.6. Команды сравнения FPU.........................................................74
2.4.7. Трансцендентные операции FPU.............................................. 76
2.4.8. Константы FPU.........................................................................78
2.4.9. Команды управления FPU .........................................................78
2.5. Расширение IA ММХ................................................................82
2.5.1. Регистры ММХ .......................................................................82
2.5.2. Типы данных ММХ....................................................................83
2.5.3. Команды пересылки данных ММХ...........................................83
2.5.4. Команды преобразования типов ММХ.....................................84
2.5.5. Арифметические операции ММХ.............................................85
2.5.6. Команды сравнения ММХ......................................................... 88
2.5.7. Логические операции ММХ......................................................88
2.5.8. Сдвиговые операции ММХ.......................................................89
2.5.9. Команды управления состоянием ММХ....................................90
2.5.10. Расширение AMD 3D...............................................................90
2.6. Расширение SSE......................................................................91
2.6.1. Регистры SSE........................................................................... 91
2.6.2. Типы данных SSE...................................................................... 92
2.6.3. Команды SSE...........................................................................92
2.6.4. Определение поддержки SSE................................................ 105
2.6.5. Исключения............................................................................ 105
Глава 3. Директивы и операторы ассемблера..............106
3.1. Структура программы.........................................................106
3.2. Директивы распределения памяти .............................108
3.2.1. Псевдокоманды определения переменных............................ 108
3.2.2. Структуры.............................................................................. 109
3.3. Организация программы.....................................................110
3.3.1. Сегменты............................................................................... 110
3.3.2. Модели памяти и упрощенные директивы
определения сегментов ......................................................... 112
3.3.3. Порядок загрузки сегментов .................................................. 114
3.3.4. Процедуры............................................................................. 115
3.3.5. Конец программы.................................................................. 115
3.3.6. Директивы задания набора допустимых команд .................... 116
3.3.7. Директивы управления программным счетчиком ................... 116
3.3.8. Глобальные объявления......................................................... 117
3.3.9. Условное ассемблирование.................................................. 118
3.4. Выражения ..............................................................................120
3.5. Макроопределения ...............................................................121
3.5.1. Блоки повторений .................................................................. 123
3.5.2. Макрооператоры.................................................................... 124
3.5.3. Другие директивы, используемые в макроопределениях ....... 124
3.6. Другие директивы..................................................................125
3.6.1. Управление файлами ............................................................. 125
3.6.2. Управление листингом ........................................................... 125
3.6.3. Комментарии......................................................................... 126
Глава 4. Основы программирования для MS DOS........127
4.1. Программа типа COM ...........................................................128
4.2. Программа типа EXE............................................................130
4.3. Вывод на экран в текстовом режиме...............................131
4.3.1. Средства DOS........................................................................ 131
4.3.2. Средства BIOS....................................................................... 134
4.3.3. Прямая работа с видеопамятью ............................................. 139
4.4. Ввод с клавиатуры.................................................................140
4.4.1. Средства DOS........................................................................ 140
4.4.2. Средства BIOS....................................................................... 148
4.5. Графические видеорежимы................................................151
4.5.1. Работа с VGA-режимами....................................................... 151
4.5.2. Работа с SVGA-режимами ...................................................... 155
4.6. Работа с мышью....................................................................166
4.7. Другие устройства................................................................171
4.7.1. Системный таймер................................................................. 171
4.7.2. Последовательный порт......................................................... 178
4.7.3. Параллельный порт................................................................ 181
4.8. Работа с файлами..................................................................182
4.8.1. Создание и открытие файлов................................................ 183
4.8.2. Чтение и запись в файл.......................................................... 186
4.8.3. Закрытие и удаление файла .................................................... 187
4.8.4. Поиск файлов......................................................................... 188
4.8.5. Управление файловой системой............................................ 192
4.9. Управление памятью.............................................................193
4.9.1. Обычная память..................................................................... 193
4.9.2. Область памяти UMB.............................................................. 195
4.9.3. Область памяти НМА.............................................................. 195
4.9.4. Интерфейс EMS..................................................................... 196
4.9.5. Интерфейс XMS.................................................................... 197
4.10. Загрузка и выполнение программ..................................202
4.11. Командные параметры и переменные среды ..............208
Глава 5. Более сложные приемы программирования .. 212
5.1. Управляющие структуры......................................................212
5.1.1. Структуры IF... THEN... ELSE ...................................................212
5.1.2. Структуры CASE....................................................................213
5.1.3. Конечные автоматы ...............................................................214
5.1.4. Циклы.....................................................................................215
5.2. Процедуры и функции.......................................................... 216
5.2.1. Передача параметров............................................................216
5.2.2. Локальные переменные......................................................... 221
5.3. Вложенные процедуры.........................................................222
5.3.1. Вложенные процедуры со статическими ссылками................222
5.3.2. Вложенные процедуры с дисплеями......................................223
5.4. Целочисленная арифметика повышенной точности ..... 224
5.4.1. Сложение и вычитание ...........................................................225
5.4.2. Сравнение.............................................................................225
5.4.3. Умножение .............................................................................226
5.4.4. Деление.................................................................................227
5.5. Вычисления с фиксированной запятой............................228
5.5.1. Сложение и вычитание ..........................................................228
5.5.2. Умножение.............................................................................228
5.5.3. Деление................................................................................. 229
5.5.4. Трансцендентные функции.................................................... 229
5.6. Вычисления с плавающей запятой...................................233
5.7. Популярные алгоритмы........................................................238
5.7.1. Генераторы случайных чисел................................................238
5.7.2. Сортировки ............................................................................242
5.8. Перехват прерываний...........................................................245
5.8.1. Обработчики прерываний...................................................... 246
5.8.2. Прерывания от внешних устройств ........................................249
5.8.3. Повторная входимость ...........................................................253
5.9. Резидентные программы.....................................................256
5.9.1. Пассивная резидентная программа .......................................256
5.9.2. Мультиплексорное прерывание.............................................262
5.9.3. Выгрузка резидентной программы из памяти ........................276
5.9.4. Полурезидентные программы ................................................292
5.9.5. Взаимодействие между процессами ...................................... 297
5.10. Программирование на уровне портов ввода-вывода ....305
5.10.1. Клавиатура ...........................................................................305
5.10.2. Последовательный порт.......................................................309
5.10.3. Параллельный порт ..............................................................315
5.10.4. Видеоадаптеры VGA.............................................................316
5.10.5. Таймер ................................................................................. 331
5.10.6. Динамик...............................................................................335
5.10.7. Часы реального времени и CMOS-память ............................336
5.10.8. Звуковые платы ....................................................................339
5.10.9. Контроллер DMA ..................................................................359
5.10.10. Контроллер прерываний.....................................................366
5.10.11. Джойстик........................................................................... 371
5.11. Драйверы устройств в DOS...............................................374
5.11.1. Символьные устройства....................................................... 375
5.11.2. Блочные устройства............................................................. 384
Глава 6. Программирование в защищенном режиме ... 388
6.1. Адресация в защищенном режиме....................................388
6.2. Интерфейс VCPI .....................................................................391
6.3. Интерфейс DPMI....................................................................394
6.3.1. Переключение в защищенный режим.....................................394
6.3.2. Функции DPMI управления дескрипторами ............................395
6.3.3. Передача управления между режимами в DPMI .....................396
6.3.4. Обработчики прерываний ...................................................398
6.3.5. Пример программы ................................................................399
6.4. Расширители DOS..............................................................403
6.4.1. Способы объединения программы с расширителем .............. 403
6.4.2. Управление памятью в DPMI...................................................405
6.4.3. Вывод на экран через линейный кадровый буфер ..................406
Глава 7. Программирование для Windows 95/NT.........413
7.1. Первая программа................................................................413
7.2. Консольные приложения......................................................416
7.3. Графические приложения....................................................421
7.3.1. Окно типа MessageBox...........................................................421
7.3.2. Окна.......................................................................................422
7.3.3. Меню...................................................................................... 427
7.3.4. Диалоги.................................................................................431
7.3.5. Полноценное приложение......................................................436
7.4. Динамические библиотеки.................................................451
7.5. Драйверы устройств............................................................ 457
Глава 8. Ассемблер и языки высокого уровня..............460
8.1. Передача параметров..........................................................460
8.1.1. Конвенция Pascal ...................................................................460
8.1.2. Конвенция С............................................................................461
8.1.3. Смешанные конвенции .........................................................463
8.2. Искажение имен....................................................................463
8.3. Встроенный ассемблер........................................................463
8.3.1. Ассемблер, встроенный в Pascal.............................................464
8.3.2. Ассемблер, встроенный в С....................................................464
Глава 9. Оптимизация .............................................................465
9.1. Высокоуровневая оптимизация .........................................465
9.2. Оптимизация на среднем уровне...................................... 465
9.2.1. Вычисление констант вне цикла .............................................466
9.2.2. Перенос проверки условия в конец цикла ..............................466
9.2.3. Выполнение цикла задом наперед.........................................466
9.2.4. Разворачивание циклов........................................................467
9.3. Низкоуровневая оптимизация............................................468
9.3.1. Общие принципы низкоуровневой оптимизации....................468
9.3.2. Особенности архитектуры процессоров Pentium
и Pentium MMX.......................................................................471
9.3.3. Особенности архитектуры процессоров Pentium Pro
и Pentium II .............................................................................472
Глава 10. Процессоры Intel в защищенном режиме ... 476
10.1. Регистры................................................................................476
10.1.1. Системные флаги .................................................................476
10.1.2. Регистры управления памятью .............................................477
10.1.3. Регистры управления процессором .....................................478
10.1.4. Отладочные регистры ..........................................................480
10.1.5. Машинно-специфичные регистры ........................................481
10.2. Системные и привилегированные команды .................482
10.3. Вход и выход из защищенного режима..........................488
10.4. Сегментная адресация.......................................................490
10.4.1. Модель памяти в защищенном режиме ................................490
10.4.2. Селектор ..............................................................................491
10.4.3. Дескрипторы ........................................................................491
10.4.4. Пример программы ..............................................................493
10.4.5. Нереальный режим ..............................................................497
10.5. Обработка прерываний и исключений........................... 499
10.6. Страничная адресация.......................................................509
10.7. Механизм защиты ...............................................................516
10.7.1. Проверка лимитов ................................................................516
10.7.2. Проверка типа сегмента .......................................................517
10.7.3. Проверка привилегий ........................................................... 517
10.7.4. Выполнение привилегированных команд .............................518
10.7.5. Защита на уровне страниц ...................................................519
10.8. Управление задачами.........................................................519
10.8.1. Сегмент состояния задачи...................................................519
10.8.2. Переключение задач ............................................................521
10.9. Режим виртуального 8086 .................................................527
10.9.1. Прерывания в V86................................................................ 527
10.9.2. Ввод-вывод в V86 .................................................................528
Глава 11. Программирование на ассемблере в среде UNIX........................529
11.1. Синтаксис AT&T....................................................................530
11.1.1. Основные правила...............................................................530
11.1.2. Запись команд .....................................................................531
11.1.3. Адресация ............................................................................532
11.2. Операторы ассемблера.....................................................533
11.2.1. Префиксные, или унарные, операторы ................................. 533
11.2.2. Инфиксные, или бинарные, операторы ................................ 533
11.3. Директивы ассемблера......................................................534
11.3.1. Директивы определения данных.........................................534
11.3.2. Директивы управления символами ..................................535
11.3.3. Директивы определения секций.........................................535
11.3.4. Директивы управления разрядностью..................................536
11.3.5. Директивы управления программным указателем...............536
11.3.6. Директивы управления листингом........................................536
11.3.7. Директивы управления ассемблированием.........................537
11.3.8. Блоки повторения ........................................................... 537
11.3.9. Макроопределения............................................................ 538
11.4. Программирование с использованием libc.................. 538
11.5. Программирование без использования libc................. 540
11.6. Переносимая программа для UNIX.................................543
Заключение............................................................................558
Приложение 1. Таблицы символов.....................................559
1. Символы ASCII ........................................................................ 559
2. Управляющие символы ASCII................................................560
3. Кодировки второй половины ASCII.......................................561
4. Коды символов расширенного ASCII...................................564
5. Скан-коды клавиатуры............................................................. 565
Приложение 2. Команды Intel 80x86 ............................... 567
1. Общая информация о кодах команд...................................567
1.1. Общий формат команды процессора Intel.................................567
1.2. Значения полей кода команды ..................................................567
1.3. Значения поля ModRM ..............................................................568
1.4. Значения поля SIB.....................................................................569
2. Общая информация о скоростях выполнения...................570
3. Префиксы...................................................................................571
4. Команды процессоров Intel 8088 - Pentium III....................572
Используемые сокращения...............................................595
Глоссарий.............................................................................599
Алфавитный указатель......................................... 602
С.В. Зубков "Assembler для DOS, Windows и UNIX"