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

         

Примеры таких преобразований при



Примеры таких преобразований при работе в режимах PPG приводились неоднократно. Здесь нас будет интересовать универсальный вариант преобразования, который можно использовать при работе во всех видеорежимах VESA.

При описании подпрограммы примера 6.13 (перемещение курсора) было рекомендовано для учета размера кода точки, после вычисления адреса, сдвинуть результат на 1 или 2 разряда влево, что равносильно умножению на 2 или на 4. Это самый простой, но не универсальный способ, поскольку при составлении программы надо знать величину сдвига, которая зависит от видеорежима. Кроме того, с помощью сдвигов невозможно выполнить умножение на 3, нужны дополнительные команды сложения. Поэтому, в общем случае, целесообразно выполнять умножение, а не сдвиг.
Формулу для вычисления адреса по заданным значениям координат х и у можно записать в следующем виде:

Address = (Y*horsize t- X) *bytppnt

При замене умножения на bytppnt сдвигами действия выполнялись в той последовательности, в какой они указаны в формуле — сначала умножение, затем сложение и, наконец, сдвиг. Если же сдвиг заменить умножением, то последовательность действий придется изменить.

Результат заключенных в скобки действий расположен в двух регистрах, dx содержит его старшую часть, а ах — младшую. Для умножения двойного слова (или содержимого двух регистров) на значение переменной bytppnt потребуется много вспомогательных действий. Чтобы упростить вычисления в приведенной выше формуле, надо раскрыть скобки и учесть, что bperiine = horsize*bytppnt, в результате получится следующее выражение:

Address = Y*bperline + X*bytppnt



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