Всё сдал! - помощь студентам онлайн Всё сдал! - помощь студентам онлайн

Реальная база готовых
студенческих работ

Узнайте стоимость индивидуальной работы!

Вы нашли то, что искали?

Вы нашли то, что искали?

Да, спасибо!

0%

Нет, пока не нашел

0%

Узнайте стоимость индивидуальной работы

это быстро и бесплатно

Получите скидку

Оформите заказ сейчас и получите скидку 100 руб.!


Вирізання картинок з екрану та запис їх в BMP форматі (для графіки) і TXT форматі (для тексту)

Тип Реферат
Предмет Информатика и программирование
Просмотров
1141
Размер файла
28 б
Поделиться

Ознакомительный фрагмент работы:

Вирізання картинок з екрану та запис їх в BMP форматі (для графіки) і TXT форматі (для тексту)

Міністерство освіти та науки України

Кіровоградський Державний Технічний університет

Кафедра програмного забезпечення

КУРСОВА РОБОТА

з дисципліни

«Програмування мовою ASM-86»

на тему:

«Вирізання картинок з екрану та запис їх в BMPформаті (для графіки) і TXT форматі (для тексту)»


Зміст

Завдання

Вступ

1. Постановка задачі

2. Обґрунтування методу розв’язку

3. Алгоритм програми

4. Реалізація програми

5. Системні вимоги

6. Інструкція користувача

Висновок

Використана література

Лістинг програми


Вступ

При роботі буває необхідно «перехопити» текстову або графічну інформацію, яку виводять на екран різні програми, в текстовий або графічний файл для подальшої обробки. Для такої мети використовують резидентні програми.

Для роботи нам знадобиться опис заголовку ВМР-файла. Його можна знайти в додатку (в лістингу файла grabber.inc).

1. Постановка задачі

Розробити резидентну програму на асемблері, яка дозволить перехопити зміст текстового та графічного екрану у файл (відповідно TXT і BMP).

2. Обґрунтування вибору методів розв’язку задачі

Для того, щоб записувати зміст екрану, будемо читати його з відеопам’яті. Для роботи з файлами можна використовувати функції ОС (з переривання 21h). Але при використанні функцій ДОС з обробника переривань виникає проблема нереентерабельності ДОС (тобто не можна викликати сервіс ДОС під час роботи будь-якої її функції). Тому використовується перехоплення не документованого переривання ДОС 28h, яке викликається в той момент, коли система вільна. В цей час можна викликати функції.

Графічних режимів дуже багато. Для реалізації виберемо режим 3 (текстовий) і 13h (графічний – режим 320х200х256 кольорів).

3. Алгоритм програми

1. Встановити обробники переривань 5 і 28h.

2. Залишити резидент в пам'яті.

Обробка переривання 5.

1. Встановити змінну, яка сигналізує про натиснення клавіші, в 1.

Обробка переривання 28.

1. Визначити режим екрану.

2. Відкрити файл на запис.

3. У разі текстового файлу записати побайтно зміст відеопам’яті у файл і перейти на п. 5.

4. У разі графіки заповнити структуру заголовка ВМР-файла, записати палітру і всі графічні дані у файл. Графіка записується, починаючи з лівого нижнього кута екрану.

5. Закрити файл.

6. Стоп

4. Реалізація програми

Після запуску програма встановлює обробник на переривання 5 (клавіша PrintScreen) та 28h (переривання при якому відбувається збереження екрану). Потім вона залишається резидентною в пам’яті.

При натисканні клавіші PrintScreen встановлюється ознака про її натиснення. Коли ДОС звільняється і виконує переривання 28, то при встановленій ознаці відбувається збереження екрану. Створюється або обнулюється файл, визначається поточний режим екрану і спосіб запису, з разі текстового режиму у файл записується зміст відеопам’яті у вигляді рядків, а у разі графічного – заповнюється структура BMP файлу, визначається палітра, і все це разом зі змістом графічної області відеопам’яті записується у файл. Після цього файл закривається і обробка завершується.

5. Системні вимоги

Процесор: 80286 або старший.

Пам’ять: 640 К або більше

Екран: CGA або вище для тексту, VGA і вище для графіки

ОС: MS-DOS 4.0 або вище

6. Інструкція користувача

Для початку роботи програми треба запустити файл GRABBER.COM. Програма встановить свою резидентну частину і завершиться. Для зберігання текстового або графічного екрану треба натиснути клавішу PrintScreen. У разі текстового режиму у поточному каталозі з’явиться файл dump.txtзі змістом екрану, а у разі графічного режиму 320х200х256 – файл dump.bmp. Для вивантаження програми з пам’яті можна використати функції оболонки VC.


Висновок

Отже, завдяки виконанню роботи продемонстровано методи створення резидент них програм, використання функцій MS-DOS в обробнику переривань завдяки не документованому перериванню 28, розглянута структура графічних файлів формату ВМР.


Використана література

1. Том Сван «Освоение Turbo Assembler»

2. Роберт Журден «Справочник программиста на персональном компьютере фирмы IBM»

3. Абель П. «Мова Асемблера для IBM PC та програмування»


Лістинг програми

grabber.asm

model tiny

286

include grabber.inc

code

org 100h

start:

jmp inital

old_int28_treater dd 0

ready_to_write db 0

filename_bmp db 'dump.bmp', 0

filename db 'dump.txt', 0

handle dw 0

data db 0

col dw 0

row dw 0

bmp_header BITMAPFILEHEADER <>

bmp_info BITMAPINFOHEADER <>

bmp_rgb RGBQUAD <>

;–

; створення BMP файлу

create_file_bmp proc

; створити файл

mov ah, 3ch

xor cx, cx

mov dx, offset filename_bmp

push ds

push cs

pop ds

int 21h

pop ds

mov word ptr cs: [handle], ax; хендл на файл

ret

create_file_bmp endp

; створення файлу

create_file proc

; створити файл

mov ah, 3ch

xor cx, cx

mov dx, offset filename

push ds

push cs

pop ds

int 21h

pop ds

mov word ptr cs: [handle], ax; хендл на файл

ret

create_file endp

;–


; закриття файлу

close_file proc

mov ah, 3eh

mov bx, word ptr cs: [handle]

int 21h

ret

close_file endp

;–

; перехопити режим 320x200x256 (13h)

mode_13h proc

call create_file_bmp

; запис таблицi заголовка bmp

mov word ptr cs: [bmp_header.bfType], 4d42h

mov word ptr cs: [bmp_header.bfReserved1], 0

mov word ptr cs: [bmp_header.bfReserved2], 0

mov word ptr cs: [bmp_header.bfSize], 0fe36h

mov word ptr cs: [bmp_header.bfSize+2], 0

mov word ptr cs: [bmp_header.bfOffbits], 0436h

mov word ptr cs: [bmp_header.bfOffbits+2], 0

; запис таблицi iнформацiї

mov word ptr cs: [bmp_info.biSize], 28h

mov word ptr cs: [bmp_info.biWidth], 140h

mov word ptr cs: [bmp_info.biHeight], 0c8h

mov word ptr cs: [bmp_info.biSize+2], 0

mov word ptr cs: [bmp_info.biWidth+2], 0

mov word ptr cs: [bmp_info.biHeight+2], 0

mov word ptr cs: [bmp_info.biPlanes], 1

mov word ptr cs: [bmp_info.biBitCount], 8

mov word ptr cs: [bmp_info.biCompression], 0

mov word ptr cs: [bmp_info.biSizeImage], 0

mov word ptr cs: [bmp_info.biXPelsPerMeter], 0b40h

mov word ptr cs: [bmp_info.biYPelPerMeter], 0b40h

mov word ptr cs: [bmp_info.biClrUsed], 100h

mov word ptr cs: [bmp_info.biClrImportant], 0

mov word ptr cs: [bmp_info.biCompression+2], 0

mov word ptr cs: [bmp_info.biSizeImage+2], 0

mov word ptr cs: [bmp_info.biXPelsPerMeter+2], 0

mov word ptr cs: [bmp_info.biYPelPerMeter+2], 0

mov word ptr cs: [bmp_info.biClrUsed+2], 0

mov word ptr cs: [bmp_info.biClrImportant+2], 0

; запис BITMAPFILEHEADER

mov cx, size bmp_header

mov ah, 40h

mov bx, word ptr cs: [handle]

push ds

push cs

pop ds

mov dx, offset bmp_header

int 21h

pop ds

;======================================================

; запис BITMAPINFOHEADER

mov cx, size bmp_info

mov ah, 40h

mov bx, word ptr cs: [handle]

push ds

push cs

pop ds

mov dx, offset bmp_info

int 21h

pop ds

;======================================================

; отримання i запис палiтри

mov cx, 256

xor si, si

SAVE_P:

push cx

; дiстаємо палiтру

mov dx, 03c8h

mov ax, si

inc si

out dx, al

inc dx

in al, dx

shl al, 2

mov byte ptr cs: [bmp_rgb.rgbBlue], al

in al, dx

shl al, 2

mov byte ptr cs: [bmp_rgb.rgbGreen], al

in al, dx

shl al, 2

mov byte ptr cs: [bmp_rgb.rgbRed], al

mov byte ptr cs: [bmp_rgb.rgbRserved], 0


; пишемо палiтру – 1 колiр

mov cx, size bmp_rgb

mov ah, 40h

mov bx, word ptr cs: [handle]

push ds

push cs

pop ds

mov dx, offset bmp_rgb

int 21h

pop ds

pop cx

loop SAVE_P

;======================================================

; тепер записуємо графiчнi данi

push es

push ds

push cs

pop ds

mov dx, 0a000h

mov es, dx

mov bx, word ptr cs: [handle]

mov dx, offset data

mov cx, 200

rows_b:

; ///////////

mov word ptr cs: [row], cx

push cx

mov cx, 320

cols_b:; ///////////

push ax

mov ax, 320

sub ax, cx

mov word ptr cs: [col], ax

pop ax

push cx

mov cx, 1

; обчислення змiщення

push dx

push ax

push bx

mov ax, 320

mov bx, word ptr cs: [row]

mul bx

add ax, word ptr cs: [col]

mov si, ax

pop bx

pop ax

pop dx


mov al, es: [si]

mov byte ptr cs: [data], al

mov ah, 40h

int 21h

pop cx

add si, 2

loop cols_b

; ///////////

pop cx

; ///////////

loop rows_b

pop ds

pop es

call close_file

ret

mode_13h endp

;–

; перехопити текстовий режим

mode_text proc

call create_file

push es

push ds

push cs

pop ds

mov dx, 0b800h

mov es, dx

xor si, si

mov bx, word ptr cs: [handle]

mov dx, offset data

mov cx, 25

rows:

; ///////////

push cx

mov cx, 80

cols:; ///////////

push cx

mov cx, 1

mov al, es: [si]

mov byte ptr cs: [data], al

mov ah, 40h

int 21h

pop cx

add si, 2

loop cols

; ///////////

; запис 10,13

mov cx, 1

mov byte ptr cs: [data], 10

mov ah, 40h

int 21h

mov byte ptr cs: [data], 13

mov ah, 40h

int 21h

pop cx

; ///////////

loop rows

pop ds

pop es

call close_file

ret

mode_text endp

;–

int28_treater:; обробник int 28h

pusha

pushf

; перевiрка чи є виклик до роботи

cmp byte ptr cs: [ready_to_write], 1

jne exit_28

; обнулити показник

mov byte ptr cs: [ready_to_write], 0

; починається обробка


mov ah, 0fh

int 10h

; в al – режим

cmp al, 3

jne case_2

call mode_text; text_mode_3

jmp exit_28

case_2:

cmp al, 13h

jne case_3

call mode_13h; 320x200x256_13h

jmp exit_28

case_3:

; вихiд

exit_28:

popf

popa

jmp dword ptr cs: [old_int28_treater]

;–

int5_treater:; обробник клавiшi PrintScreen

mov byte ptr cs: [ready_to_write], 1

iret

rezident_end:

;–

; ГОЛОВНА ТОЧКА ВХОДУ У ПРОГРАМУ

greeting db 10,10,10,10,13,'Press PRINT_SCREEN to grab text screen or graphic!', 10,10,10,'$'

inital:

push cs

pop ds

mov dx, offset greeting

mov ah, 9h

int 21h

; посадка резидента на int 5h

xor ax, ax

mov ds, ax

cli

mov ax, offset int5_treater

mov word ptr ds: [5h*4], ax

push cs

pop ax

mov word ptr ds: [5h*4+2], ax

sti

; посадка резидента на int 28h

mov ax, word ptr ds: [28h*4]

mov word ptr cs: [old_int28_treater], ax

mov ax, word ptr ds: [28h*4+2]

mov word ptr cs: [old_int28_treater+2], ax

cli

mov ax, offset int28_treater

mov word ptr ds: [28h*4], ax

push cs

pop ax

mov word ptr ds: [28h*4+2], ax

sti

; Залишитись резидентно

mov dx, offset rezident_end

shr dx, 4

add dx, 16

mov ah, 31h

xor al, al

int 21h

end start

ФАЙЛ з описом структур grabber.inc

BITMAPFILEHEADER struc

bfType dw 0; // тип файла (для битового образа – BM)

bfSize dd 0; // размер файла в dword

bfReserved1 dw 0; // не используется

bfReserved2 dw 0; // не используется

bfOffbits dd 0; // смещение данных битового образа от

; // заголовка в байтах

BITMAPFILEHEADER ends

;======================================================

BITMAPINFOHEADER struc

biSize dd 0; // число байт, занимаемых структурой

; //BITMAPINFOHEADER

biWidth dd 0; // ширина битового образа в пикселах

biHeight dd 0; // высота битового образа в пикселах

biPlanes dw 1; // число битовых плоскостей устройства

biBitCount dw 0; // число битов на пиксель

biCompression dd 0; // тип сжатия

biSizeImage dd 0; // размер картинки в байтах

biXPelsPerMeter dd 0; // горизонтальное разрешение устройства,

; // пиксел/м

biYPelPerMeter dd 0; // вертикальное разрешение устройства,

; // пиксел/м

biClrUsed dd 0; // число используемых цветов

biClrImportant dd 0; // число «важных» цветов

BITMAPINFOHEADER ends

;======================================================

RGBQUAD struc

rgbRed db 0; // интенсивность красного

rgbGreen db 0; // интенсивность зеленого

rgbBlue db 0; // интенсивность голубого

rgbRserved db 0; // не используется

RGBQUAD ends


Нет нужной работы в каталоге?

Сделайте индивидуальный заказ на нашем сервисе. Там эксперты помогают с учебой без посредников Разместите задание – сайт бесплатно отправит его исполнителя, и они предложат цены.

Цены ниже, чем в агентствах и у конкурентов

Вы работаете с экспертами напрямую. Поэтому стоимость работ приятно вас удивит

Бесплатные доработки и консультации

Исполнитель внесет нужные правки в работу по вашему требованию без доплат. Корректировки в максимально короткие сроки

Гарантируем возврат

Если работа вас не устроит – мы вернем 100% суммы заказа

Техподдержка 7 дней в неделю

Наши менеджеры всегда на связи и оперативно решат любую проблему

Строгий отбор экспертов

К работе допускаются только проверенные специалисты с высшим образованием. Проверяем диплом на оценки «хорошо» и «отлично»

1 000 +
Новых работ ежедневно
computer

Требуются доработки?
Они включены в стоимость работы

Работы выполняют эксперты в своём деле. Они ценят свою репутацию, поэтому результат выполненной работы гарантирован

avatar
Математика
История
Экономика
icon
159599
рейтинг
icon
3275
работ сдано
icon
1404
отзывов
avatar
Математика
Физика
История
icon
156450
рейтинг
icon
6068
работ сдано
icon
2737
отзывов
avatar
Химия
Экономика
Биология
icon
105734
рейтинг
icon
2110
работ сдано
icon
1318
отзывов
avatar
Высшая математика
Информатика
Геодезия
icon
62710
рейтинг
icon
1046
работ сдано
icon
598
отзывов
Отзывы студентов о нашей работе
63 457 оценок star star star star star
среднее 4.9 из 5
Тгу им. Г. Р. Державина
Реферат сделан досрочно, преподавателю понравилось, я тоже в восторге. Спасибо Татьяне за ...
star star star star star
РЭУ им.Плеханово
Альберт хороший исполнитель, сделал реферат очень быстро, вечером заказала, утром уже все ...
star star star star star
ФЭК
Маринаааа, спасибо вам огромное! Вы профессионал своего дела! Рекомендую всем ✌🏽😎
star star star star star

Последние размещённые задания

Ежедневно эксперты готовы работать над 1000 заданиями. Контролируйте процесс написания работы в режиме онлайн

Подогнать готовую курсовую под СТО

Курсовая, не знаю

Срок сдачи к 7 дек.

только что
только что

Выполнить задания

Другое, Товароведение

Срок сдачи к 6 дек.

1 минуту назад

Архитектура и организация конфигурации памяти вычислительной системы

Лабораторная, Архитектура средств вычислительной техники

Срок сдачи к 12 дек.

1 минуту назад

Организации профилактики травматизма в спортивных секциях в общеобразовательной школе

Курсовая, профилактики травматизма, медицина

Срок сдачи к 5 дек.

2 минуты назад

краткая характеристика сбербанка анализ тарифов РКО

Отчет по практике, дистанционное банковское обслуживание

Срок сдачи к 5 дек.

2 минуты назад

Исследование методов получения случайных чисел с заданным законом распределения

Лабораторная, Моделирование, математика

Срок сдачи к 10 дек.

4 минуты назад

Проектирование заготовок, получаемых литьем в песчано-глинистые формы

Лабораторная, основы технологии машиностроения

Срок сдачи к 14 дек.

4 минуты назад

2504

Презентация, ММУ одна

Срок сдачи к 7 дек.

6 минут назад

выполнить 3 задачи

Контрольная, Сопротивление материалов

Срок сдачи к 11 дек.

6 минут назад

Вам необходимо выбрать модель медиастратегии

Другое, Медиапланирование, реклама, маркетинг

Срок сдачи к 7 дек.

7 минут назад

Ответить на задания

Решение задач, Цифровизация процессов управления, информатика, программирование

Срок сдачи к 20 дек.

7 минут назад
8 минут назад

Все на фото

Курсовая, Землеустройство

Срок сдачи к 12 дек.

9 минут назад

Разработка веб-информационной системы для автоматизации складских операций компании Hoff

Диплом, Логистические системы, логистика, информатика, программирование, теория автоматического управления

Срок сдачи к 1 мар.

10 минут назад
11 минут назад

перевод текста, выполнение упражнений

Перевод с ин. языка, Немецкий язык

Срок сдачи к 7 дек.

11 минут назад
planes planes
Закажи индивидуальную работу за 1 минуту!

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

«Всё сдал!» — безопасный онлайн-сервис с проверенными экспертами

Используя «Свежую базу РГСР», вы принимаете пользовательское соглашение
и политику обработки персональных данных
Сайт работает по московскому времени:

Вход
Регистрация или
Не нашли, что искали?

Заполните форму и узнайте цену на индивидуальную работу!

Файлы (при наличии)

    это быстро и бесплатно