Процедуры для работы с одним окном видеопамяти
Описание гнезда подпрограмм
Установка или изменение текущего окна производится в задачах при построении, перемещении или копировании рисунков, управлении курсором, выводе и редактировании текста, т. е. при любых манипуляциях с графическими объектами. Поэтому вызов процедуры VMC целесообразно оформить в виде подпрограмм, расположенных в теле основной задачи.
Опыт показывает, что при работе с графикой номер нового окна чаще всего отличается от текущего значения на единицу. Поэтому целесообразно составить гнездо подпрограмм, которые производят установку не только указанного, но и следующего или предыдущего окна.
Номер текущего окна бывает нужен сравнительно часто, поэтому его надо хранить в рабочей области памяти в переменной cur_win, имеющей размер слова. Конкретное значение этой переменной зависит от выполняемых задачей действий. Обычно в текущем окне располагаются графический курсор, обрабатываемая часть рисунка или редактируемый текст. В некоторых случаях текущее окно может соответствовать области видеопамяти, не отображаемой в данный момент на экране.
В Примере 2.8 описаны три подпрограммы, предназначенные для установки значения окна путем вызова процедуры VMC. Подпрограммы оформлены как внутренние, поэтому они должны быть расположены в том же сегменте памяти, в котором находится основная программа. Обращения к ним производятся с помощью команды call, в которой указано имя (метка) подпрограммы. Входным параметром для всех трех подпрограмм является переменная Cur win, исходное значение которой изменяется при установке следующего или предшествующего окна. Так и должно быть, поскольку новое окно становится текущим. Подпрограммы не изменяют содержимое регистров общего назначения, с которыми они работают.
Подпрограммы SetWin, NxtWIN и PrevWin
Ядром Примера 2.8 является подпрограмма setwin (вызов call Setwin). Она помещает текущее окно в регистр dx, очищает регистр bx и вызывает процедуру VMC для установки указанного окна. Прерывание int lOh не используется, что соответствует рекомендациям стандарта VESA.
— Регулярная проверка качества ссылок по более чем 100 показателям и ежедневный пересчет показателей качества проекта.
— Все известные форматы ссылок: арендные ссылки, вечные ссылки, публикации (упоминания, мнения, отзывы, статьи, пресс-релизы).
— SeoHammer покажет, где рост или падение, а также запросы, на которые нужно обратить внимание.
SeoHammer еще предоставляет технологию Буст, она ускоряет продвижение в десятки раз, а первые результаты появляются уже в течение первых 7 дней. Зарегистрироваться и Начать продвижение
Подпрограмма Nxtwin (обращение call Nxtwin) устанавливает следующее окно. При ее выполнении текущее значение переменной Cur__win увеличивается на единицу приращения (crunit), а затем выполняется setwin.
Подпрограмма PrevWIN (обращение call PrevWIN) устанавливает предыдущее окно. При ее выполнении текущее значение переменной Cur_win уменьшается на единицу приращения (GrUnit), а затем вызывается setwin.
Пример 2.8. Три подпрограммы для работы с видеоокнами.
; Установка следующего окна | |
NxtWin: push ax | ; сохраняем содержимое ах |
mov ax, GrUnit | ; читаем единицу приращения окна |
add Cur win, ax | ; увеличиваем номер окна |
pop ax | ; восстанавливаем содержимое ах |
; Установка окна, указанного в Cur win | |
SetWin: PushP,eg <ax,bx,dx> | ; сохранение содержимого регистров |
xor bx, bx | ; признак установки окна |
mov dx, Cur win | ; номер устанавливаемого окна |
call [VMC] | ; обращение к подпрограмме BIOS |
PopReg <dx,bx,ax> | ; восстановление содержимого регистров |
ret | ; возврат из подпрограммы |
; Установка предыдущего окна | |
PrevWIN push ax | ; сохранение содержимого ах |
mov ax, GrUnit | ; читаем единицу приращения окна |
sub Cur win, ax | ; уменьшаем номер окна |
pop ax | ; восстанавливаем содержимое ах |
jmp SHORT SetWin | ; переходим на установку окна |