Запись в графический файл формата BMP

Описание работы программы, осуществляющей запись команд графического экрана в файл формата BMP. Изучение функции чтения 18-битовых значений из нескольких последовательно расположенных регистров таблицы цветов. Составление блок-схемы и текста программы.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 20.11.2012
Размер файла 198,1 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Содержание

1. Задание

2. Описание работы программы

3. Блок схемы

4. Текст программы

Список использованной литературы

1. Задание

Разработать программу, осуществляющую запись команд графического экрана в файл формата BMP.

2. Описание работы программы

Используемые прерывания

DOS, функция 09h int 21h Запись строки на стандартный вывод

Вход:

АН-09Н

DS:DX - адрес строки, заканчивающейся символом "$" (ASCII 24h)

Описание.

Строка, исключая завершающий ее символ "$", посылается на стандартный вывод.

DOS, функция 3Ch Создать файл через описатель

Вход:

АН-ЗСh

DS:DX - адрес строки ASCIZ с именем файла

СХ - атрибут файла

Выход:

CF=0, если функция выполнена успешно

АХ - описатель файла CF=1, если при выполнении функции возникли ошибки

АХ - код ошибки

DOS, функция 40h Писать в файл через описатель

Вход:

AH=40h

ВХ - описатель файла

DS:DX - адрес буфера, содержащего записываемые данные

СХ - число записываемых байт

Выход:

CF=0, если функция выполнена успешно

AX - число действительно записанных байт CF°1, если при выполнении функции возникли ошибки

AX - код ошибки

Описание.

СХ байт данных записываются в файл или на устройство с описателем, заданным в ВХ. Данные берутся из буфера, адресуемого через DS:DX, и записываются, начиная с текущей позиции указателя чтения/записи файла. Чтобы установить указатель файла, если необходимо, можно использовать функцию 42h. Обновляет указатель чтения/записи файла, чтобы подготовиться к последующим операциям чтения или записи.

DOS, функция 3Eh Закрыть описатель файла

Вход:

АН-ЗЕh ВХ - описатель файла

Выход:

CF=0, если функция выполнилась успешно

АХ не сохранен CF=1, если при выполнении функции возникли ошибки

АХ - код ошибки

Описание.

ВХ содержит описатель файла (handle), возвращенный при открытии. Файл, представленный этим описателем, закрывается, его буферы сбрасываются и оглавление обновляется корректными размером, временем и датой. Из-за недостатка описателей файлов (максимум 20, по умолчанию установлено 8), возможно, придется закрыть часть текущих описателей, как, например, описатель 3 (стандартный AUX).

DOS, функция 35h int 21h Получить вектор прерывания

Вход:

AH-35h AL - номер прерывания (OOh до FFh)

Выход:

ES:BX - адрес обработчика прерывания

Описание.

Возвращает значение вектора прерывания для INT (AL), то есть загру- жает в ВХ 0000:[AL*4], а в ES - 0000:[(AL*4)+2].

DOS, функция 25h Установить вектор прерывания

Вход:

AH=25h

AL - номер прерывания

DS:DX - вектор прерывания - адрес программы обработки прерывания

Описание. Устанавливает значение элемента таблицы векторов прерываний для прерывания с номером AL, равным DS:DX. Это равносильно записи 4-байтового адреса в 0000:(AL*4), но, в отличие от прямой записи, DOS знает, что происходит, и гарантирует, что в момент записи прерывания будут заблокированы. DOS, функция 31h int 21h Завершиться и остаться резидентным

Вход:

AH=31h

AL - код выхода

DX - объем памяти, оставляемой резидентной (в параграфах)

Описание.

Выходит в родительский процесс, сохраняя код выхода в AL. Код выхода можно получить через функцию 4Dh. DOS устанавливает начальное распределение памяти, как специфицировано в DX, и возвращает управление родительскому процессу, оставляя указанную память резидентной (число байт равно DX*16). Эта функция перекрывает функцию INT 27h, которая не возвращает код выхода и не способна установить резидентную программу, размер которой превышает 64Кбайт. Int 10h Чтение нескольких регистров таблицы цветов (регистров ЦАП) - подфункция 17h

Функция производит чтение 18-битовых значений из нескольких последовательно расположенных регистров таблицы цветов:

На входе:

AH

10h

AL

17h - чтение нескольких регистров таблицы цветов

BL

Номер первого регистра таблицы цветов (0 -255)

CX

Количество регистров для чтения (1-256)

ES:DX

Адрес буфера для таблицы цветов

На выходе:

ES:DX

Данные прочитанные из таблицы цветов

Таблица цветов содержит по три байта на один регистр таблицы цветов. В каждом байте значащими являются только младшие 6 бит.

3. Блок схемы

4. Текст программы

.model small

F5_key EQU 3fh; скан-код F5

.stack 100h

.data

din dw 0; флаг записи экрана 1-идет запись

int09old dd ?; хранит адрес перехваченного прерывания Int 09h

BMPFiledb 'scrgrb.bmp',0; имя файла

; BMP-файл (для изображения 320x200x256)

BMP_headerlabelbyte

; файловый заголовок

BMP_file_headerdb"BM"; сигнатура

ddbfsize; размер файла

dw0,0; 0

ddbfoffbits ; адрес начала BMP_data

; информационный заголовок

BMP_info_headerddbi_size; размер BMP_info_header

dd320; ширина

dd200; высота

dw1; число цветовых плоскостей

dw8; число битов на пиксель

dd0; метод сжатия данных

dd320*200; размер данных

dd0B13h; разрешение по X (пиксель на метр)72ppi

dd0B13h; разрешение по Y (пиксель на метр)72ppi

dd0; число используемых цветов (0 - все)

dd0; число важных цветов (0 - все)

bi_size = $-BMP_info_header; размер BMP_info_header

BMP_header_length = $-BMP_header; размер обоих заголовков

bfoffbits = $-BMP_file_header+256*4 ; размер заголовков + размер

; палитры

bfsize = $-BMP_file_header+256*4+320*200 ; размер заголовков +

; размер палитры + размер данных

Palette db 3*256-1 dup(0) ;для палитры

ePalette3 db 0;указ. на конец строки палитры полученой ф-й биос

db 255 dup(0)

ePalette4 db 0;указ. на конец сформированной палитры для записи в файл

info_mes db 'Copy text screen if press F5 in file "copy"','$'; строка о программе

.code

int09new PROC

push ds

push ax

mov ax, @data; установить в DS сегмент данных программы

mov ds, ax

in al,60h; получить сан-код нажатой клавиши

cmp al, F5_key; нажата клавиша F5

jz copy_file; если да, то начать запись экрана

pushf

call int09old; вызвать перехваченный обработчик Int 09h

pop ax

pop ds

iret

copy_file:

pushf

call int09old; вызвать перехваченный обработчик Int 09h

cmp din,1; проверить флаг записи в файл

jnz do_file; начать записывать файл

pop ax

pop ds

iret

do_file:

push bx; сохранить исп. регистры

push cx

push dx

push si

push di

push es

mov din,1

mov ax, 40h; установить ES на сег. окружение DOS (сег. с параметрами ОС)

mov es, ax

mov ah, byte ptr es:[49h]; номер текущего режима

;проверяем номер режима работать только в графическом 13h

cmp ah,13h

je gr_mode_good ; = если режим 13h

jmp exit

gr_mode_good:

mov ax, 3c00h+00100010b; 3ch создать файл

xor cx, cx

lea dx, BMPFile

int 21h

jc ferr; если произошла ошибка при работе с файлом

mov bx,ax ;дескриптор файла

mov ax, 4000h ; записать в файл заголовок

mov cx, BMP_header_length

lea dx, BMP_file_header

int 21h

jc ferr; если произошла ошибка при работе с файлом

push bx

push ds

pop es

movax,1017h ; Функция 1017h - чтение палитры VGA

movbx,0 ; начиная с регистра палитры 0,

movcx,256 ; все 256 регистров

movdx,offset Palette; начало палитры в BMP

int10h ; видеосервис BIOS

; перевести палитру из формата, в котором ее показывает функция 1017h

; (три байта на цвет, в каждом байте 6 значимых битов)

; в формат, используемый в BMP-файлах

; (4 байта на цвет, в каждом байте 8 значимых битов)

std; движение от конца к началу

movsi,offset ePalette3; SI - конец 3-байтной палитры

movdi, offset ePalette4; DI - конец 4-байтной палитры

movcx,256; CX - число цветов

adj_pal: moval,0

push cx

mov cx,2

stosb; записать четвертый байт (0)

lodsb; прочитать третий байт

shlal,cl; масштабировать до 8 битов

pushax

lodsb; прочитать второй байт

shlal,cl; масштабировать до 8 битов

pushax

lodsb; прочитать третий байт

shlal,cl; масштабировать до 8 битов

stosb; и записать эти три байта

popax; в обратном порядке

stosb

popax

stosb

pop cx

loopadj_pal

pop bx; дискриптор файла восстановить из стека

mov ax, 4000h ; записать в файл заголовок

mov cx, 256*4

mov dx, offset Palette

int 21h

jc ferr; если произошла ошибка при работе с файлом

push ds

mov ax, 0a000h; загрузить сегмент начала видеопамяти

mov ds, ax

mov dx,320*199; указывает на последную строку экрана

mov di,200; количество строк экрана

str_copy:

mov ax, 4000h ; записать в файл строку экрана

mov cx, 320

int 21h

jc ferr; если произошла ошибка при работе с файлом

sub dx,320; вычислить адрес следующей строки для записи

dec di; уменьшить счетчик строк для записи

jnz str_copy

pop ds

close_file:

mov ax,3e00h; закрыть файл

int 21h

jc ferr

ferr:

exit:

mov din,0;флаг занятости обнулить

pop es

pop di

pop si

pop dx

pop cx

pop bx

pop ax

pop ds

iret

int09new endp

.startup

mov ax,0900h; вывести информацию о программе

lea dx, info_mes

int 21h

mov ax,3509h ; получить адрес обработчика Int 09h

int 21h

mov word ptr int09old, bx; сохранить адрес ES:BX в переменной int09old

mov word ptr int09old+2, es

push ds

mov ax,@code

mov ds, ax

mov ax, 2509h ; установить новый обработчик Int 09h с адресом DS:DX

mov dx, offset int09new

int 21h

pop ds

mov dx, offset info_mes; размер сегмента данных для резидентной части

add dx, offset end_cs; размер сегмента кода

add dx,120h; для выравнивания на параграфы+PSP

mov cx,4

shr dx,cl; выразить размер программы в параграфах DX/16

mov ax,3100h ; оставим часть резидентной

int 21h

end_cs label byte

end

программа графический файл команда

Список использованной литературы

1. Джордан Ассемблер

2. Юров А. Н. Введение в ассемблер

3. П. Нортон Справочник по ассемблеру

4. Ризаев И. С. Конспект лекций по СПО

5. Электронные информационные ресурсы сети Интернет

Размещено на Allbest.ru


Подобные документы

  • Функции формирования массива времени. Формирование массива входного напряжения, массива выходного напряжения. Функция вывода таблицы, расчета заданной точности, вывода титульного листа. Запись в файл массива времени. Блок–схема и текст программы.

    курсовая работа [155,6 K], добавлен 22.04.2012

  • Описание типизированных файлов. Принципы работы с файлами, создание и открытие на запись нового файла. Чтение из файла, открытие существующего файла на чтение. Определение имени файла. Запись в текстовый файл. Описание множества и операции над ними.

    реферат [86,4 K], добавлен 07.02.2011

  • Блок-схема программы, подсчитывающей количество слов последовательности, начинающихся с большой буквы и оканчивающихся цифрой. Символьный квадратный массив и его заполнение. Создание программы, которая формирует файл записей заданной структуры.

    курсовая работа [529,7 K], добавлен 19.12.2010

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

    контрольная работа [35,9 K], добавлен 07.07.2012

  • Основы проверки и расчета входных данных и вывода выходных данных программы, их блок-схемы. Реализация функции считывания числовых данных из файла, управление (создание, уничтожение и редактирование) визуальными компонентами во время выполнения программы.

    контрольная работа [1,3 M], добавлен 12.06.2009

  • Запись в файл и чтение в С++. Общее понятие о структуре. Многомерные и двумерные массивы. Логика работы программы. Схема алгоритма функции Main. Определение суммарного заработка, сотрудника с наибольшей зарплатой. Создание новой базы, листинг программы.

    курсовая работа [275,7 K], добавлен 07.10.2012

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

    курсовая работа [29,3 K], добавлен 17.05.2013

  • Реализация программы-конвертера для создания на основе передаваемых dbf файлов файла формата XML (по заданному пользователем шаблону). Создание шаблонов при помощи кода и при помощи конструктора. Проектирование архитектуры программного продукта.

    дипломная работа [1,6 M], добавлен 27.06.2013

  • Описание используемых в программе операторов, процедур, функций. Директива include. Правила объявления и определения функций в СИ++. Блок-схема алгоритма программы. Подпрограммы чтения из файла и записи в файл. Использование заголовочных файлов.

    курсовая работа [346,8 K], добавлен 26.04.2012

  • Разработка различных программ для вычисления X и Y по формуле, для вычисления интеграла, для вычисления таблицы значений функции и для вычисления элементов вектора. Составление блок-схемы программы. Ввод значений, описание переменных и условия расчета.

    контрольная работа [148,1 K], добавлен 08.11.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.