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


Переглядач для файлів різних типів, з визначенням типу файлу по розширенню і, відповідно, способу перегляду (txt, hex, bin)

Міністерствоосвіти та науки УкраїниКіровоградський Державний Технічний університет
Кафедрапрограмного забезпечення
Курсоваробота
здисципліни “Програмування на мові ASM-86”
натему:
“Переглядач для файлів різних типів, з визначенням типу файлу порозширенню і, відповідно, способу перегляду (txt, hex, bin)”

Зміст
Вступ
1.        Постановказадачі
2.        Обґрунтуваннявибору методів розв’язку задачі
3.        Алгоритмпрограми
4.        Реалізаціяпрограми
5.        Системнівимоги
6.        Інструкціядля користувача
Висновки
Використана література
Лістинг програми

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

1. Постановка задачі
Необхіднорозробити програму-переглядач файлів у різному вигляді – війковому,шістнадцятеричному або текстовому, тип перегляду повинен визначатися зарозширенням файлу.
2. Обґрунтування виборуметодів розв’язку задачі
Для роботи звідео зручно використовувати прямий доступ до відеопам’яті, оскільки такийспосіб має високу ефективність. Для роботи з файлами – функції ДОС (21переривання).
Для обробкиклавіатури будемо використовувати функції прокрутки зображення. Ці функції дляспрощення будуть різними для різних типів файлів, оскільки необхідно по-різномуобчислювати зміщення при прокрутці і по-різному відображати інформацію.
Для програмивикористовується модель “small” пам’яті, цього достатньо для невеликих файлів.
3. Алгоритм програми
1. Введення імені файла.
2. Визначеннятипу файла за символами в розширенні.
3. Читання змістуфайла в пам’ять.
4. Очікуваннянатиснення клавіші.
5. Якщо натиснутаклавіша “сторінка вгору”, то 24 рази викликати ф-цію прокрутки вгору на 24рядки.
6. Якщо натиснутаклавіша “сторінка вниз”, то 24 рази викликати ф-цію прокрутки вниз на 24 рядки.
7. Якщо натиснутаклавіша “вниз”, то збільшити вказівник кадру на довжину верхнього рядка.
8. Якщо натиснутаклавіша “вгору”, то зменшити вказівник кадру на довжину рядка, який знаходитьсянад верхнім рядком (поза кадром).
9. Відобразитиновий кадр на екран.
10. Якщонатиснута клавіша ESC, тозавершити програму.
11. Перейти на п.4. і продовжити роботу.
4. Реалізація програми
Після початкуроботи програма запитує користувача про ім’я файла, який треба переглянути іробить спробу відкрити його. Якщо нема помилки, то з імені визначається йоготип і у змінні в програмі заноситься інформація про тип. Введення з клавіатуриздійснюється з використанням функцій DOS.
При переглядівикористовується запис текстової інформації у відеопам’ять.
Після відкриття ічитання файла програма чекає на натиснення клавіші. Використовуєтьсяпереривання 16 – функція 0. Потім аналізується код клавіші. Якщо код = 1(вихід), то програма завершує роботу. Обробляються також клавіші “вгору”,“вниз”, “сторінка вгору” і “сторінка вниз”. Програма містить 3 групи функційдля кожного типу перегляду, кожна з яких містить по 3 функції: відображення наекрані поточного кадру, прокрутка зображення вгору і вниз.
Програма міститьвказівник, який показує відстань від початку тексту до початку поточного кадру.При прокрутці вниз він збільшується (якщо досягне довжини 32000 – стає 0), апри прокрутці вгору – зменшується (якщо 0, то стоїть на місці – прокруткинемає). При натисненні клавіш “сторінка вгору” і “сторінка вниз” прокруткавідбувається на 24 рядки у відповідному напрямку.

5. Системні вимоги
Програма будепрацювати на комп’ютері з процесором 80386 і старшим, 640 К і більше пам’яті,монітором CGA і вище. Необхідний дисковийнакопичувач.6.Інструкція для користувача
Для того, щобпереглянути файл, необхідно запустити на виконання файл thbview.exe. На екран буде виведено запит навведення імені файлу, який існує на диску. Можна ввести також і шлях. Якщо невиникне помилки, то після вводу на екрані з’явиться зміст файла у виглядірядків тексту (файл TXT),шістнадцятеричного коду (файл HEX) або війкового формату (зображення всіх службових символів – BIN). Для переміщення можнавикористовувати клавіші “вгору”, “вниз”, “PgUp”, “PgDn”. Для виходу натисніть клавішу ESC.
При досягненнінижньої границі тексту перегляд буде переведено на початок файла. А придосягненні верхньої границі прокрутка здійснюватись не буде.
Розмір файлаповинен бути меншим за 32 кілобайти.

Висновки
Отже, завдякивиконанню роботи, створена програма – переглядач для невеликих текстових файлівз розширеннями TXT(текстовий файл), HEX(шістнадцятеричний формат) та BIN (бінарний). Проілюстровані можливості виведення на екран на асемблері,роботу з файлами та пам’яттю. Програма має вигляд EXE-файла і невибаглива до ресурсівмашини.

Використаналітература
1. Том Сван. Освоение Turbo Assembler. М., Діалектика, 1996
2. Зубков Д.Д. Программирование на Assembler для DOS, WINDOWS и UNIX. М., ДМК, 2000

Лістингпрограми
 
.model compact
.386
.stack 1000
.data
file           db      32767 dup(0)
handle         dw      0
errmsg         db      'Помилка читання!$'
msg_enter      db      'Введiть iм`я файла (.txt, .bin, .hex): $'
filename       db      40 dup(0)
filelength     dw      0
filetype        db     2       ;2-txt,0-hex,1-bin
filepointer    dw      0      ; вказiвник на початок кадра
.code
start:
        jmp begin
;==================================T X T
; показ дампа длявигляду txt
showtxtdump    proc
        pusha
       ; очистка
        movax,0b800h
        mov es,ax
        cld
        movcx,2000
        xor di,di
        movax,0700h
        rep stosw
        movbx,word ptr fs:[filepointer]
        addbx,offset file
        movbp,offset file
        addbp,32767
        xor si,si
        xor di,di
txt_l:  moval,byte ptr fs:[bx]
        inc bx
        cmp al,10
        je tskip
        cmp al,13
        jne tput
        addsi,80*2
        shl di,1
        sub si,di
        xor di,di
        jmp tskip
tput:
        mov byteptr es:[si],al
        add si,2
        inc di
tskip:
        cmp bx,bp
        jbtxt_loop
        movbx,offset file
        mov wordptr fs:[filepointer],0
txt_loop:
        cmpsi,4000
        jb txt_l
        cmp bx,bp
        jb txt_sav
        sub bx,bp
txt_sav:
        popa
        ret
showtxtdump    endp
;=================================================
scroll_downtxt    proc
        pusha
       ; пiдраховуємо довжину 1 рядка
        movbx,word ptr fs:[filepointer]
        addbx,offset file
        xor dx,dx
no_len:
        inc dx
        cmp byteptr fs:[bx],10
        je len_ok
        inc bx
        cmp dx,80
        jb no_len
len_ok:
        movbx,word ptr fs:[filepointer]
        mov ax,bx
        addax,offset file+32767
        sub ax,dx
        cmp bx,ax
        jaetok_scru
        add bx,dx
tok_scru:
        mov wordptr fs:[filepointer],bx
        callshowtxtdump
        popa
        ret
scroll_downtxt    endp
;=================================================
scroll_uptxt    proc
        pusha
       ; пiдраховуємо довжину 1 рядка
        movbx,word ptr fs:[filepointer]
        addbx,offset file-2
        xor dx,dx
uno_len:
        inc dx
        cmp byteptr fs:[bx],13
        jeulen_ok
        dec bx
        cmp dx,80
        jbuno_len
ulen_ok:
        movbx,word ptr fs:[filepointer]
        cmp bx,dx
        ja tok_up
        mov bx,dx
tok_up:
        sub bx,dx
        mov wordptr fs:[filepointer],bx
        callshowtxtdump
        popa
        ret
scroll_uptxt    endp
;=================================
scroll_pgdntxtproc
        pusha
        mov cx,24
tsdn:    callscroll_downtxt
        loop tsdn
        popa
        ret
scroll_pgdntxtendp
;=================================
scroll_pguptxtproc
        pusha
        mov cx,24
tsdu:    callscroll_uptxt
        loop tsdu
        popa
        ret
scroll_pguptxtendp
;==================================H E X
; показ дампа длявигляду hex
showhexdump    proc
        pusha
        movcx,20*25
        movbx,word ptr fs:[filepointer]
        addbx,offset file
        movbp,offset file
        addbp,32767
        movax,0b800h
        mov es,ax
        xor si,si
        xor di,di
hex_l:  moval,byte ptr fs:[bx]
        inc bx
        mov dl,al
        and dl,15
        adddl,30h
        cmpdl,39h
        jbe h_1
        add dl,7
h_1:
        mov byteptr es:[si+2],dl
       ;==============
        mov dl,al
        shr dl,4
        adddl,30h
        cmpdl,39h
        jbe h_2
        add dl,7
h_2:
        mov byteptr es:[si],dl
        mov byteptr es:[si+4],0
        add si,6
        inc di
        cmp di,20
        jneok_hex
        xor di,di
        addsi,(80-3*20)*2
ok_hex:
        cmp bx,bp
        jbhex_loop
        movbx,offset file
        mov wordptr fs:[filepointer],0
hex_loop:
        loophex_l
        cmp bx,bp
        jbhex_sav
        sub bx,bp
hex_sav:
        popa
        ret
showhexdump    endp
;=================================================
scroll_downhex    proc
        pusha
        movbx,word ptr fs:[filepointer]
        mov ax,bx
        addax,offset file+32767-20
        cmp bx,ax
        jaehok_scru
        add bx,20
hok_scru:
        mov wordptr fs:[filepointer],bx
        callshowhexdump
        popa
        ret
scroll_downhex    endp
;=================================================
scroll_uphex    proc
        pusha
        movbx,word ptr fs:[filepointer]
        cmp bx,20
        ja hok_up
        mov bx,20
hok_up:
        sub bx,20
        mov wordptr fs:[filepointer],bx
        callshowhexdump
        popa
        ret
scroll_uphex    endp
;=================================
scroll_pgdnhexproc
        pusha
        mov cx,24
hsdn:    callscroll_downhex
        loop hsdn
        popa
        ret
scroll_pgdnhexendp
;=================================
scroll_pguphexproc
        pusha
        mov cx,24
hsdu:    callscroll_uphex
        loop hsdu
        popa
        ret
scroll_pguphexendp
;==================================B I N
; показ дампа длявигляду bin
showbindump    proc
        pusha
        movcx,2000
        movbx,word ptr fs:[filepointer]
        addbx,offset file
        movbp,offset file
        addbp,32767
        mov ax,0b800h
        mov es,ax
        xor si,si
bin_l:  moval,byte ptr fs:[bx]
        mov byteptr es:[si],al
        inc bx
        cmp bx,bp
        jbbin_loop
        movbx,offset file
        mov wordptr fs:[filepointer],0
bin_loop:
        inc si
        inc si
        loopbin_l
        cmp bx,bp
        jbbin_sav
        sub bx,bp
bin_sav:
        popa
        ret
showbindump    endp
;=================================================
scroll_downbin    proc
        pusha
        movbx,word ptr fs:[filepointer]
        mov ax,bx
        addax,offset file+32767-80
        cmp bx,ax
        jaeok_scru
        add bx,80
ok_scru:
        mov wordptr fs:[filepointer],bx
        callshowbindump
        popa
        ret
scroll_downbin    endp
;=================================================
scroll_upbin    proc
        pusha
        movbx,word ptr fs:[filepointer]
        cmp bx,80
        ja ok_up
        mov bx,80
ok_up:
        sub bx,80
        mov wordptr fs:[filepointer],bx
        callshowbindump
        popa
        ret
scroll_upbin    endp
;=================================
scroll_pgdnbinproc
        pusha
        mov cx,24
sdn:    callscroll_downbin
        loop sdn
        popa
        ret
scroll_pgdnbinendp
;=================================
scroll_pgupbinproc
        pusha
        mov cx,24
sdu:    callscroll_upbin
        loop sdu
        popa
        ret
scroll_pgupbinendp
;==================================
getfilename proc
        pusha
       ; введенняiменi файла
        push fs
        pop ds
        movdx,offset msg_enter
        mov ah,9
        int 21h
        movbx,offset filename
ent_l:  mov ah,1
        int 21h
        cmp al,13
        mov byteptr ds:[bx],al
        inc bx
        cmp al,13
        jne ent_l
        dec bx
        mov byteptr ds:[bx],0
       ; визначення типу файла
        movbx,offset filename
        dec bx
name_s: inc bx
        moval,byte ptr fs:[bx]
        cmp al,0
        jnename_s
        sub bx,2
        movah,byte ptr fs:[bx]
        moval,byte ptr fs:[bx+1]
        cmpax,6578h                    ;HEX
        jneother1
        mov byteptr fs:[filetype],1
        jmptyp_exit
other1:
        cmpax,696eh                    ;BIN
        jne other2
        mov byteptr fs:[filetype],0
        jmptyp_exit
other2:
        mov byteptr fs:[filetype],2    ;TXT
typ_exit:
        popa
        ret
getfilename endp
;==================================
readfile proc
        pusha
        ;open
        movah,3dh
        xor al,al
        push fs
        pop ds
        movdx,offset filename
        int 21h
        jcread_error
        mov bx,ax
        ;read
        movah,3fh
        movcx,32767
        push fs
        pop ds
        mov dx,offsetfile
        int 21h
        jcread_error
        mov wordptr fs:[filelength],ax
        ;close
        movah,3eh
        movbx,word ptr fs:[handle]
        int 21h
        popa
        ret
read_error:
        push fs
        pop ds
        movdx,offset errmsg
        mov ah,9
        int 21h
        popa
        movah,4ch
        int 21h
readfile endp
;==================================
begin:
        xor ah,ah
        mov al,3
        int 10h
        movax,seg handle
        mov fs,ax
        callgetfilename
        callreadfile
        mov ah,5
        movch,48h
        int 16h
work:
        mov ah,0
        int 16h
        movbl,byte ptr fs:[filetype]
        cmpah,50h
        jnework_1
        cmp bl,0
        jne d1
        callscroll_downbin
        jmp work
d1:     cmp bl,1
        jne d2
        callscroll_downhex
        jmp work
d2:
        callscroll_downtxt
        jmp work
work_1:
        cmpah,48h
        jnework_2
        cmp bl,0
        jne u1
        callscroll_upbin
        jmp work
u1:     cmp bl,1
        jne u2
        callscroll_uphex
        jmp work
u2:
        callscroll_uptxt
        jmp work
work_2:
        cmpah,51h
        jnework_3
        cmp bl,0
        jne pd1
        callscroll_pgdnbin
        jmp work
pd1:    cmp bl,1
        jne pd2
        callscroll_pgdnhex
        jmp work
pd2:
        callscroll_pgdntxt
        jmp work
work_3:
        cmpah,49h
        jnework_4
        cmp bl,0
        jne pu1
        callscroll_pgupbin
        jmp work
pu1:    cmp bl,1
        jne pu2
        callscroll_pguphex
        jmp work
pu2:
        callscroll_pguptxt
        jmp work
work_4:
        cmp ah,1
        jne work
        movah,4ch
        int 21h
end start

Блок-схемаалгоритму
 
/>


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

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

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

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