Size: a a a

Ассемблер

2021 January 30

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
источник

D

Den in Ассемблер
Saenro T
Раз уж ты изучаешь как расставить пиксели на экране в режиме int 10h, #3, чтобы они образовали окружность, то полагаю что вскоре ты захочешь раскрасить эти пиксели по своему усмотрению.
И тут тебе на помощь придут VGA порты: 3C8h, 3C9h.
В этом режиме, в ДОСБОКСЕ, одновременно можно отобразить всего 256 цветов из 262144 возможных. Но в чистом ДОСе и в этом видеорежиме одновременно можно замутить до 64000 уникальных цветов, но это уже прибегая к некоторым хитростям.
Итак, цвета программируются последовательно, а значения RGB лучше задавать заранее (подготовить палитру) в памяти и в нужный момент программировать их через порт 3C9, туда через этот порт можно отправить до 768 байт.
Порт 3C8h — индексный, т.е. в него ты записываешь адрес от 0 до 255, начиная с которого нужно начинать записывать байты через порт 3C9h.
Вся прелесть в том, что тебе не нужно заморачиваться с инкрементом индекса в 3C8h, как только ты запишешь значение в 3C9h, в 3C8h автоматически произойдёт инкремент индекса. Поэтому если ты укажешь начальный адрес — 0 (из 256 возможных), то можешь последовательно отправлять в порт 3C9 все 768 байт.
Каждый адрес принимает последовательно три байта (R,G,B).
768 байт — это 256×3 ячеек, т.е. 256 для R, 256 для G, 256 для B. И программируются , цвета поочерёдно: (R,G,B),(R,G,B),(R,G,B)...
Каждый цвет программируется тремя значениями RGB, каждое из этих значений лежит в диапазоне от 0 до 3Fh, отсюда и ограничения на количество цветов 64^3=262144.
А поскольку ячеек 768, то 768/3=256 цветов.
А вот пример программирования VGA через эти порты:
mov dx, 3C8h
xor al, al
out dx, al — будем шить с самого начала.
inc dx — 3C9h
mov cx, 300h — 768 байт
mov si, — адрес палитры из 768 байт
rep outsb — зашить последовательно все 768 байт
В итоге каждый цвет пикселя будет определяться значением от 0 до FFh.
имеешь в виду что можно вывести 256 разных цветов пикселей одновременно на экран, выбрав их из палитры в 65535 возможных цветов? вот это от 0-63h это яркость я так понял от 0 до 100 для каждого цвета из трех? это фотошоповскую палитру напоминает кстати :)
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
0-63, 6 бит на компоненту цвета
источник

ST

Saenro T in Ассемблер
Den
имеешь в виду что можно вывести 256 разных цветов пикселей одновременно на экран, выбрав их из палитры в 65535 возможных цветов? вот это от 0-63h это яркость я так понял от 0 до 100 для каждого цвета из трех? это фотошоповскую палитру напоминает кстати :)
Нет. Без усилий ты можешь запрограммировать любые 256 цветов из 64^3=262144.
При этом яркость каждого цветового канала от 0 до 63.
С усилиями, можно всунуть 64000 из тех же 262144 уникальных цветов (т.е. каждый пиксель своим цветом).
Палитра 256 цветная. Но занимает в памяти в три раза больше места. 256×3=768.
источник

D

Den in Ассемблер
Saenro T
Нет. Без усилий ты можешь запрограммировать любые 256 цветов из 64^3=262144.
При этом яркость каждого цветового канала от 0 до 63.
С усилиями, можно всунуть 64000 из тех же 262144 уникальных цветов (т.е. каждый пиксель своим цветом).
Палитра 256 цветная. Но занимает в памяти в три раза больше места. 256×3=768.
а ошибся, 262144 цвета, что то в голове было откуда то 65535, да интересно и вроде не очень сложно, надо  запробовать :) Ну да я посмотрел, от 0-до63 в хексе это 100 уровней в dec скажем от самого темного красного до самого светлого 100 градаций, правильно я мыслю?
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
ограничение в 256 цветов в палитре VGA связано с ограничением регистров самого графического устройства. и вот этими in\out мы программируем эти регистры на определенные значения\цвета. и они 6 битные. поэтому и ограничения такие
источник

ST

Saenro T in Ассемблер
Den
а ошибся, 262144 цвета, что то в голове было откуда то 65535, да интересно и вроде не очень сложно, надо  запробовать :) Ну да я посмотрел, от 0-до63 в хексе это 100 уровней в dec скажем от самого темного красного до самого светлого 100 градаций, правильно я мыслю?
Не, яркость в диапазоне 0-3Fh, т.е. 64 уровня.
источник

D

Den in Ассемблер
Saenro T
Не, яркость в диапазоне 0-3Fh, т.е. 64 уровня.
а ты правильно там вверху написал, что значение каждого цвета лежит в пределах от 0 до 63h ? а то я его в dec перевел
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
Den
а ты правильно там вверху написал, что значение каждого цвета лежит в пределах от 0 до 63h ? а то я его в dec перевел
0-0% (черный), 63 - 100% яркости (синего,зеленого, красного)
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
при 100% ярокости каждой компоненты будет белый цвет
источник

ST

Saenro T in Ассемблер
Den
а ты правильно там вверху написал, что значение каждого цвета лежит в пределах от 0 до 63h ? а то я его в dec перевел
Да я там много чего уже подкорректировал с момента написания...)
источник

D

Den in Ассемблер
Saenro T
Да я там много чего уже подкорректировал с момента написания...)
а ну правильно, чтобы клевая инструкция получилась куда можно будет всегда заглянуть! :)
источник

D

DRONE in Ассемблер
Всем привет, извините за тупой вопрос почему тут ZF = 1 ?
Условие: mov AL, 11010011b
test AL, 0000b
Ответ к задачи : AL = 11010011b;
ZF = 1;
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
потому что and
источник

ЭR

Эрик Regent in Ассемблер
Слушай, а с таким условием у него же всегда 1 будет во флаге сброса?
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
да
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
источник

D

DRONE in Ассемблер
Я понял, спасибо вам большое :)
источник

A

Aiwan ╭∩╮ (òÓ,) ╭∩╮b... in Ассемблер
Эрик Regent
Слушай, а с таким условием у него же всегда 1 будет во флаге сброса?
а что за флаг сброса такой?
источник

D

DRONE in Ассемблер
CLC скорее всего про сброс
источник