Assembler для начинающих






    Цветной графический адаптер имеет два режима отображения, в которых
    можно управлять отдельными точками экрана. Эти режимы называются
    режимами Полной Адресации точек (APA: All Points Addressable),
    поскольку с помощью этих режимов можно адресовать и изменять все
    точки. В действительности цветная плата допускает более двух
    режимов APA, но мы рассмотрим только те два, которые поддерживаются
    системой программирования. Используя информацию из технического
    описания, вы можете попробовать и другие режимы.
 
      Графический режим среднего разрешения обеспечивает вывод
    изображения из 320 точек и 200 строк растра. Каждая из этих точек
    может иметь один из четырех цветов. Это означает, что для каждой
    точки требуется для представления цвета 2 бита. В каждом байте
    графической памяти помещается четыре точки или пиксела (от англ.
    picture element - графический элемент, которые называют также
    "пелами"). Если вы умножите горизонтальный размер на вертикальный,
    а затем разделите на 4 - число точек в байте, то увидите, что в
    режиме среднего разрешения требуется 16000 байт. Именно поэтому
    цветная плата имеет память объемом 16K.
 
      На Фиг. 8.13 показано расположение элементов в каждом байте.
    Пара бит с номерами 6 и 7 отображается первой точкой (0), а биты 0
    и 1 представляют последнюю точку (3), отображаемую из этого байта.
    В   первых 80 байтах графической памяти содержится 320 точек
    строки растра 0, т.е. первой строки экрана.
 
         7   6     5    4     3   2      1   0
      ЪДДДДДДДДДВДДДДДДДДДВДДДДДДДДДВДДДДДДДДДї
      і       і       і       і     і
      і точка 0 і точка 1 і точка 2 і точка 3 і
      і    і        і    і    і     і    і    і      і
      АДДДДБДДДДБДДДДБДДДДБДДДДБДДДДБДДДДБДДДДЩ
 
            Фиг. 8.13 Битовая структура для графики 320*200
 
      Но байт 80 уже не содержит первые четыре точки строки 1. По
    причинам, которые объясняются конструкцией аппаратуры, четные и
    нечетные строки хранятся в разных концах графической памяти. Все
    нечетные строки имеют смещение 2000H байт от соответствующих четных
    строк. Поэтому строка 1 лежит в байтах от 2000H до 204FH. Строка 2
    - четная и находится по адресам от байта 50H до 9FH; строка 3
    находится по адресам от 2050H до 209FH, и так далее.
 
      На Фиг. 8.12в изображена программа, которая иллюстрирует
    структуру графической памяти. Эта программа рисует диагональную
    линию на дисплее 320*200. Линия начинается в точке (0, 0), верхнем
    левом углу, и идет до точки (199, 199), в самый низ и слегка правее
    центра. Первая часть программы вводит дисплей в режим APA среднего
    разрешения с помощью вызова программы BIOS. В следующей главе
    рассматривается, как это делается.
      В программе регистр DI используется в качестве указателя
    нужного байта в буфере дисплея. В целом программа выводит 200
    точек. В регистр BL загружается число 50, так как внутренний цикл
    пишет по четыре точки за одну итерацию. В регистр CL заносится 2 -
    значение счетчика переключений. Цикл заносит в регистр AL код 0C0H,
    что устанавливает старшие два бита на цвет 3; остальные три точки
    байта имеют цвет 0, т.е. цвет фона. После записи этого байта
    регистр AL сдвигается вправо на 2 бита, и теперь активизируется
    вторая точка байта. Прибавление значения 2000H к содержимому
    регистра DI смещает указатель на нечетную строку. Третья точка
    снова получается сдвигом регистра AL и вычитанием числа (2000H -
    80) из содержимого регистра DI. Это возвращает регистр DI назад в
    четную строку, но уже на следующие 80 байт. Наконец, после записи
    четвертого байта, регистр DI снова возвращается в четное поле, но
    еще и увеличивается, смещаясь тем самым на следующий байт строки
    растра. В примере цикл работает с четырьмя байтами, так как на
    каждый байт приходится четыре элемента.