
- •140010, Г. Люберцы, Московской обл., Октябрьский пр-т, 403.
- •Глава 1. Архитектура реального режима
- •1.1. Память и процессор
- •Глава 1
- •Глава 1
- •1.2. Распределение адресного пространства
- •Глава 1
- •1.3. Регистры процессора
- •Глава 1
- •Глава 1
- •9 7H Шестнадцатернчное обозначение числа
- •Глава 1
- •1.4. Сегментная структура программ
- •Глава 1
- •Глава 1
- •Глава 1
- •1.5. Стек
- •Глава 1
- •1.6. Система прерываний
- •Глава 1
- •Глава I
- •1.7. Система ввода-вывода
- •Глава I
- •Глава 1
- •Глава 2. Основы программирования
- •2.1. Подготовка и отладка программы
- •Глава 2
- •Глава 2
- •Глава 2
- •Глава 2
- •Глава 2
- •2.2. Представление данных
- •Глава 2
- •Глава 2
- •2.3. Описание данных
- •Глава 2
- •Глава 2
- •2.4. Структуры и записи
- •Глава 2
- •Глава 2
- •2.5. Способы адресации
- •Глава 2
- •Глава 2
- •Глава 2
- •Глава 2
- •Глава 2
- •Глава 2
- •Глава 2
- •Глава 2
- •Глава 2
- •Глава 2
- •2.7. Вызовы подпрограмм
- •Глава 2
- •2.8. Макросредства ассемблера
- •Глава 2
- •Глава 2
- •Глава 2
- •Глава 3. Команды и алгоритмы
- •Глава 3
- •Глава 3
- •Глава 3
- •Глава 3
- •Глава 3
- •Глава 3
- •Глава 3
- •Глава 3
- •3.2. Циклы и условные переходы
- •Глава 3
- •Глава 3
- •3.3. Обработка строк
- •Глава 3
- •3.4. Использование подпрограмм
- •Глава 3
- •Глава 3
- •3.5. Двоично-десятичные числа
- •Глава 3
- •Глава 3
- •3.6. Программирование аппаратных средств
- •Глава 3
- •37Ah Порт управлсш!я
- •Глава 3
- •Глава 3
- •Глава 4. Расширенные возможности
- •4.1. Архитектурные особенности
- •Глава 4
- •4.2. Дополнительные режимы адресации
- •Глава 4
- •4.3. Использование средств 32-разрядных процессоров в программировании
- •Глава 4
- •Глава 4
- •Глава 4
- •4.4. Основы защищенного режима
- •Глава 4
- •Глава 4
- •Глава 4
- •Глава 4
- •Idiv Деление целых чисел со знаком
- •Imul Умножение целых чисел со знаком
- •In Ввод из порта
- •Inc Инкремент (увеличение на 1)
- •Int Программное прерывание
- •Into Прерывание по переполнению
- •Iret Возврат из прерывания
- •1 Lods Загрузка операнда из строки : lodsb Загрузка байта из строки lodsw Загрузка слова из строки
- •Операнд
- •Xadd память, регистр
- •Xchg Обмен данными между операндами
- •Xlat Табличная трансляция
- •Xor Логическое исключающее или
- •Содержание
Глава I
Архитектура реального режима
35
нейшем будут также приведены примеры использования команды int для вызова прикладных обработчиков программных прерываний.
Важно подчеркнуть, что описанные действия процессора выполняются совершенно одинаково для всех видов прерываний — внутренних, аппаратных и программных, хотя причины, возбуждающие процедуру прерывания, имеют принципиально разную природу.
Большая часть векторов прерываний зарезервирована для выполнения определенных действий; часть из них автоматически заполняется адресами системных программ при загрузке системы. Приведем краткую выдержку из таблицы векторов, позволяющую продемонстрировать разнообразие ее состава:
OOh —внутреннее прерывание, деление на 0;
Olh —внутреннее прерывание, пошаговое выполнение (при TF—1);
02h —немаскируемое прерывание (вывод NMI процессора);
08U —аппаратное прерывание от системного таймера;
09h —аппаратное прерывание от клавиатуры;
OEh —аппаратное прерывание от гибкого диска;
10h — программное прерывание, программы BIOS управления видеосистемой;
13U —программное прерывание, программы BIOS управления дисками;
16h —программное прерывание, программы BIOS управления клавиатурой;
IDh —не вектор, адрес таблицы видеопарамстров, используемой BIOS;
lEh —не вектор, адрес таблицы параметров дискеты, используемой BIOS;
21h —программное прерывание, диспетчер функций DOS;
22U —программное прерывание, адрес перехода при завершении процесса, используемый DOS;
231г —программное прерывание, обработчик прерываний по <Ctrl>/C, используемый DOS;
25h — программное прерывание, абсолютное чтение диска (функция DOS);
26h — программное прерывание, абсолютная запись на диск (функция DOS);
60h...66h — зарезервировано для программных прерываний пользователя;
68h...6Fh — программные прерывания, свободные векторы;
70U —аппаратное прерывание от часов реального времени (с питанием от аккумулятора);
76h —аппаратное прерывание от жесткого диска;
Как видно из таблицы, векторы прерываний можно условно разбить
на следующие группы:
векторы внутренних прерываний процессора (Olh, 02h и др.);
векторы аппаратных прерываний (08h...OFh и 70h...77h);
программы BIOS обслуживания аппаратуры компьютера (10h, I3h, 16h и др.)!
программы DOS (21h, 22h, 23h и др.); ^
адреса системных таблиц BIOS (IDh, lEh и др.).
Системные программы, адреса которых хранятся в векторах прерываний, в большинстве своем являются всего лишь диспетчерами, открывающими доступ к большим группам программ, реализующих системные
функции. Так, видеодрайвер BIOS (вектор 10U) включает программы смены видеорежима, управления курсором, задания цветовой пшштры, загрузки шрифтов и многие другие. Особенно характерен в этом отношении вектор 21h, через который осуществляется вызов практически всех функций DOS: ввода с клавиатуры и вывода на экран, обслуживания файлов, каталогов и дисков, управления памятью и процессами, службы времени и т.д. Для вызова требуемой функции надо не только выполнить команду int с соответствующим номером, но и указать системе в одном из регистров (для этой цели всегда используется регистр АН) номер вызываемой функции. Иногда для «многофункциональных» функций приходится указывать еще и номер подфункции (в регистре AL).