Консультация № 159426
02.02.2009, 20:34
0.00 руб.
0 8 1
Здравствуйте, уважаемые эксперты низкоуровневого программирования . Недавно обратились люди, просили помочь с асмом, точнее с заданиями для экзамена. Обратились "во-время"....как говорится нужно вчера. Я согласился посмотреть, как бы ни к чему себя не обязывая, то есть что -то подсказать, объяснить если что-то непонятно, при условии, что мне предоставят инфу, которая давалась во время данного курса, что бы самому ее не искать. Информация действительно была "информативная" (пардон за тавтологию) - это само задание Отказывать уже поздно, и времени нет всвязи с работой. В приложении приведу сами задания. Не могли бы вы подсказать некоторые основные моменты для решения этой задачи? По большому счету я думаю программа (-мы) элементарная (-ые), только есть кое какие не совсем понятные моменты, а именно:
1) 13h- я так понимаю режим текстовый, то есть минимальная выводимая единица на монитор - это знакоместо а не пиксель (точка). Просто было все таки немного времени порыться в инете и кое что нашел, но это ввело меня в заблуждение: если это текстовый режим получается 2 этих задания придется "рисовать" в псевдографике? И если честно я вообще не помню что при изучении асма в институте мы что-то рисовали пикселями, поэтому почему то сложилось у меня мнение что асм, точнее рижимы биоса (если не ошибаюсь 10h прерывание) кроме текстового режим не поддерживают больше никакие другие, хотя я понимаю что это глупость
2) и вторая непонятная штука для меня - это таблица цветов ЦАП - ну не помню я ее
Не могли бы, уважаемые эксперты навести на "путь истинный"? Буду очень признателен как за ссылки, так и за простое объяснение, в частности о структуре данной таблице цветов и ее смещении (как ее найти), и пожалуйста немного о графическом режиме 13h.
Заранее благодарен

Приложение:
Требуется продемонстрировать следующие знания, умения, навыки.
1. Создать программу (TurboPascal с ассемблерными вставками или ассемблер), которая переключает экран в режим 13h, устанавливает для кода цвета 100 в таблице цветов ЦАП (цифро-аналогового преобразователя) зеленый цвет максимальной интенсивности, и рисует вертикаль цветом с кодом 100.
2. Создать программу (TurboPascal с ассемблерными вставками или ассемблер), которая переключает экран в режим 13h, и рисует на экране простейший узор (например, шахматная доска)

Обсуждение

давно
Старший Модератор
31795
6196
02.02.2009, 22:37
общий
это ответ
Здравствуйте, Arshvin!

Шахматная доска в приложении (задание №2). По программе: программа написана для встроенного ассемблера ТР 7.0. Использованна прямая запись в видеобуфер.
Скачайте книгу: Кулаков В. - Программирование на аппаратном уровне.
В ней Вы найдете много полезной информации по программированию железа, в том числе и программирование ЦАП видеокотролера.

Удачи!

Приложение:
begin
asm
{сохраняем ссегментный регистр и ставим режим}
push es
mov ax,13h
int 10h
{будем писать прямо в видео-буфер}
mov ax,0a000h
mov es,ax
cld
{пропускаем нулевую строку}
mov di,320
mov bx,0ffffh
mov cx,8
{количество строк по 16-ть пикселей по вертикали}
@001: push cx
mov cx,16
{количество пикселей в одной строке по вертикали}
@002: push cx
mov cx,8
{количество клеток в одной строке}
@003: mov dx,bx
push cx
mov cx,16
{количество пикселей в одной клетке, по горизонтали}
@004: xor ax,ax
shr dx,1
jc @005
add al,100
@005: stosb
loop @004
{меняем цвет}
xor bx,0ffffh
pop cx
loop @003
{корректируем на начало экрана}
add di,192
pop cx
loop @002
{меняем цвет повторно}
xor bx,0ffffh
pop cx
loop @001
pop es
{нажмите любую клавишу}
xor ax,ax
int 16h
end;
end.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Неизвестный
02.02.2009, 22:39
общий
13h режим это 320*200*256 цветов графика
найдите книгу в интернете точно выложена
Фролов А.В., Фролов Г.В. "Программирование видеоадаптеров EGA, VGA и SVGA" там вся информация есть
давно
Старший Модератор
31795
6196
02.02.2009, 22:47
общий
Описание режимов из книги:

Удачи!
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

давно
Посетитель
7438
7205
03.02.2009, 02:29
общий
Вот ссылочка на книжку Фроловых
Удачи!
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен
Неизвестный
03.02.2009, 11:45
общий
Большое спасибо всем откликнувшимся на мой вопрос. Очень сильно помогли.
давно
Старший Модератор
31795
6196
03.02.2009, 12:08
общий
Arshvin:
Добавил решение первой задачи: программирование регистра ЦАП:
Код:
begin
asm
{сохраняем ссегментный регистр и ставим режим}
push es
mov ax,13h
int 10h
{будем писать прямо в видео-буфер}
mov ax,0a000h
mov es,ax
cld
{пропускаем нулевую строку}
mov di,320
mov bx,0ffffh
mov cx,8
{количество строк по 16-ть пикселей по вертикали}
@001: push cx
mov cx,16
{количество пикселей в одной строке по вертикали}
@002: push cx
mov cx,8
{количество клеток в одной строке}
@003: mov dx,bx
push cx
mov cx,16
{количество пикселей в одной клетке, по горизонтали}
@004: xor ax,ax
shr dx,1
jc @005
add al,100
@005: stosb
loop @004
{меняем цвет}
xor bx,0ffffh
pop cx
loop @003
{корректируем на начало экрана}
add di,192
pop cx
loop @002
{меняем цвет повторно}
xor bx,0ffffh
pop cx
loop @001
{первая задача}
xor ax,ax
int 16h

{читаем регистр 100}
mov ax,1015h
mov bx,100
int 10h
{устанавливаем зеленный для регистра 100}
xor dh,dh
xor cl,cl
mov ch,0ffh
mov bx,100
mov ax,1010h
int 10h
{рисуем вертикальную линию, где-то по центру}
mov di,160
mov cx,200
@000: mov al,100
mov es:[di],al
add di,320
loop @000
pop es
{нажмите любую клавишу}
xor ax,ax
int 16h
end;
end.

Задачи выполняются последовательно.
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Неизвестный
03.02.2009, 12:39
общий
Спасибо большое. Первую сделал, посмотрев по книге этот ЦАП и уже отдал "нуждающимся" (так же как и вторую) Правда незнаю как они будут объяснять почему например использовали такие а не другие команды (ну например цепочечные stosb) - хотя это уже не мои вопросыЕще раз благодарен за помощь
давно
Старший Модератор
31795
6196
03.02.2009, 13:02
общий
Об авторе:
Мне безразлично, что Вы думаете о обо мне, но я рад за Вас - Вы начали думать.

Форма ответа