Содержание

Содержание

Введение........................................................................................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"