хоr ах, ах ; очистка регистра- ах
mov fs, ax ; очистка сегментного регистра fs
mov ax, cs:VeclC ; ax = содержимое VeclC
mov bx, cs:VeclC+2 ; bx = содержимое VeclC+2
cli ; запрещаем прерывания
mov fs: [70h] , ax ; восстановление 1-го слова вектора
mov fs: [72h] ,bx ; восстановление 2-го слова вектора
sti ; разрешаем прерывания
В примере 5.26 для доступа к словам вектора используется регистр fs, поэтому его содержимое предварительно очищается. Затем в регистры ах и bx копируются первое и второе слово сохраненного ранее вектора ich. После запрещения прерываний содержимое регистров ах и bx копируется в слова 70h и 72h, и разрешаются прерывания. Вектор восстановлен, и можно завершать выполнение задачи.
Замечание 1
Замечание 1
Для работы с векторами прерываний предназначены две специальные функции DOS (прерывания int 2lh). Функция Get Vector (код 35h) читает содержимое вектора, a Set vector (код 25h) записывает в вектор новое содержимое. Однако их применение просто не оправдано, в чем вы можете убедиться самостоятельно.
Прерывающая подпрограмма подсчитывает количество тиков таймера и, как только оно будет равно 9 (примерно через каждые 0,5 сек), изменяет текущее состояние курсора. Рисунок курсора находится на экране, только если задача работает с текстом. Поэтому необходим специальный признак, разрешающий или запрещающий изменение состояния курсора. Кроме того, нужен признак, позволяющий узнать, в каком состоянии находится курсор — включен или погашен (виден или не виден на экране).
Для хранения счетчика тиков и признаков в разделе данных задачи надо зарезервировать две однобайтовые переменные, имеющие следующие имена:
Ntick db 9 ; счетчик тиков таймера изменяется от 0 до 9 CurStat db 0 ; текущее состояние курсора изменяется от 0 до 3.
В байте CurStat используются только два младших бита. Нулевой бит разрешает (1) или запрещает (0) изменение состояния (мигание) курсора, он устанавливается в основной программе. Первый бит отражает текущее состояние курсора на экране: 0 — выключен, 1 — включен. Им управляет прерывающая подпрограмма, текст которой приведен в примере 5.27.