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

         

Построение строки



Пример 7.21. Построение строки с перекодированием по таблице цветов

drawline: push eax сохранение содержимого еах
drwlin: lods byte ptr fs:[di] ; al = код точки образа рисунка
and eax, OFFh очистка старших разрядов еах
shl ax, wrdppnt учет размера строки таблицы
add ax, GenOffs ax = смещение начала таблицы
mov ах, дз: [еах] ! ! или mov eax, gs: [eax] для True Color
stosw !! или stosd для True Color
or di, di достигнута граница окна ?
jne @F -> нет, обход следующей команды
cal I NxtWin установка следующего окна
@@: loop drwlin управление повторами цикла
pop eax восстановление содержимого еах
ret возврат из подпрограммы

В цикле примера 7.21 регистр еах используется для указания адреса при чтении кода цвета точки. Адрес формируется в младшем слове регистра, а его старшее слово должно быть очищено. Поэтому после чтения в al кода образа точки старшие разряды регистра еах очищаются с помощью операции "конъюнкция". В зависимости от установленного видеорежима, третья команда сдвигает содержимое ах на 1 или 2 разряда влево. Остается прибавить к ах смещение таблицы в сегменте gs, и адрес требуемого кода будет сформирован. Код считывается в регистр ах (или в еах) и оттуда записывается в видеопамять с помощью строковой операции stosw или stosd. Далее,
как обычно, проверяется адрес видеопамяти и в случае необходимости устанавливается следующее окно. Повторами цикла управляет команда loop.

В тексте примера две команды зависят от видеорежима, комментарий к ним начинается с двух восклицательных знаков. Избавиться от переменных команд невозможно, но для выбора их нужной пары можно использовать директивы условного ассемблирования (см. пример 7.8).



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