Содержание

Введение............................................................................................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. Расширение IAMMX...............................................................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. Директивы и операторы ассемблера.............юе

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. ИнтерфейсУСР!......................................................................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