Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная работа N4.doc
Скачиваний:
5
Добавлен:
11.07.2019
Размер:
79.36 Кб
Скачать

Лабораторная работа N4

Выход из всех программ по клавише Enter, Escape или Space.

В этой лабораторной работе для построения изображений использовать прямой доступ к видеопамяти (и в текстовых и в графических режимах) !!!

Во всех программах обработчик событий от мыши строить в виде подпрограммы пользователя к обработчику прерывания мыши !!!

Вариант 1

Написать программу, выводящую в текстовом видеорежиме весь набор ASCII символов (16 строк по 16 колонок). При этом на экран должны быть выведены линейки для строк и колонок – номера строк по левому краю таблицы, номера колонок сверху, номера в шестнадцатеричном виде.

Используя мышь выделять выбранный ASCII символ (изменением цвета фона, яркостью или инверсией), внизу таблицы выводить номер выбранного символа в десятичном виде. В данной программе курсор мыши отсутствует, при перемещении мыши меняется только выделенный символ.

Вариант 2

Написать программу, выводящую в реальном времени дамп памяти (содержимое памяти) с адреса, указанного в ES:SI. Содержимое памяти выводить в текстовом видеорежиме 80x25, числа выводятся в шестнадцатеричном виде строками по 32 байта. Всего вывести n байт памяти.

Вывести курсор мыши в виде выделенного знакоместа (можно использовать стандартный курсор), выводить адрес байта памяти (в шестнадцатеричном виде), на который указывает курсор или не выводить ничего, если курсор в неиспользуемой области памяти. C помощью колесика мыши осуществляется переход по строкам, должна быть регулировка чувствительности мыши и колесика.

n - до 100Мб.

Вариант 3

Используя видеорежим 320x200, 256 цветов на точку, вывести на экран все 256 цветов палитры. Каждый цвет выводится в виде вертикальной линии на всю высоту экрана.

Вывести курсор мыши в виде крестика, выводить номер цвета, над которым находится указатель мыши, в десятичном виде (в какой-нибудь части экрана). Если курсор мыши находится за пределами области экрана, где изображены цвета, номер цвета не выводить.

Вариант 4

Написать программу, выводящую в видеорежиме 320x200, 256 цветов на точку, курсор мыши в виде стрелочки, а также координаты курсора по центру экрана в десятичном виде. Координаты выводить, используя шрифт 8x8.

Вариант 5

Написать программу, выводящую в текстовом видеорежиме весь набор ASCII символов (16 строк по 16 колонок). Вывести курсор мыши в виде выделенного знакоместа (можно использовать стандартный курсор), если курсор мыши находится над одним из символов, вывести в текстовом режиме крупным планом этот символ текущим цветом. При выводе символа каждая включенная точка выводится в виде “*”, например символ “A” (при использовании шрифта 8x8):

“ “

“ **** “

“ * * “

“ * * “

“ ****** “

“ * * “

“ * * “

“ “

Вариант 6

Используя видеорежим 320x200, 256 цветов на точку, вывести на экран все 64 градации серого, которые способна воспроизвести VGA карта. Каждый цвет выводится в виде вертикальной линии на всю высоту экрана шириной в 4 точки.

Вывести курсор мыши в виде крестика, выводить номер градации серого, над которой находится указатель мыши, в десятичном виде (в какой-нибудь части экрана). Если курсор мыши находится за пределами области экрана, где изображены градации серого, номер не выводить.

Вариант 7

Написать программу, выводящую дамп памяти (содержимое памяти) с адреса, указанного в ES:SI. Содержимое памяти выводить в текстовом видеорежиме 80x25, числа выводятся в десятичном виде строками по 16 байт. Всего вывести 256 байт памяти (16 строк).

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

Вариант 8

Написать программу, выводящую в видеорежиме 320x200, 256 цветов на точку, весь набор ASCII символов (8 строк по 32 колонки), размер символов 8x8. Затем вывести курсор мыши (например в виде стрелки), если он попадет на один из выведенных символов, напечатать его увеличенным в 2 раза внизу набора ASCII символов.

Вариант 9

Написать программу, выводящую в видеорежиме 320x200, 256 цветов на точку, курсор мыши в виде крестика, а также координаты курсора по центру экрана в десятичном виде. Координаты выводить, используя шрифт 8x8.

Вариант 10

Написать программу, закрашивающую прямоугольную область заданным цветом в режиме 320x200, 256 цветов. Параметры прямоугольника заданы в области памяти по адресу DS:BX следующим образом:

dw Координата X левого верхнего угла, координата X правого нижнего угла;

db Координата Y левого верхнего угла, координата Y правого нижнего угла, интенсивность красного (0-63), зеленого, синего цвета;

Затем вывести курсор мыши (например в виде стрелки), с помощью которого выведенный прямоугольник должен “растягиваться” за углы при движении мыши с нажатой левой кнопкой. Т.е. углы прямоугольника можно “перетаскивать” мышью.

При этом параметры прямоугольника, заданные по адресу DS:BX, должны меняться соответствующим образом.

Вариант 11

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

Используя мышь выделять выбранный ASCII символ (изменением цвета фона, яркостью), внизу таблицы выводить номер выбранного символа в hex виде. В данной программе курсор мыши присутствует, при перемещении мыши меняется только выделенный символ.

Вариант 12

Используя видеорежим 320x200, 256 цветов на точку, вывести на экран все 256 цветов палитры. Каждый цвет выводится в виде горизонтальной линии на всю высоту экрана.

Вывести курсор мыши в виде стрелки, выводить номер цвета, над которым находится указатель мыши, в десятичном виде (в какой-нибудь части экрана). Если курсор мыши находится за пределами области экрана, где изображены цвета, номер цвета не выводить.

Вариант 13

Написать программу, выводящую в текстовом видеорежиме только латинский алфавит ASCII символов. Вывести курсор мыши в виде выделенного знакоместа (можно использовать стандартный курсор), если курсор мыши находится над одним из символов, вывести в текстовом режиме крупным планом этот символ текущим цветом. При выводе символа каждая включенная точка выводится в виде “*”, например символ “A” (при использовании шрифта 8x8):

“ “

“ **** “

“ * * “

“ * * “

“ ****** “

“ * * “

“ * * “

“ “

Вариант 14

Написать программу, выводящую в видеорежиме 320x200, 256 цветов на точку, курсор мыши в виде стрелки, а также координаты курсора по центру экрана в десятичном виде. Координаты выводить, используя шрифт 8x8.

Вариант 15

Написать программу, аналог Total Commander с основными функциями:

создать папку, создать файл, скопировать файл, переместить файл, удалить файл.

1 Строчка текущая директория; начиная с 3 список папок и файлов текущей директории.

Вариант 16

Используя видеорежим 320x200, 256 цветов на точку, вывести на экран все 64 градации серого, которые способна воспроизвести VGA карта. Каждый цвет выводится в виде вертикальной линии на всю высоту экрана шириной в 4 точки.

Вывести курсор мыши в виде крестика, выводить номер градации серого, над которой находится указатель мыши, в десятичном виде (в какой-нибудь части экрана). Если курсор мыши находится за пределами области экрана, где изображены градации серого, номер не выводить.

Вариант 17

Написать программу, выводящую в текстовом режиме набор строк, заданных следующим образом:

X1, Y1, “Содержимое строки 1”, 0,

.

.

.

Xn, Yn, “Содержимое строки n”, 0,0.

Здесь X1,…Xn и Y1…Yn – соответственно X и Y координаты начала каждой строки, 0 – маркер конца строки, 2 нуля подряд – маркер конца строк.

Затем вывести курсор мыши в виде выделенного знакоместа (можно использовать стандартный курсор), при попадании курсора на какую-либо строку она должна выделится (изменением цвета фона, яркостью или инверсией).

Вариант 18

Используя видеорежим 320x200, 256 цветов на точку, вывести на экран все 64 градации серого, которые способна воспроизвести VGA карта. Каждый цвет выводится в виде вертикальной линии на всю высоту экрана шириной в 4 точки.

Вывести курсор мыши в виде крестика, выводить номер градации серого, над которой находится указатель мыши, в десятичном виде (в какой-нибудь части экрана). Если курсор мыши находится за пределами области экрана, где изображены градации серого, номер не выводить.

Вариант 19

Используя видеорежим 320x200, 256 цветов на точку, вывести на экран все 64 градации серого, которые способна воспроизвести VGA карта. Каждый цвет выводится в виде горизонтальной линии на всю высоту экрана шириной в 8 точки.

Вывести курсор мыши в виде крестика, выводить номер градации серого, над которой находится указатель мыши, в hex виде (в какой-нибудь части экрана). Если курсор мыши находится за пределами области экрана, где изображены градации серого, номер не выводить.

Вариант 20

Написать программу, выводящую в видеорежиме 320x200, 256 цветов на точку, только латинский алфавит ASCII символов (8 строк по 32 колонки), размер символов 8x8. Затем вывести курсор мыши (например в виде стрелки), если он попадет на один из выведенных символов, напечатать его увеличенным в 2 раза внизу набора ASCII символов.

Вариант 21

Написать программу, которая по нажатию Alt - G сохранит содержимое экрана в графический файл.

Вариант 22

Написать программу, выводящую в видеорежиме 320x200, 256 цветов на точку, курсор мыши в виде кружка, а также координаты курсора по центру экрана в десятичном виде. Координаты выводить, используя шрифт 8x8.

Вариант 23

Написать программу, закрашивающую прямоугольную область заданным цветом в режиме 320x200, 256 цветов. Параметры прямоугольника заданы в области памяти по адресу DS:BX следующим образом:

dw Координата X левого верхнего угла, координата X правого нижнего угла;

db Координата Y левого верхнего угла, координата Y правого нижнего угла, интенсивность красного (0-63), зеленого(0-63), синего цвета(0-63);

Затем вывести курсор мыши (например в виде стрелки), с помощью которого выведенный прямоугольник должен “растягиваться” за углы при движении мыши с нажатой левой кнопкой. Т.е. углы прямоугольника можно “перетаскивать” мышью.

При этом параметры прямоугольника, заданные по адресу DS:BX, должны меняться соответствующим образом.

Список некоторых функций BIOS и DOS для работы с мышью

Прерывание 16h, функции 0, 10h, 20h – Чтение символа с клавиатуры с ожиданием

При вызове функции в регистры должна быть занесена следующая информация:

• в АH — код 00h (83/84-key), 10h (101/102-key), 20h (122-key);

После выполнения функции в регистрах будет возвращена следующая инфор­мация:

• в AL — ASCII-код символа, 0 или префикс скан-кода;

• в AH — скан-код нажатой клавиши или расширенный ASCII-код.

Прерывание 33h, функция 0000h: проверить наличие драйвера мыши и произвести сброс

Функция проверяет, загружен ли драйвер мыши в память компьютера, и, если драйвер загружен, выполняет общий сброс аппаратного и программного обеспе­чения мыши. При вызове функции в регистр АХ должен быть помещен код 0.

После выполнения функции в случае отсутствия драйвера в регистре АХ будет возвращено значение 0. При наличии драйвера мыши в регистрах будет разме­щена следующая информация:

• в АХ — код FFFFh;

• в ВХ — код типа мыши (FFFFh — стандартная мышь Microsoft с двумя клави­шами, любое другое значение — мышь не стандартная).

Параметры драйвера после сброса следующие:

• координаты курсора установлены на центр экрана;

• для отображения назначена видеостраница 0;

• курсор находится в невидимом состоянии, то есть не отображается на экране;

• курсору придана форма, действующая по умолчанию (в текстовых режимах — форма негативного прямоугольника, в графических режимах — форма стрелки);

• работа пользовательского обработчика сообщений мыши заблокирована;

• эмуляция светового пера разрешена;

• установлена чувствительность мыши к перемещению по горизонтали 8:8 микки на пиксель, по вертикали — 16:8 микки на пиксель;

• порог удвоения скорости равен 64 микки/с;

• область отображения курсора мыши охватывает весь экран.

Из всего перечисленного выше наиболее важным является то, что после сброса курсор на экран не отображается. При работе в текстовом режиме нужно вызвать функцию 0001h, чтобы курсор появился на экране. В современных графических режимах курсор средствами драйвера не отображается или отображается непра­вильно, поэтому с точки зрения драйвера он должен оставаться скрытым, то есть функцию 000lh вызывать нельзя.

Прерывание 33h, функция 0001h: отобразить курсор мыши на экране

Функция 0001h делает курсор мыши видимым. При вызове функции в регистр АХ должен быть помещен код 000lh.

Никаких выходных параметров функция не имеет. Применять данную функцию можно только в текстовых режимах.

Прерывание 33h, функция 0002h: убрать курсор мыши с экрана

Функция 0002h делает курсор мыши невидимым.

При вызове функции в регистр АХ должен быть помещен код 0002h.

Выходных параметров функция не имеет.

Как в текстовых, так и в графических режимах курсор накладывается поверх изоб­ражения, искажая его, поэтому перед выводом курсора драйвер запоминает уча­сток изображения под ним. Функция 0002h осуществляет стирание курсора и восстановление изображения. Данную функцию необходимо использовать перед перерисовкой изображения на экране или при перемещении курсора в другую позицию. Поскольку в современных графических режимах функция 000lh не работает, то не применяется и обратная ей функция 0002h.