Иллюстрированный самоучитель по SVGA

Управление перемещением курсора

Подпрограммы примера 6.13 рассчитаны на выполнение в режимах PPG. Если вы будете использовать их в режимах direct color, то результат полученный после выполнения команды adc dx, oo надо умножить на размер кода точки. В тексте примера об э.том напоминает комментарий.

В видеорежимах Hi-Color код точки занимает 2 байта. Для умножения на 2 после команды adc dx, oo надо вставить следующие команды:

shld dx, ax, 1; сдвиг dx с добавлением старшего разряда ах

shl ах, 1; сдвиг содержимого ах на разряд влево

Первая команда сдвигает содержимое регистров dx:ax как одно двойное слово, но изменяет только содержимое dx, в который записывается старшая часть результата.

Поэтому для сдвига содержимого регистра ах нужна дополнительная команда.

В видеорежимах True color код точки занимает 4 байта. Для умножения на 4 в командах сдвига надо заменить 1 на 2.

shld dx, ax, 2; сдвиг dx с добавлением старших разрядов ах

shl ax, 2; сдвиг содержимого ах на два разряда влево

Если код точки занимает три разряда, то вместо сдвигов придется использовать умножение на 3.

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

Важно
Команда add ax, Base_win нужна, только если задача поддерживает работу со страницами видеопамяти, в остальных случаях ее надо исключить из текста примера
.

Дополнительная точка входа

В описанной подпрограмме объединены восстановление исходного фона, вычисление адреса видеопамяти и построение изображения курсора. Иногда эти действия должны выполняться независимо друг от друга. Например, при перемещении рисунка, на который указывает курсор, сначала восстанавливается исходный фон, затем рисунок перемещается вслед за мышью и только после остановки вычисляется адрес видеопамяти и выводится изображение курсора на новом месте. Специально для подобных случаев можно предусмотреть вторую точку входа в подпрограмму Motion.

Имя дополнительной точки входа указывается перед командой mov ax, horsize. При входе через эту точку исключается удаление изображения курсора с экрана Цель, сформулированная во введении к данному разделу, достигнута. Мы описали управляющий алгоритм и набор подпрограмм, необходимых для составления простейшей задачи, выполняющей перемещение курсора по экрану в режиме опроса. Теперь можно перейти к рассмотрению более гибкого управления перемещениями курсора.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.