Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОТВЕТЫ ЗЫКОВ.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
678.4 Кб
Скачать

Оглавление

1. Таймер. Установка и чтение таймера. 2

2. Установка/чтение времени и даты. Установка/чтение часов реального времени. Задержка программных операций. 4

3. Генерация тона по второму каналу таймера. 11

4. Клавиатура. Типы клавиш и управление ими. 12

5. Буфер клавиатуры. Очистка буфера клавиатуры. Проверка символов в буфере. 25

6. Прием символов с клавиатуры. Проверка/установка статуса клавиш-переключателей. 34

7. Установка атрибутов/цветов символов. Вывод символов на экран. 40

7.1. Установка атрибутов/цветов символов. 40

7.2. Вывод символов на экран. 48

8. Управление распределением диска Чтение таблицы размещения файлов FAT. 59

9. Прерывания. BIOS прерывания. DOS прерывания. Hаписание собственного прерывания 65

9.1. Написание собственного прерывания. 65

10. Общая структура программы на языке ASSEMBLER. Различия между EXE- и COM-файлами 70

10.1. Различия между EXE- и COM-файлами 73

11. Регистры, флаги, распределение памяти. 75

12. Директивы процессора. Метки. Данные. 78

12.1. Метка 85

13. Адресация. Группа команд пересылки данных 89

14. Арифметические операции - ADD, SUB, MUL, DIV. 91

15. Биты, сдвиг логический, арифметический и циклический 93

1.Таймер. Установка и чтение таймера.

Кроме часов реального времени, любой компьютер (даже простейший IBM PC) содержит устройство, называемое системным таймером. Это устройство подключено к линии запроса на прерывание IRQ0 и вырабатывает прерывание INT 8h приблизительно 18,2 раза в секунду (точное значение - 1193180/65536 раз в секунду).

Микросхема 8253 работает независимо от процессора. Процессор программирует микросхему и затем обращается к другим делам. Таким образом 8253 действует как часы реального времени - она считает свои импульсы независимо от того, что происходит в компьютере. Однако, максимальный программируемый интервал составляет приблизительно 1/12 секунды. Для подсчета интервалов времени в часы и минуты нужны какие-то другие средства. Именно по этой причине импульсы от нулевого канала микросхемы таймера накапливаются в переменной, находящейся в области данных BIOS. Этот процесс показан на рис. 2-1. Это накопление обычно называется подсчетом времени суток. 18.2 раза в секунду выход канала 0 обрабатывается аппаратным прерыванием (прерыванием таймера), которое ненадолго останавливает процессор и увеличивает счетчик времени суток.

Число 0 соответствует полночи 12:00; когда счетчик достигает значения эквивалентного 24 часам, он сбрасывается на ноль. Другое время в течение суток легко определяется делением показателя счетчика на 18.2 для каждой секунды. Счетчик времени суток используется в большинстве операций, связанных со временем.

Обработка прерываний таймера

При инициализации BIOS устанавливает свой обработчик для прерывания таймера. Этот обработчик каждый раз увеличивает на единицу текущее значение 4-байтовой переменной, располагающейся в области данных BIOS по адресу 0000:046Ch - счетчик таймера. Если этот счетчик переполнится из-за того что прошло более 24 часов с момента запуска таймера, в ячейку 0000:0470h заносится значение 1.

Другое действие, выполняемое стандартным обработчиком прерывания таймера - контроль за работой двигателей НГМД. Если после последнего обращения к НГМД прошло более 2 секунд, обработчик прерывания выключает двигатель. Ячейка с адресом 0000:0440h содержит время, оставшееся до выключения двигателя. Это время постоянно уменьшается обработчиком прерывания таймера. Когда оно становится равно 0, двигатель НГМД отключается.

Последнее действие, которое выполняет обработчик прерывания таймера - вызов прерывания INT 1Ch. После инициализации системы вектор INT 1Ch указывает на команду IRET, то есть обработчик прерывания INT 1Ch ничего не делает. Программа может установить собственный обработчик этого прерывания для того чтобы выполнять какие-либо периодические действия.

Необходимо отметить, что прерывание INT 1Ch вызывается обработчиком прерывания INT 8h до сброса контроллера прерывания, поэтому во время выполнения прерывания INT 1Ch все аппаратные прерывания запрещены. В частности, запрещены прерывания от клавиатуры.

Обработчик прерывания INT 1Ch должен заканчиваться командой IRET. Если же вы подготавливаете собственный обработчик для прерывания INT 8h, перед завершением его работы необходимо сбросить контроллер прерываний. Это можно сделать, например, так:

mov al, 20h

out 20h, al

Таймер обычно реализуется на микросхеме Intel 8253 (для компьютеров IBM PC и IBM PC/XT) или 8254 (для компьютеров IBM PC/AT и IBM PS/2), а также на аналогах этих микросхем.