ЧАСТЬ I. ПРОГРАММИРОВАНИЕ И КОДИРОВАНИЕ
Глава 1. СТРУКТУРНОЕ ПРОГРАММИРОВАНИЕ 1: ИНСТРУМЕНТАЛЬНЫЕ
СРЕДСТВА СТРУКТУРНОГО ПРОГРАММИРОВАНИЯ 1-1
Потребность в короткой записи операторов 1-1
Введение в МАКРОСЫ 1-2
Метки типа LOCAL 1-4
Директивы листинга макро 1-9
Макробиблиотеки 1-9
Макродиректива повторения - REPT 1-10
Более подробно о макродирективах повторения - IRP и IRPC 1-12
Резюме по использованию макро 1-13
Условное ассемблирование 1-13
Операторы отношений 1-19
Выводы 1-21
Условное ассемблирование и МАКРОСЫ 1-21
Определение типов операндов 1-22
Фазовые ошибки и некоторые особенности MASM 1-23
Сравнение строк. Пример 1-24
Синтаксический анализ аргументов макро 1-26
Предупреждения по использованию в MASM условного
ассемблирования и макросов 1-29
Структурированные операторы управления в языке Ассемблер 1-31
Как работают структурированные макросы 1-38
Приемы кодирования и некоторые предупреждения 1-40
Макро псевдо-CASE 1-43
Макросы данных 1-44
Макросы генерации программного кода 1-50
Условные макросы 1-51
Вложенные макросы 1-52
Несколько слов о возможностях макро 1-53
Макро, вызывающее подпрограммы 1-54
Применение директивы STRUC 1-56
Адресация к данным во множественных структурах 1-57
Структуры как параметры подпрограмм 1-59
Заключение 1-60
Глава 2. СТРУКТУРНОЕ ПРОГРАММИРОВАНИЕ 2: ПРОЕКТИРОВАНИЕ
И РЕАЛИЗАЦИЯ МОДУЛЬНЫХ ПРОГРАММ 2-1
Принципы модульного программирования 2-1
Опции проектирования 2-2
Функциональная декомпозиция 2-2
Минимизации количества передаваемых параметров 2-3
Минимизации количества необходимых вызовов 2-3
Правила модульного программирования 2-4
Справочная литература 2-5
Реализация модульных программ на языке Ассемблер 2-5
Определение параметра, аргумента, переменной константы 2-6
Параметры и модули 2-7
Опции передачи параметров 2-7
Передача через регистры 2-7
Передача данных через общую область памяти 2-8
Передача данных через память программы 2-9
Передача данных в стек 2-9
Краткое изложение опций передачи параметров 2-15
Передача параметров по значению или адресу 2-16
Передача по значению 2-16
Передача по адресу 2-17
Защита целостности передаваемых данных 2-17
Функции в сравнении с подпрограммами 2-18
Возврат значений в регистрах 2-18
Возврат значений в общей области 2-18
Возврат значений в стеке 2-19
Отчеты об исключительных ситуациях 2-19
Типы кодирования 2-20
Размещение программного кода в памяти 2-21
Относительное размещение 2-21
Адресация относительно текущего сегмента 2-21
Абсолютная адресация 2-22
Типы программного кода 2-22
Переместимый код 2-23
Отдельные области данных 2-24
Рекурсивные программы 2-25
Повторно-входимый код - необходимое условие
локальной памяти 2-25
Локальная память в стеке 2-26
Инструкции ENTER и LEAVE для локальной памяти стека 2-27
Краткое изложение размещения программного кода 2-31
Интерфейс с языками высокого уровня 2-32
Модель сегмента фирмы "Микрософт" 2-36
Назначение и использование локального ЗУ в памяти 2-37
Введение в управление памятью в MS-DOS 2-39
Распределение памяти из языков высокого уровня 2-42
Защита данных и управление областью действия данных 2-42
Локальная память в сравнении с глобальной памятью 2-43
Использование регистров сегмента 2-43
Управление размером доступных данных 2-44
Защита целостности данных 2-44
Заключение 2-45
Глава 3. УПРАВЛЕНИЕ ПРОГРАММАМИ И ПАМЯТЬЮ 3-1
Память MS-DOS 3-1
Формат физической памяти MS-DOS 3-1
Расширяемая и расширенная память 3-1
Использование памяти MS-DOS 3-3
Цепочки памяти MS-DOS 3-5
Блок операционной среды программы 3-12
Процессы MS-DOS 3-13
Контекст процесса MS-DOS 3-13
Сегмент программного префикса 3-13
Адреса завершения PSP 3-14
Таблица описателей файлов PSP 3-15
SHOWMEM и указатель адреса среды PSP 3-21
Функции для манипулирования PSP 3-22
Файлы процессов MS-DOS: .EXE в сравнении с .COM 3-23
Загрузка файла типа .COM 3-25
Формат программного файла типа .EXE 3-25
Блок начального распределения памяти .EXE 3-27
Загрузчик процесса .EXE MS-DOS 3-29
Перекрытия 3-30
Резидентные программы 3-31
Описание библиотеки исполняющей системы 3-31
Загрузка резидентных подпрограмм из командной строки 3-32
Доступ к резидентным подпрограммам через прерывания 3-34
Как определить, установлены ли резидентные программы? 3-41
Удаление резидентных подпрограмм из памяти 3-42
Функция 4Bh - загрузка и выполнение программ 3-44
Загрузка и выполнение программ через MS-DOS
(код 4Bh с AL=0) 3-48
Наследство и управление порожденной программой 3-49
Выполнение команд MS-DOS с функцией 4Bh 3-50
Важное предупреждение 3-50
Загрузка программного оверлея (перекрытия)
посредством MS-DOS (код функции 4Bh с AL = 3) 3-51
Доступ к программному оверлею из порождающей программы 3-52
Загрузка резидентных программ 3-55
Специальный случай: библиотеки исполняющей системы (RTL)
с неполным временем работы 3-55
Переключение контекста и переключение стека 3-57
Дополнительные соображения по переключению стеков 3-59
Введение в резидентную часть оперативной памяти 3-60
ROM-BIOS в сравнении с загружаемой BIOS 3-60
Прерывания в сравнении с системами с опросом 3-61
Внесение "заплат" в векторы прерываний 3-62
REMOVE - пример интегрированной программы 3-65
Заключение 3-72
Глава 4. ПРОГРАММЫ TSR (ЗАВЕРШИТЬ И ОСТАВИТЬ РЕЗИДЕНТНОЙ) 4-1
Обзор 4-1
Работа с аппаратурой PC 4-2
Аппаратные прерывания 4-3
Программные прерывания 4-4
Прерывания от таймера 4-4
Клавиатура 4-4
Аппаратура отображения 4-6
МDA и CGA 4-6
Занесение в память дисплея 4-7
Видео поддержка ROM-BIOS 4-8
Подмена прерывания 4-8
Создание горячего ключа 4-9
Подмена Int 16h 4-10
Опрос буфера клавиатуры прерыванием
от таймера Int 1Ch 4-11
Ловушка для Int 9 4-12
Управление состоянием клавиатуры 4-12
Альтернатива для перехвата Int 1Сh 4-14
Управление отображением на экране 4-15
Работа в среде DOS 4-17
Структуры данных ввода/вывода DOS 4-17
"Список списков" 4-17
Системная таблица файлов 4-18
Сегмент программного префикса (PSP) 4-20
Рабочая таблица файлов (JFT) 4-21
Диспетчер BIOS, Int 21h 4-23
Подпрограммы в/в символов 4-24
Глобальные переменные DOS 4-25
Обработка break 4-25
Обработка критической ошибки 4-26
Загрузка программы 4-27
Завершение программы 4-28
Загрузка и инициализация TSR 4-29
Проверка версии используемой DOS 4-30
Размещение резидентных копий TSR 4-30
Запись адреса сегмента программного префикса (PSP) 4-34
Запись адреса критической секции (INDOS)
и адреса критической ошибки 4-34
Захват векторов прерываний 4-35
Проверка типа дисплея 4-37
Освобождение операционной среды 4-37
Завершение программы 4-38
Реактивация, архитектура DOS и сервис 4-39
Определение безопасности повторной активации 4-39
Переключение стека и сохранение регистров 4-41
Организация "ловушек" break и критических ошибок 4-41
Обращение к глобальным переменным 4-43
Фоновая обработка с использованием Int 28h 4-43
Удаление из памяти программ TSR 4-48
Заключение 4-48
Глава 5. ПРОГРАММЫ РЕАЛЬНОГО ВРЕМЕНИ В СРЕДЕ MS-DOS 5-1
Обзор программ реального времени 5-1
Что такое реальное время? 5-1
Характеристики систем реального времени 5-2
Основные типы систем реального времени 5-3
Однонаправленные системы 5-3
Двухнаправленные стабильные системы 5-4
Двухнаправленные потенциально нестабильные системы 5-4
Типичные временные характеристики и решения
систем реального времени 5-5
Использование MS-DOS для приложений реального времени 5-6
Быстродействие MS-DOS 5-6
Тактовая частота MS-DOS 5-6
Передача данных в операционной системе MS-DOS 5-8
Передача данных методом прямого доступа к памяти (DMA) 5-14
Передача данных методом прерываний данных 5-14
Сравнение методов передачи данных 5-15
Средства ускоренной записи программ 5-16
Случаи, когда следует использовать операционную систему
MS DOS для прикладных программ реального времени 5-18
Проектирование систем реального времени в MS-DOS 5-19
Пример (упрощенной системы управления домашним
хозяйством) 5-20
Система упорядоченного опроса 5-24
Основной цикл с прерываниями 5-25
Циклические планировщики 5-27
Выбор метода построения системы 5-30
Многозадачность в MS-DOS 5-30
Условия существования мультизадачного режима в
персональном компьютере IBM PC/AT 5-31
Заключение 5-31
ЧАСТЬ II. УСТРОЙСТВА
Глава 6. УСТАНАВЛИВАЕМЫЕ ДРАЙВЕРЫ УСТРОЙСТВ 6-1
Зачем нужны драйверы устройств? 6-2
Когда использовать драйверы устройств? 6-3
MS-DOS - нереентерабельная система 6-3
Установка драйверов устройств 6-4
Файл CONFIG.SYS 6-5
Использование команды ASSIGN для замены
драйверов дисковых устройств 6-9
Типы драйверов устройств 6-9
Работа с драйвером в среде MS-DOS 6-10
Функции CP/M-стиля для работы с символьными устройствами 6-11
Работа с устройством с использованием блоков управления
файлами 6-11
Работа с устройствами на основе описателей файлов 6-11
Функция 44H - управление вводом/выводом для устройств