Создание текстуры командой XOR
На ассемблере в графическом режиме VGA
Как сгенерировать интересную текстуру при помощи всего одной команды?! Ну хорошо, команд будет немного больше.
В качестве каркаса я использовал тот-же код, что и раньше. Если коротко, что делает программа:
- Устанавливает графический режим VGA с разрешением 320×200 точек и 256 цветов.
- Записывает палитру-градиент от чёрного к синему.
- Отрисовывает текстуру на весь экран.
- Ждёт нажатия клавиши.
Собственно шаг номер три, а именно процедура drawtex
(79-99 строки), содержит в себе два цикла.
Первый цикл для каждой из 200 линий экрана хранит свой счётчик в регистре DX
. Второй, для каждой из 320 точек линии, хранит свой счётчик в регистре CX
. В сердце этих циклов находится команда XOR
.
Команда XOR
выполняет операцию исключающего ИЛИ
между всеми битами двух операндов. Если сравниваемые биты равны, то результат будет 0
. И если сравниваемые биты отличаются, то результат будет 1
.
0 XOR 0 = 0
0 XOR 1 = 1
1 XOR 0 = 1
1 XOR 1 = 0
В качестве операндов используются счётчики циклов из регистров DX
и CX
, по сути координаты X
и Y
. А результат используется как индекс палитры-градиента, и записывается в экранную область по своим координатам.
Например, вот результат ксорок нескольких точек:
CX XOR DX = Color Index
-----------------------
91 XOR 61 = 102
92 XOR 61 = 97
91 XOR 62 = 101
92 XOR 62 = 98
А «специально» подобранная палитра создаёт вырвиглазный эффект!
Ниже полный листинг программы с комментариями.
|
|
Ну, красота же!