Исследование возможностей работы с цветом в низкоуровневом программировании - Студенческий научный форум

XIII Международная студенческая научная конференция Студенческий научный форум - 2021

Исследование возможностей работы с цветом в низкоуровневом программировании

Шелухо М.В. 1, Абрамова О.Ф. 1
1Волжский политехнический институт (филиал) ВолгГТУ
 Комментарии
Текст работы размещён без изображений и формул.
Полная версия работы доступна во вкладке "Файлы работы" в формате PDF

Введение

Программы написанные на низкоуровневом языке программирования могут быть очень эффективны, в сравнении с такой же программой, написанной на высокоуровневом языке. К сожалению, чем сложнее становится наш код, тем сложнее писать и поддерживать низкоуровневый код.

Ассемблер, как главной представитель языков низкого уровня, всё ещё используется современными программистами, но это встречается всё реже и реже, особенно это заметно при работе с графикой и цветом, которые являются неотъемлемой частью современного программного обеспечения.

Работа с цветом и графиком на ассемблере тоже имеет свои плюсы, рациональное использование процессора, видеоадаптера и памяти. Но данные преимущества с лихвой перевешивает главный недостаток, высокая сложность работы с видеоадаптером и процессором для манипулирования пикселями.

Графический режим работы на ассемблере

Язык ассемблера поддерживает несколько режимов работы, текстовый, режим по умолчанию, и графический, который используется для работы с графикой, цветом и изображениями. Для переключения системы в графический режим, ассемблер использует не функции подсистемы DOS, а нижний уровень операционной системы – базовую систему ввода-вывода (BIOS). В отличи от DOS, где к любой функции можно обращаться, используя единственное прерывание int 21h, BIOS за каждым компонентом ПК закрепляет собственное прерывание, к примеру работа с диском – int 13h, а необходимое нам работа с цветом, с помощью прерывания экрана – int 10h.

Для генерации цветных изображений ассемблер использует минимальные точки растра, которые называют пикселями ил пэлами. На первых графических адаптерах, существовал режим CGA, который имел всего 3 степени разрешения, для построения изображений:

Низкое разрешение – 100 строк по 160 точек, 1 точка = 4 бита. Каждая точка может иметь 1 из 16 стандартных цветов.

Среднее разрешение – 200 строк по 320 токе. 1 точка = 2 бита. Каждая точка может иметь 1 из 4 стандартных цветов.

Высокое разрешение – 200 строк по 640 точек. 1 точка = 1 бит. Каждая точка может иметь 1 из 2 стандартных цветов, то есть монохромный вывод.

Такие ограничения вызваны ограниченным размеров видеопамяти. В современных графических адаптерах такие ограничения отсутствуют, благодаря новым видеорежимам, например Direct color, который поддерживает 16.8 миллионов различных цветов, где для кодирования каждого пикселя используется 3 байта (24 бита), но так как обработать 3 байта 1 командой невозможно, добавляется 4 пустой бит.

Функции BIOS не позволяют работать с графическими примитивами, поэтому для рисования чего-бы то ни было, необходимо напрямую работать с цветом каждого пикселя. Для того чтобы разобраться как это работает, рассмотрим пример кода, который выводит на экран горизонтальную линию:

mov АН,00h ;(1) Функция задания режима

mov AL,10h ;(2) Выбираем графический режим EGA

int 10h ;(3) Вызов BIOS

; Рисование прямой происходит в цикле, путём изменения X

mov SI,145 ;(4) Задаём начальную координату по X

mov CX,280 ;(5) Число точек по горизонтали

line:

push CX ;(6) Сохраним его в стеке

mov AX,0Ch ;(7) Функция вывода пиксела

mov AL,4 ;(8) Задаём цвет, 4 - красный

mov ВН,0 ;(9) Видеостраница

mov CX,SI ;(10) Задаём координату X, (переменная)

mov DX,180 ;(11) Задаём координату Y, (const)

int 10h ;(12) Вызов BIOS

inc SI ;(13) Увеличиваем значение координаты X на 1

pop CX ;(14) Восстановим счетчик шагов

loop line ;(15) Цикл из CX шагов

;Остановим программу для наблюдения результата ее работы

mov АН,08h ;(16) Функция ввода с клавиатуры без эха

int 21h ;(17) Вызов DOS

; Переключим видеоадаптер назад в текстовый режим

mov АН,00h ;(18) Функция задания режима

mov AL,03h ;(19) Текстовый режим

int 10h ;(20) Вызов BIOS

Строчки 1-3 позволяет перевести видеоадаптер в графический режим. Причём, если вы заметили тип режима устанавливается в регистр AL, который может хранить 256 различных комбинаций, а значит всего может существовать 263 различных режимов работы видеоадаптера. Рисование изобретения происходит в цикле, строки 6-15. Для вывода на экран цветной точки, используется команда mov AX, 0Ch прерывания 10h, которая настраивается занесением в регистр AL кода цвета, а в регистр BH, номера видеостраницы.

Рассмотрим подробнее функцию mov AX, 0Ch. В графическом режиме EGA, доступны 2 видеостраницы, видимая (0 – по умолчанию) и невидимая (1) , а также имеется поддержка 64 цветов, хотя в каждый момент времени изображении может содержать не более 16 цветов из стандартной цветовой палитры EGA, которая задаётся программно (рисунок 1).

Рисунок 1 – Cтандартная цветовая палитра EGA

Заключение

Работа с графикой на ассемблере напрямую связана с попиксельным изменением цвета изображения, а также низкоуровневой работой с видеоадаптером. Где нам нужно вручную выбирать графический режим, от которого зависит, как максимально доступное разрешение, так и количество цветов, с которыми мы можем работать. Причём не стоит забывать, что не каждый видеоадаптер поддерживает необходимый вам режим, а следовательно, для каждой конфигурации компьютера нужна собственная версия программы.

Высокоуровневые языки программирования избавляют нас от этой рутины, компилятор сам выбирает необходимый режим, а нам как программисту, используя специальные функции, остаётся манипулировать цветами и графическими примитивами.

Список литературы

Кузнецов А.Е. Исследование методов цветного графического вывода с помощью ассемблера / А.Е. Кузнецов, О.Ф. Абрамова // Студенческий научный форум – 2020: доклады XII Международной студенческой научной конференции. Направление «Технические науки» (секция «Актуальные проблемы компьютерной визуализации») / Российская академия естествознания (РАЕ). - Москва, 2020. - URL: https://scienceforum.ru/2020/article/2018018028

Фомичев Е.А. Графический ввод–вывод на языке Ассемблер [Электронный ресурс] / Е.А. Фомичев, О.Ф. Абрамова // Студенческий научный форум – 2019: доклады XI международной студенческой электронной научной конференции. Направление «Технические науки» (секция «Актуальные проблемы компьютерной визуализации») / РАЕ. - Москва, 2019. - Режим доступа: https://scienceforum.ru/2019/forum.

CodeNet Графика SVGA. Программирование современных видеокарт в реальном и виртуальном режимах. [Электронный ресурс] // URL: http://www.codenet.ru/progr/video/vbe-svga.php

AllBest Программирование вывода в цветном графическом режиме на ассемблере. [Электронный ресурс] // URL: https://revolution.allbest.ru/programming/00330696_0.html

TDOC.ru Справочник программиста на персональном компьютере фирмы IBM. Вывод на терминал. [Электронный ресурс] // URL: http://www.tdoc.ru/c/programming/assembler/assembler-programming-terminal-output.html

Просмотров работы: 0