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

         

Цикл рисования горизонтальной



Пример 7.5. Цикл рисования горизонтальной линии в режимах Hi-Color

; Вариант 1, используется команда пересылки
lorline: mov es: [di], ax !! для True Color — mov es[di], eax
add di, bytppnt переадресация операнда
jne @F переход, если не нуль
call NxtWin установка следующего окна
}Q: loop horline управление повторами цикла
ret возврат из подпрограммы
; Вариант 2, используется строковая операция.
lorline: stosw !! для True Color — stosd
or di, di начало нового сегмента ?
jne @F -> нет
call NxtWin установка следующего окна
i@: loop horline управление повторами цикла
ret возврат из подпрограммы

Текст примера 7.5 отличается от текста примера 3.6 незначительными изменениями. В первом варианте при переадресации используется не 1, а значение переменной bytppnt, которое равно 2 или 4.

Для использования подпрограмм примера 7.5 в режимах True Color надо первые команды в обоих вариантах заменить командами, указанными в сомментариях. В этих режимах перед вызовом подпрограмм код цвета точек юмещается в регистр еах, поскольку он занимает 32 разряда.

Давайте уточним, почему приведены два варианта циклов, если они содержат одинаковое количество команд. Команда пересылки удобна в тех случаяx, когда переадресация не может выполняться сразу после записи или чтения кода точки (см. пример 6.5), или когда шаг переадресации не совпадает : размером кода точки, например при рисовании вертикальных линий. Если оказанные условия не существенны, то второй вариант цикла 7.5 предпочтительнее. После компиляции он окажется короче первого на 3 байта, и будет выполняться несколько быстрее. Но главное, при определенных условиях юзможно применение микропрограммного цикла, существенно ускоряющего процесс рисования. Об этом мы поговорим особо.



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