Оперативная память

         

Сохранение и восстановление рабочей области экрана



Сохранение и восстановление рабочей области экрана

В примере Б. 7 основные действия выполняет строковая операция movs, у которой расположение источника задает регистр fs, а приемника — es. Следовательно, для сохранения содержимого видеопамяти в расширенной памяти в регистр fs надо записать код видеосегмента, а в es — код сегмента EMS. Для восстановления содержимого видеопамяти, сохраненного в расширенной памяти в регистре fs, указывается код сегмента EMS, а в es — код видеобуфера. Формирование нужных значений в регистрах es и fs выполняют подпрограммы, приведенные в примере Б.8. Для сохранения содержимого видеопамяти используется обращение к подпрограмме scrsave, а для восстановления — к scrrest. Входные параметры отсутствуют.

Пример Б.8. Сохранение или восстановление рабочей области экрана

scrsave: PushReg <fs,es,vbuff,ebuff>; размещение в стеке
jmp short @F обход макровызова
scrrest: PushReg <fs,es,ebuff vbuff>; размещение в стеке
@@: call Hidepnt удаление изображения курсора
PopReg <es,fs> формируем содержимое es и fs
call Movebl перемещение блока
PopReg <es,fs> восстановление содержимого es и fs
call Showpnt вывод курсора на экран
ret возврат из подпрограммы

При вызове scrsave в стеке сохраняется исходное содержимое регистров fs, es и переменных vbuff, ebuff. При обращении к scrrest порядок записи в стек переменных ebuff, vbuff противоположный. После размещения в стеке нужных величин выполняется общая часть обеих подпрограмм.

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

После этого в регистры fs и es выталкиваются из стека нужные величины, происходит обращение к подпрограмме movebi и восстанавливается исходное содержимое регистров fs и es.

Выполнение подпрограмм заканчивается восстановлением изображения курсора на экране. Напомним, что варианты подпрофамм Hidepnt и Showpnt описаны в главе 6.



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