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

Глава 7


Цвет в коде точки
Цвет в коде точки Видеорежимы с указанием цвета непосредственно в коде точки (direct color) были введены в версии стандарта VBE 1.2, опубликованной в октябре 1991 года. К этому времени...
Работа с прямоугольными областями
Работа с прямоугольными областями В данном разделе нас будет интересовать многофункциональная подпрограмма, способная выполнять различные манипуляции с графическими объектами прямоугольной...
Переадресация строк
Переадресация строк При работе с графическими объектами после обработки каждой строки надо вычислять адрес начала следующей. В разделе 7.2 было рекомендовано использовать для этого конс...
Пример 7 13 Варианты подпрограмм для вычисления offsline
Пример 7.13. Варианты подпрограмм для вычисления offsline ; Вариант 1 — вычисление off-sline с использованием сдвигов calloffs: push ex сохранение содержимого сх mov ex, wrdppnt...
Пересылка в видеопамять
Пересылка в видеопамять При работе с графикой достаточно часто приходится сохранять и восстанавливать содержимое видеопамяти. Это делается, например, при каждом перемещении курсора....
Пример 7 14 Подпрограмма пересылки
Пример 7.14. Подпрограмма пересылки из оперативной в видеопамять Rstreg: PushReg <bx, ex, di, si, Cur_win> ; сохранение в стеке call calloffs ; вычисление константы offsline mvs...
Пересылка из видеопамяти
Пересылка из видеопамяти Для сохранения исходного содержимого видеопамяти производится его копирование (пересылка) в оперативную память. Нас интересуют универсальные процедуры пересылки...
Подпрограмма Savereg
Подпрограмма Savereg В примере 7.15 показано, как можно переставить адреса операндов на время выполнения цикла пересылки, а затем восстановить их исходное расположение в регистрах. Вход...
Пример 7 15 Подпрограмма пересылки
Пример 7.15. Подпрограмма пересылки из видеопамяти в оперативную Savereg: PushReg <bx, ex, di, si, es, Cur_win> ; сохранение в стеке mov bx, fs ; копируем код сегмента из fs в bx...
Заливка прямоугольной области
Заливка прямоугольной области Изменим текст примера 7.14 так, чтобы его можно было использовать для окрашивания прямоугольной области заданным цветом. В этом случае при выполнении цикла...
Пример 7 16 Окрашивание прямоугольной
Пример 7.16. Окрашивание прямоугольной области заданным цветом Fillreg: PushReg <bx, ex, di, Cur_win> ; сохранение в стеке call calloffs ; вычисление константы offsline fill...
Многофункциональная подпрограмма
Многофункциональная подпрограмма Основное различие текстов примеров 7.14 и 7.16 заключается в имени вспомогательной подпрограммы, используемой для выполнения конкретных действий. Для то...
Рисунки использующие палитру
Рисунки, использующие палитру Полноцветные и подготовленные с применением палитры рисунки имеют разное назначение. В режимах direct color графические задачи должны "уметь" раб...
Преобразование палитры в форматы HiColor
Преобразование палитры в форматы Hi-Color Для того чтобы с палитрой можно было работать, ее надо прочитать из файла, содержащего образ рисунка, в оперативную память. Расположение палитры...
Расположение таблицы цветов
Расположение таблицы цветов...
Таблица цветов нужна только при
Таблица цветов нужна только при первом построении рисунка, поэтому отводить для ее хранения постоянное место в памяти не целесообразно. В подобных случаях, обычно, рекомендуется выделять п...
Палитра формата rgb
Палитра формата rgb В этом случае базовые цвета в строке палитры и в формируемом коде расположены в одинаковой последовательности. Поэтому коды базовых цветов, считанные из строки палит...
Пример 7 17 Преобразование палитры rgb в 15разрядный код
Пример 7.17. Преобразование палитры rgb в 15-разрядный код cnvpal: PushReg <ax,bx,cx,di,si,es>; сохранение содержимого регистров les di, dword ptr GenOffs; es:di = адрес таблиц...
Палитры формата bgr и bgr0
Палитры формата bgr и bgr0 В этом случае базовые цвета в строке палитры и в формируемом коде расположены в противоположном порядке, коды красного и синего цветов переставлены местами. Е...
Пример 7 18 Преобразование палитры bgr в 15разрядный код
Пример 7.18. Преобразование палитры bgr в 15-разрядный код cnvpal: PushReg < ax,b x, ex, di , si,es>; сохранение содержимого регистров les di, dwo :d ptr ( 5enOffs; es:di = адр...
Универсальный вариант подпрограммы
Универсальный вариант подпрограммы В обоих приведенных примерах от установленного режима Hi-Color зависит третий операнд одной из команд shid. От переменной команды можно избавиться сле...
Преобразование палитры в форматы True Color
Преобразование палитры в форматы True Color В данном разделе описаны две подпрограммы, предназначенные для преобразования кодов цветов палитры в формат, соответствующий режимам True Color....
Палитра формата rgb
Палитра формата rgb В этом случае в строках палитры не только отсутствует пустой (резервный) байт, но и базовые цвета расположены в обратном порядке, по сравнению с форматом bgr. Поэто...
Пример 7 19 Преобразование палитры bgr в 32разрядный код
Пример 7.19. Преобразование палитры bgr в 32-разрядный код cnvpal: PushReg <ax,ex,di,si,es> ; сохранение содержимого регистров les di, dword ptr GenOffs ; es:di = адрес таблицы...
Пример 7 20 Преобразование палитры rgb в 32разрядный код
Пример 7.20. Преобразование палитры rgb в 32-разрядный код cnvpal: PushReg <ax,ex,di,si,es> ; сохранение содержимого регистров les di, dword ptr GenOffs; es:di = адрес таблицы...
Построение рисунков с использованием палитры
Построение рисунков с использованием палитры Ранее в разделе были подробно описаны способы построения не сжатых рисунков, в образах которых точки расположены в естественном порядке. При...
Построение строки рисунка
Построение строки рисунка Для построения строки рисунка в примерах 3.21 и 3.22 вызывалась подпрограмма drawiine. Большинство описанных ранее ее вариантов выполняет копирование кодов точ...
Пример 7 21 Построение строки
Пример 7.21. Построение строки с перекодированием по таблице цветов drawline: push eax сохранение содержимого еах drwlin: lods byte ptr fs:[di] ; al = код точки образа рисунка and eax...
Упрощение подпрограммы
Упрощение подпрограммы В примере 7.22 приведен текст упрощенного варианта подпрограммы, выполняющей перекодировку и запись одной точки, код которой указан в регистре ai....
Пример 7 22 Перекодировка по таблице
Пример 7.22. Перекодировка по таблице и запись точки в видеопамять wrtpnt: push eax сохранение содержимого еах and eax, OFFh очистка старших разрядов еах shl ax, wrdppnt учет размера...
Построение небольшого рисунка
Построение небольшого рисунка Подпрограмма построения рисунка, образ которого помещается в одном сегменте, приведена в примере 7.23. Перед ее вызовом устанавливается окно видеопамяти, со...
Пример 7 23 Построение рисунка из файла небольшого размера
Пример 7.23. Построение рисунка из файла небольшого размера drawing: PushReg <di,si,bx,ex,gs,Cur_win>; сохранение в стеке call calloffs вычисление константы offsline mov gs, Gen...
Построение большого рисунка
Построение большого рисунка Если образ рисунка не помещается в одном сегменте, то его приходится считывать из файла и выводить на экран по частям. Поэтому перед началом цикла построения...
Пример 7 24 Построение рисунка
Пример 7.24. Построение рисунка из файла произвольного размера BigDraw: pusha сохраняем стандартные регистры PushReg <fs, gs, CL г win> ; сохраняем fs, gs и Cur win mov fs, SwpS...
Учет лишних байтов
Учет лишних байтов В примерах 7.23 и 7.24, так же, как и в примерах 3.21 и 3.22, предполагается, что строки образа рисунка расположены в файле подряд друг за другом. На практике это не...
Рисунки не использующие палитру
Рисунки, не использующие палитру Полноцветные (full-color) или художественные точечные компьютерные рисунки не используют палитру. Цвет каждой точки указывается в ее коде, который заним...
Рисунки подготовленные в стандарте BMP
Рисунки, подготовленные в стандарте BMP Принятый в стандарте BMP способ сжатия не эффективен, поэтому образы полноцветных рисунков обычно не упакованы. Это упрощает цикл построения рис...
Способ построения рисунка
Способ построения рисунка При построении рисунка небольшого размера (см. пример 7.24) мы выбирали из оперативной памяти и записывали в видеопамять строки образа рисунка в порядке их ест...
Коррекция адресов строк
Коррекция адресов строк Для определения адреса начала следующей строки мы прибавляли к текущему адресу видеопамяти константу коррекции, которая вычисляет подпрограмма caiioffs (см. прим...
Адрес начала последней строки
Адрес начала последней строки Для построения рисунка в нужном месте экрана обычно задается адрес видеопамяти, соответствующий левой верхней точке (началу) рисунка. В данном случае пост...
Размер порции данных
Размер порции данных Рисунки большого размера считываются из файла и строятся по частям. Размер считываемой части файла (порции данных) надо выбрать таким, чтобы в нем укладывалось цел...
Подпрограмма BigBmp
Подпрограмма BigBmp Текст подпрограммы приведен в примере 7.25. Перед ее вызовом должно быть установлено окно видеопамяти, в котором расположено начало рисунка. Его адрес указывается в...
Пример 7 25 Построение полноцветного рисунка формата BMP
Пример 7.25. Построение полноцветного рисунка формата BMP BigBmp : pusha сохранение "всех" регистров PushReg <fs,Cur win> сохранение fs и Cur win mov fs, SwpSeg fs = с...
Подпрограммы для построения строк
Подпрограммы для построения строк В отличие от основного текста примера 7.25, тексты подпрограмм построения строк существенно зависят от установленного задачей видеорежима. Это связано...
Пример 7 26 Варианты подпрограммы построения строки
Пример 7.26. Варианты подпрограммы построения строки ; Вариант 1 для работы в режимах True Color drawline: movs word ptr [di], f s: [si]; копируем коды синего и зеленого lods byte ptr fs...
Рисунки подготовленные в стандарте PCX
Рисунки, подготовленные в стандарте PCX В файлах формата PCX образы полноцветных рисунков обычно хранятся в упакованном виде. Эффективность принятого в стандарте PCX способа упаковки...
Новое поле заголовка
Новое поле заголовка. Заголовок файла стандарта PCX имеет фиксированный эазмер soh байтов. Назначение его основных полей (байтов и слов) описано в разделе. Здесь нас интересует еще одн...
Подпрограмма Unpack
Подпрограмма Unpack Текст подпрограммы распаковки строки рисунка с преобразованием в формат bgr показан в примере 7.27. Распакованная строка записывается в свободную часть буфера общего...
Пример 7 27 Распаковка строки и преобразование в формат bgr
Пример 7.27. Распаковка строки и преобразование в формат bgr Unpack: PushReg <ax, dx, ex, di> сохранение используемых регистров mov di, GenOffs адрес начала строки в GenSeg...
Подпрограмма PackDrw
Подпрограмма PackDrw Перед построением рисунка надо прочитать заголовок файла, проверить его соответствие стандарту PCX и наличие в нем полноцветного упакованного рисунка. Затем из поле...
Пример 7 28 Построение упакованного рисунка формата PCX
Пример 7.28. Построение упакованного рисунка формата PCX or dx, dx обработана вся строка ? jnz Unpck2 => нет, продолжение обработки PopReg <cx,di> восстановление содержимого di и...
Рисунки использующие палитру
Рисунки, использующие палитру Подпрограмма PackDrw позволяет строить рисунки, подготовленные с применением палитры цветов. Для распаковки таких рисунков в ней вызывается подпро!рамма u...
Способы сжатия полноцветных рисунков
Способы сжатия полноцветных рисунков Возможность сжатия образов точечных рисунков была предусмотрена уже в первых стандартах хранения графических данных. Основным критерием при выборе...
Сжатие по способу RLE
Сжатие по способу RLE В стандартах PCX и BMP предусмотрены простые алгоритмы упаковки и распаковки данных, которые называются Run Length Encoding или RLE. Реализация способа RLE в этих...
Таблица 7 5 Результат сжатия трех полноцветных рисунков
Таблица 7.5. Результат сжатия трех полноцветных рисунков Содержание рисунка Размер рисунка Количество цветов Размер файла в байтах...
Таблица 7 5 иллюстрирует недостатки
Применение палитры ограничивало разнообразие кодов точек до 256, поэтому в рисунках неизбежно повторялись одноцветные точки и их комбинации. В этих условиях алгоритм LZW, реализованный в...
Цветовое пространство YUV
Цветовое пространство YUV Трехмерное пространство света, у которого яркость и цвет являются независимыми компонентами, обычно обозначается YUV или УСЬСГ, в англоязычной технической лит...
Таблица 7 6 Уравнения для преобразования пространства цветов
Таблица 7.6. Уравнения для преобразования пространства цветов RGB->YUV YUV->RGB Y = 0.299R + 0,5870 + 0,114В R = Y+ 1,134V U = 0,434В...
Общая характеристика способа JPEG
Общая характеристика способа JPEG JPEG — это аббревиатура от Joint Photographic Experts Group (объединенная группа экспертов по фотографии) и одновременно обозначение способа сжатия пол...
Таблица 7 7 Качество рисунка и размер файла
Таблица 7.7. Качество рисунка и размер файла Величина потерь качества изображения Размер файла в байтах Исходный рисунок 2476101...
Способы сжатия в JPEG
Способы сжатия в JPEG Стандарт рекомендует два способа сжатия исходного рисунка — основной и дополнительный. Большинство графических редакторов позволяют выбирать параметры обоих способ...
Файлы формата JPG
Файлы формата JPG JPEG — это не стандарт хранения графических данных, а способ их сжатия. Поэтому способ хранения данных в файле зависит от стандарта, использующего JPEG для сжатия исх...
Наложение рисунков и спецэффекты
Наложение рисунков и спецэффекты Видеорежимы direct color позволяют решать задачи, постановка которых при работе в режимах PPG была просто невозможна. К ним относится, например, получен...
Спрайты (Sprites)
Спрайты (Sprites) В дословном переводе с английского слово "Sprite" означает "фея" или "эльф". В литературе по программированию этот термин обозначает неб...
Фильтрация цвета (Chroma Keying)
Фильтрация цвета (Chroma Keying) Преобразование черного цвета в прозрачный является частным случаем фильтрации цвета, которая широко применяется в ЗD-графике. В новой рекламе технологии...
Пример 7 29 Фильтрация цвета строки
Пример 7.29. Фильтрация цвета строки формата bgr, режим True Color sprline: lods word ptr fs: [si] ; ax = коды синего и зеленого цвета push ax ; сохраняем ах в стеке lods byte ptr...
Смешение цветов (alpha blending)
Смешение цветов (alpha blending) Наиболее общей формой наложения двух изображений является смещение их цветов с разными весовыми коэффициентами. На практике обычно используется так назы...
Особенности программной реализации
Особенности программной реализации Прежде всего, давайте раскроем скобки в приведенной выше формуле и сгруппируем величины, умножаемые на alpha. В результате получится следующий вариант...
Пример 7 30 Альфаналожение строки
Пример 7.30. Альфа-наложение строки формата Ьдг, режим True Color alphamix: PushReg <bx,dx>; сохранение регистров bx, dx mixpnt: push ex ; сохранение счетчика повторов mov c...
Наплыв изображения (Image Dissolve)
Наплыв изображения (Image Dissolve) Если результат выводить на экран и многократно повторять смешение, увеличивая при каждом повторе значение alpha, то на фоне постепенно исчезающего исходн...
Прозрачная поверхность (Transparent Surface)
Прозрачная поверхность (Transparent Surface) В этом случае создается зрительный эффект, при котором наблюдаемый объект как бы отгорожен от наблюдателя бесцветной прозрачной перегородкой, н...
Пример 7 31 Наложение прозрачной строки заданного цвета
Пример 7.31. Наложение прозрачной строки заданного цвета Trnspl: PushReg <bx, dx> сохранение регистров bx, dx Tline: push ex сохранение счетчика повторов mov ex, 03 для обработк...
Пример 7 32 Наложение строки тумана заданного цвета
Пример 7.32. Наложение строки тумана заданного цвета Foglin: PushReg <bx, dx> ; сохранение регистров bx, dx f og_l : push ex ; сохранение счетчика повторов lods byte ptr f s :...
Общий случай смешения
Общий случай смешения Затягивание туманом является частным случаем смешения двух изображений с переменными значениями alpha. Рассмотрим простой пример. Предположим, что у вас есть рисун...
Кодирование цвета
Кодирование цвета Манипуляции с графическими объектами во многих случаях зависят не только от размера кода точки, но и от того, как расположены базовые цвета в этом коде. Поэтому мы на...
Среднее количество цветов
Среднее количество цветов Режимы среднего цветового разрешения в англоязычной литературе принято называть Hi-Color. При их установке возможны два способа кодирования цвета, различающиеся...
Таблица 7 1 Размещение базовых цветов в слове
Таблица 7.1. Размещение базовых цветов в слове Режим 32К цветов Красный цвет Зеленый цвет Синий цвет F E D C B A 9...
Максимальное цветовое разрешение
Максимальное цветовое разрешение Максимальное цветовое разрешение обеспечивают видеорежимы VESA, которые в англоязычной литературе принято называть True color или 24-bit Color, последне...
Кодирование цвета
Кодирование цвета Код точки обычно занимает в видеопамяти 32 разряда (4 байта или двойное слово), кроме базовых цветов в него входит дополнительный (резервный) пустой байт. Расположение...
Таблица 7 2 Расположение базовых цветов в 32разрядном слове
Таблица 7.2. Расположение базовых цветов в 32-разрядном слове БайтЗ Разряды 24—31 Байт 2 Разряды 16—23 Байт 1 Разряды 8— 15...
Код в памяти и в регистре
Код в памяти и в регистре Байты регистров принято нумеровать в направлении справа налево. На экран же они выводятся, начиная со старших (слева направо), т. е. так, как расположены десят...
Таблица 7 3 Расположение кодов цвета в памяти и в регистре
Таблица 7.3. Расположение кодов цвета в памяти и в регистре Название цвета Байты памяти Байты памяти 0 1 2...
Сравнение с режимом HiColor
Сравнение с режимом Hi-Color В режимах True color код базового цвета увеличился на три разряда, соответственно количество градаций базовых цветов увеличилось в 8 раз, а общее количество...
24Разрядный код точки
24-разрядный код точки Стандартом VESA не оговорено обязательное наличие резервного байта в коде точки. Поэтому видеокарты, у которых он отсутствует, а код точки занимает всего 24 разря...
Недостатки трехбайтового кода
Недостатки трехбайтового кода У рассмотренных ранее видеорежимов размер кода точки совпадал с одной из единиц измерения памяти — байт, слово, двойное слово. Нас не интересовало хорошо...
Подпрограмма записи кода точки
Подпрограмма записи кода точки Текст подпрограммы, выполняющей запись кода точки из регистра еах в видеопамять, приведен в примере 7.1....
Пример 7 1 Подпрограмма записи 24разрядного кода точки
Пример 7.1. Подпрограмма записи 24-разрядного кода точки wrtpnt : push eax сохранение содержимого еах mov es: [di] , al запись первого байта кода точки shr eax, 08 сдвиг содержимого е...
Подпрограмма чтения кода точки
Подпрограмма чтения кода точки Текст подпрограммы приведен в примере 7.2. При ее использовании в разделе данных задачи надо зарезервировать один байт, присвоив ему имя DotBuff....
Пример 7 2 Подпрограмма чтения 24разрядного кода точки
Пример 7.2. Подпрограмма чтения 24-разрядного кода точки rdpnt : xor еах, еах очистка регистра еах mov al, es: [di] чтение младшего байта кода точки mov DotBuff, al и его сохранение в...
Работа с двумя окнами
Работа с двумя окнами В приведенных примерах использованы имена подпрограмм Nxtwin и Setwin с добавленными к ним буквами див. Они встречаются первый раз, потому уточним, о чем идет речь...
Когда используются подпрограммы
Когда используются подпрограммы Расположение кода точки в двух смежных окнах событие достаточно редкое. Если вести отсчет от начала видеопамяти, то в трех подряд расположенных окнах оно...
Координаты и адреса точек
Координаты и адреса точек Для вывода точки заданного цвета в нужное место экрана надо связать координаты этого места с адресом видеопамяти, по которому должен быть записан код точки. По...
Новые переменные
Новые переменные После чтения массива info задаче доступны две величины, имеющие отношение к разрешающей способности режима. 1. Одна из них расположена в слове со смещением 12h,...
Примеры таких преобразований при
Примеры таких преобразований при работе в режимах PPG приводились неоднократно. Здесь нас будет интересовать универсальный вариант преобразования, который можно использовать при работе во...
Подпрограмма Caladdr
Подпрограмма Caladdr В примере 7.3 приведен текст подпрограммы, выполняющей вычисления по этой формуле. Перед ее вызовом в регистре сх указывается номер столбца (координата х), а в рег...
Пример 7 3 Универсальная подпрограмма вычисления видеоадреса
Пример 7.3. Универсальная подпрограмма вычисления видеоадреса Daladdr: mov ax, bperline ax = размер строки в байтах mul dx dx:ax = Y*bperline push dx сохраняем старшую часть результата...
Другой вариант Caladdr
Другой вариант Caladdr В примере 7.4 показан вариант подпрограммы caiaddr, в котором вместо умножения x*bytppnt содержимое регистра сх сдвигается на к разрядов влево. В зависимости от в...
Пример 7 4 Пересчет координат
Пример 7.4. Пересчет координат в адрес с использованием сдвига Caladdr: mov ax, bperline ax = размер строки в байтах raul dx dx:ax = Y*bperline shl ex, k k=l для Hi-Color; k=2 для Tru...
Координаты и адреса смежных точек
Координаты и адреса смежных точек Значения координат нужны для вычисления базового адреса видеопамяти, соответствующего некой опорной точке, как правило, левого верхнего угла, графическ...
Таблица 7 4 Приращения координат и адресов смежных точек
Таблица 7.4. Приращения координат и адресов смежных точек Приращение смешанных координат Приращение их адресов X-1.Y-1 X, Y-1...
Адрес следующей строки
Адрес следующей строки Если строки графического объекта обрабатываются последовательно друг за другом, то после построения текущей строки надо определить адрес начала следующей (или пре...
Линии строки и прямоугольные области
Линии, строки и прямоугольные области Описание манипуляций с кодами точек мы начнем со случаев, когда они просто записываются в видеопамять или считываются из нее. Для записи кодов неск...
Подпрограммы для рисования линий
Подпрограммы для рисования линий При оформлении рабочей области экрана часто используются одноцветные горизонтальные и вертикальные линии. Способ их рисования зависит от угла наклона и...
Пример 7 5 Цикл рисования горизонтальной
Пример 7.5. Цикл рисования горизонтальной линии в режимах Hi-Color ; Вариант 1, используется команда пересылки lorline: mov es: [di], ax !! для True Color — mov es[di], eax add di...
Ускорение цикла рисования
Ускорение цикла рисования В примере 7.5 после каждой переадресации вы-юлняется проверка принадлежности нового значения адреса текущему сегменту и, в случае необходимости, устанавливается...
Подпрограмма Twopart
Подпрограмма Twopart Нас интересует не простое рисование, а возможность ускорения выполнения различных действий с точками, расположенными на прямой линии. Поэтому текст примера 7.6 явля...
Пример 7 6 Рисование линии по частям в режимах HiColor
Пример 7.6. Рисование линии по част-ям в режимах Hi-Color push dx coxp аняем содержимое регистра dx mov dx, di копируем адрес в регистр dx shl ex, 01 ! ! для True Color - shl ex, 02 ad...
Пример 7 7 Ускоренное рисование линии в режимах HiColor I
Пример 7.7. Ускоренное рисование линии в режимах Hi-Color I horline: push dx сохраняем содержимое регистра dx mov dx, di копируем адрес в регистр dx shl ex, 01 ! ! для True Color - sh...
Условное ассемблирование
Условное ассемблирование Тексты трех приведенных примеров рисования линий являются стандартными заготовками, у которых от видеорежима зависит лишь несколько команд. Исключить эту зависи...
Пример 7 8 Выбор варианта команды по заданному признаку
Пример 7.8. Выбор варианта команды по заданному признаку IF variant EQ 1 ; проверка условия выбора mov es:[di], ax ; основной вариант команды ELSE ; признак альтернативного варианта mo...
Трехбайтовый код точки
Трехбайтовый код точки Такой код не укладывается в общую схему по двум причинам. Во-первых, размер операндов команд не может быть равен трем байтам. Во-вторых, существуют особые точки,...
Пример 7 9 Рисование линии режим True Color трехбайтовый код
Пример 7.9. Рисование линии, режим True Color, трехбайтовый код horline: push bx сохраняем содержимое регистра bx mov ebx, eax копируем еах в ebx shr ebx, 16 bx = старшие разряды ко...
Подпрограммы для построения строк
Подпрограммы для построения строк Строки отличаются от линий тем, что в оперативной памяти хранится их точечный образ. Он может быть получен в результате чтения файла, содержащего рисун...
Исходный вариант подпрограммы
Исходный вариант подпрограммы Для дальнейших рассуждений нам нужен простой вариант подпрограммы, иллюстрирующий последовательность действий при построении строки. Он приведен в примере...
Пример 7 10 Цикл построения строки в режиме HiColor
Пример 7.10. Цикл построения строки в режиме Hi-Color drawline: mov ax, fs: [si] ; ! ! для True Color — mov eax, fs[si] mov es:[di], ax ; !! для True Color — mov es:[di], eax add si,...
Вариант со строковой операцией
Вариант со строковой операцией Команды пересылки целесообразно использовать только в тех случаях, когда переадресацию операнда надо отложить на некоторое время или когда приращение адре...
Пример 7 11 Улучшенный цикл построения
Пример 7.11. Улучшенный цикл построения строки в режиме Hi-Color drawline: movs word ptr [di], f s: [si] ; !! movs dword ptr [di], f s: [si] or di, di ; начало нового сегмента ? j...
Универсальная подпрограмма пересылки
Универсальная подпрограмма пересылки Давайте вернемся к постановке вопроса. Задана строка, содержащая N точек, код каждой из них занимает м байтов. Эту строку надо скопировать из одного...
Пример 7 12 Универсальный (цикл
Пример 7.12. Универсальный (цикл пересылки) способ построения строк drawl ine: push dx сохранение содержимого регистра dx xchg ax, ex обмен содержимого регистров (ах = N) mul bytppnt...
Обсуждение результатов
Обсуждение результатов Описанная подпрограмма не только не зависит от размера кода точек, но и затрачивает минимально возможное время на построение строки, что особенно важно при работ...








Начало