Реферат по предмету "Информатика, программирование"


Вирізання картинок з екрану та запис їх в 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 (клавіша Print Screen) та 28h (переривання при якомувідбувається збереження екрану). Потім вона залишається резидентною в пам’яті.
Принатисканні клавіші Print Screen встановлюється ознака про її натиснення. КолиДОС звільняється і виконує переривання 28, то при встановленій ознацівідбувається збереження екрану. Створюється або обнулюється файл, визначаєтьсяпоточний режим екрану і спосіб запису, з разі текстового режиму у файлзаписується зміст відеопам’яті у вигляді рядків, а у разі графічного –заповнюється структура BMP файлу, визначається палітра, і все це разом зізмістом графічної області відеопам’яті записується у файл. Після цього файлзакривається і обробка завершується.
5.Системні вимогиПроцесор: 80286 абостарший.
Пам’ять:640 К або більше
Екран:CGA або вище длятексту, VGA і вище для графіки
ОС: MS-DOS 4.0 або вище
6.Інструкція користувачаДля початку роботипрограми треба запустити файл GRABBER.COM. Програма встановить свою резидентну частину і завершиться. Для зберіганнятекстового або графічного екрану треба натиснути клавішу Print Screen. У разі текстового режиму у поточному каталозі з’явиться файл dump.txt зі змістом екрану, а у разі графічного режиму320х200х256 – файл dump.bmp. Для вивантаження програми з пам’яті можна використати функції оболонки VC.

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

Використаналітература
 
1. Том Сван «ОсвоениеTurbo Assembler»
2. Роберт Журден «Справочник программиста наперсональном компьютере фирмы IBM»
3. Абель П. «МоваАсемблера для IBM PC та програмування»

Лістингпрограми
grabber.asm
modeltiny
286
includegrabber.inc
code
org100h
start:
jmpinital
old_int28_treaterdd 0
ready_to_writedb 0
filename_bmpdb 'dump.bmp', 0
filenamedb 'dump.txt', 0
handledw 0
data db0
col dw0
row dw0
bmp_headerBITMAPFILEHEADER
bmp_infoBITMAPINFOHEADER
bmp_rgbRGBQUAD
;–
; створенняBMP файлу
create_file_bmpproc
; створитифайл
mov ah,3ch
xorcx, cx
movdx, offset filename_bmp
pushds
pushcs
popds
int21h
popds
movword ptr cs: [handle], ax; хендл на файл
ret
create_file_bmpendp
; створенняфайлу
create_fileproc
; створитифайл
mov ah,3ch
xorcx, cx
movdx, offset filename
pushds
pushcs
popds
int21h
popds
movword ptr cs: [handle], ax; хендл на файл
ret
create_fileendp
;–

; закриттяфайлу
close_fileproc
mov ah,3eh
movbx, word ptr cs: [handle]
int21h
ret
close_fileendp
;–
; перехопитирежим 320x200x256 (13h)
mode_13hproc
callcreate_file_bmp
; запистаблицi заголовка bmp
movword ptr cs: [bmp_header.bfType], 4d42h
movword ptr cs: [bmp_header.bfReserved1], 0
movword ptr cs: [bmp_header.bfReserved2], 0
movword ptr cs: [bmp_header.bfSize], 0fe36h
movword ptr cs: [bmp_header.bfSize+2], 0
movword ptr cs: [bmp_header.bfOffbits], 0436h
movword ptr cs: [bmp_header.bfOffbits+2], 0
; запистаблицi iнформацiї
movword ptr cs: [bmp_info.biSize], 28h
movword ptr cs: [bmp_info.biWidth], 140h
movword ptr cs: [bmp_info.biHeight], 0c8h
movword ptr cs: [bmp_info.biSize+2], 0
movword ptr cs: [bmp_info.biWidth+2], 0
movword ptr cs: [bmp_info.biHeight+2], 0
movword ptr cs: [bmp_info.biPlanes], 1
movword ptr cs: [bmp_info.biBitCount], 8
movword ptr cs: [bmp_info.biCompression], 0
movword ptr cs: [bmp_info.biSizeImage], 0
movword ptr cs: [bmp_info.biXPelsPerMeter], 0b40h
movword ptr cs: [bmp_info.biYPelPerMeter], 0b40h
movword ptr cs: [bmp_info.biClrUsed], 100h
movword ptr cs: [bmp_info.biClrImportant], 0
movword ptr cs: [bmp_info.biCompression+2], 0
movword ptr cs: [bmp_info.biSizeImage+2], 0
movword ptr cs: [bmp_info.biXPelsPerMeter+2], 0
movword ptr cs: [bmp_info.biYPelPerMeter+2], 0
movword ptr cs: [bmp_info.biClrUsed+2], 0
movword ptr cs: [bmp_info.biClrImportant+2], 0
; записBITMAPFILEHEADER
movcx, size bmp_header
mov ah,40h
movbx, word ptr cs: [handle]
pushds
pushcs
popds
movdx, offset bmp_header
int21h
popds
;======================================================
; записBITMAPINFOHEADER
movcx, size bmp_info
mov ah,40h
movbx, word ptr cs: [handle]
pushds
pushcs
popds
movdx, offset bmp_info
int21h
popds
;======================================================
; отриманняi запис палiтри
mov cx,256
xorsi, si
SAVE_P:
pushcx
; дiстаємопалiтру
mov dx,03c8h
movax, si
incsi
outdx, al
incdx
in al,dx
shl al,2
movbyte ptr cs: [bmp_rgb.rgbBlue], al
in al,dx
shl al,2
movbyte ptr cs: [bmp_rgb.rgbGreen], al
in al,dx
shl al,2
movbyte ptr cs: [bmp_rgb.rgbRed], al
movbyte ptr cs: [bmp_rgb.rgbRserved], 0

; пишемопалiтру – 1 колiр
movcx, size bmp_rgb
mov ah,40h
movbx, word ptr cs: [handle]
pushds
pushcs
popds
movdx, offset bmp_rgb
int21h
popds
popcx
loopSAVE_P
;======================================================
; теперзаписуємо графiчнi данi
pushes
pushds
pushcs
popds
mov dx,0a000h
moves, dx
movbx, word ptr cs: [handle]
movdx, offset data
mov cx,200
rows_b:
; ///////////
movword ptr cs: [row], cx
pushcx
mov cx,320
cols_b:; ///////////
pushax
mov ax,320
subax, cx
movword ptr cs: [col], ax
popax
pushcx
mov cx,1
; обчисленнязмiщення
pushdx
pushax
pushbx
mov ax,320
movbx, word ptr cs: [row]
mulbx
addax, word ptr cs: [col]
movsi, ax
popbx
popax
popdx

moval, es: [si]
movbyte ptr cs: [data], al
mov ah,40h
int21h
popcx
add si,2
loopcols_b
; ///////////
popcx
; ///////////
looprows_b
popds
popes
callclose_file
ret
mode_13hendp
;–
; перехопититекстовий режим
mode_textproc
callcreate_file
pushes
pushds
pushcs
popds
mov dx,0b800h
moves, dx
xorsi, si
movbx, word ptr cs: [handle]
movdx, offset data
mov cx,25
rows:
; ///////////
pushcx
mov cx,80
cols:; ///////////
pushcx
mov cx,1
moval, es: [si]
movbyte ptr cs: [data], al
mov ah,40h
int21h
popcx
add si,2
loopcols
; ///////////
; запис10,13
mov cx,1
movbyte ptr cs: [data], 10
mov ah,40h
int21h
movbyte ptr cs: [data], 13
mov ah,40h
int21h
popcx
; ///////////
looprows
popds
popes
callclose_file
ret
mode_textendp
;–
int28_treater:;обробник int 28h
pusha
pushf
; перевiркачи є виклик до роботи
cmpbyte ptr cs: [ready_to_write], 1
jneexit_28
; обнулитипоказник
movbyte ptr cs: [ready_to_write], 0
; починаєтьсяобробка

mov ah,0fh
int10h
; вal – режим
cmp al,3
jnecase_2
callmode_text; text_mode_3
jmpexit_28
case_2:
cmp al,13h
jnecase_3
callmode_13h; 320x200x256_13h
jmpexit_28
case_3:
; вихiд
exit_28:
popf
popa
jmpdword ptr cs: [old_int28_treater]
;–
int5_treater:;обробник клавiшi PrintScreen
movbyte ptr cs: [ready_to_write], 1
iret
rezident_end:
;–
; ГОЛОВНАТОЧКА ВХОДУ У ПРОГРАМУ
greetingdb 10,10,10,10,13,'Press PRINT_SCREEN to grab text screen or graphic!', 10,10,10,'$'
inital:
pushcs
popds
movdx, offset greeting
mov ah,9h
int21h
; посадкарезидента на int 5h
xorax, ax
movds, ax
cli
movax, offset int5_treater
movword ptr ds: [5h*4], ax
pushcs
popax
movword ptr ds: [5h*4+2], ax
sti
; посадкарезидента на int 28h
movax, word ptr ds: [28h*4]
movword ptr cs: [old_int28_treater], ax
movax, word ptr ds: [28h*4+2]
movword ptr cs: [old_int28_treater+2], ax
cli
movax, offset int28_treater
movword ptr ds: [28h*4], ax
pushcs
popax
movword ptr ds: [28h*4+2], ax
sti
; Залишитисьрезидентно
movdx, offset rezident_end
shr dx,4
add dx,16
mov ah,31h
xoral, al
int21h
endstart

ФАЙЛз описом структур     grabber.inc
BITMAPFILEHEADERstruc
bfTypedw 0; // тип файла (для битового образа – BM)
bfSizedd 0; // размер файла в dword
bfReserved1dw 0; // не используется
bfReserved2dw 0; // не используется
bfOffbitsdd 0; // смещение данных битового образа от
; //заголовка в байтах
BITMAPFILEHEADERends
;======================================================
BITMAPINFOHEADERstruc
biSizedd 0; // число байт, занимаемых структурой
; //BITMAPINFOHEADER
biWidthdd 0; // ширина битового образа в пикселах
biHeightdd 0; // высота битового образа в пикселах
biPlanesdw 1; // число битовых плоскостей устройства
biBitCountdw 0; // число битов на пиксель
biCompressiondd 0; // тип сжатия
biSizeImagedd 0; // размер картинки в байтах
biXPelsPerMeterdd 0; // горизонтальное разрешение устройства,
; //пиксел/м
biYPelPerMeterdd 0; // вертикальное разрешение устройства,
; //пиксел/м
biClrUseddd 0; // число используемых цветов
biClrImportantdd 0; // число «важных» цветов
BITMAPINFOHEADERends
;======================================================
RGBQUADstruc
rgbReddb 0; // интенсивность красного
rgbGreendb 0; // интенсивность зеленого
rgbBluedb 0; // интенсивность голубого
rgbRserveddb 0; // не используется
RGBQUADends


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

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.