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

         

Недостатки трехбайтового кода



Недостатки трехбайтового кода

У рассмотренных ранее видеорежимов размер кода точки совпадал с одной из единиц измерения памяти — байт, слово, двойное слово. Нас не интересовало хорошо это или плохо, поскольку не было оснований для постановки такого вопроса, но, прочитав данный раздел, вы поймете, что это было хорошо. Трехбайтовый код точки порождает две основные проблемы.

  1. 1. У всех без исключения команд микропроцессоров Intel размер операнда кратен степени двойки, поэтому обработать три байта одной командой нельзя. В таком случае при обмене данными с видеопамятью приходится обрабатывать сначала слово, а затем байт или наоборот, что замедляет процесс обмена. Однако это не самое неприятное.
  2. 2. Размер сегмента оперативной или видеопамяти так же кратен степени двойки.

Поэтому в нем не помещается целое количество трехбайтовых точек. У одной из них (первой или последней) в текущем сегменте окажется только часть кода, соответствующая одному или двум базовым цветам. Вот это настоящий подарок! Он вынуждает пересмотреть логику манипуляций с точками, которая использовалась до сих пор, и в некоторых случаях применять специальные подпрограммы для записи кодов точек в видеопамять и их чтения из нее.

Подпрограммы для записи и чтения трехбайтового кода точки приведены ниже. При их составлении учтено следующее:

  • код точки находится в трех младших байтах регистра еах, причем базовые цвета расположены так, как показано в табл. 7.2, а старший резервный байт не используется;
  • адрес видеопамяти находится в регистре di, а текущее окно задает переменная! cur_win, при выполнении подпрограмм исходные значения адреса и окна не изменяются;
  • код видеосегмента находится в регистре es;
  • доступ к видеопамяти происходит через два окна, окно А используется при записи, а окно в — при чтении;
  • если код точки помещается в текущем окне, то подпрограммы должны выполнять минимум вспомогательных действий.


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