Графические устройства

         

Подпрограмма изменения



Пример 5.24. Подпрограмма изменения состояния текстового курсора

TglCrsr: PushReg <ax,ex,di,Cur_win>; сохранение в стеке
call Setwin ; установка исходного окна
mov al, grndcol ! i al = код цвета фона
mov ex, hsymb ex = высота символов
Tcrsr: xor es:[di], al !! изменяем код первой точки
xor es:[di+1], al !! изменяем код второй точки
add di, bperline коррекция видеоадреса
jnc @F => адрес в пределах сегмента
call Nxtwin установка следующего окна
@@: loop Tcrsr управление циклом
PopReg <Cur_win,di,ex,ax> ; восстановление из стека
ret завершение работы подпрограммы

Выполнение подпрограммы примера 5.24 начинается с сохранения в стеке тех величин, значения которых могут измениться, и установки исходного окна. После этого в регистр al копируется код цвета фона, а в сх — количество строк в символе.

Цикл изменения состояния курсора имеет метку Tcrsr. Его первые две команды изменяют состояние двух первых точек очередной строки рисунка. Затем вычисляется адрес следующей строки, если при этом вырабатывается признак переполнения, то производится смена окна видеопамяти. Команда loop повторяет выполнение цикла, пока не будут изменены все строки. После этого восстанавливаются сохраненные в стеке величины и происходит возврат на вызывающий модуль.

Исходный текст примера 5.24 рассчитан на выполнение в видеорежимах PPG. Комментарий к командам, зависящим от видеорежима, начинается с двух восклицательных знаков. При работе в режимах direct color используйте варианты переменных команд, приведенные в табл. 5.2.



Содержание раздела