49902 (Програма Txtprint.com - резидентна програма для швидкого і зручного друкування виборчого тексту з екрану), страница 2

2016-07-30СтудИзба

Описание файла

Документ из архива "Програма Txtprint.com - резидентна програма для швидкого і зручного друкування виборчого тексту з екрану", который расположен в категории "". Всё это находится в предмете "информатика" из 1 семестр, которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "информатика, программирование" в общих файлах.

Онлайн просмотр документа "49902"

Текст 2 страницы из документа "49902"

Другий можливий путь - просто відмінити оброботку преривання 23H, тобто змінити його вектор так, щоб він вказував на інструкцію IRET.

При виникнинні критичної помилки (звично це помилка диску) MS-DOS завантажує у регістри AX, DI, SI, BP інформацію про помилку ініцирує преривання 24H. Стандартний системний обробоник преривання веде себе слідуючим чином: видає на дісплей повідомлення про помилку і запит користувача - «Abort, Retry, File or Ignore?» («Прервати, Повторити, Зняти або Ігнорувати»), чекає відповіді і повертає управління функції DOS, при виконанні якої виникла помилка. Подальші дії операційної системи визначається змістом регістру AL(відповідь користувача).

4. Розрахунки та експеріментальні матеріали, що підтверджують вірність програмних рішень

Насправді, програма не має в собі ніяких математичних розрахунків, тільки простіші. Складність написання програми полягала у технічній реалізації поставленої задачі. Тому підтвердити вірність програмних рішень можливо було тільки експеріментально. Були проведені тести на можливу недостачу пам`яті, роботу у версіях DOS 3.2 й вище, також під емуляцією DOS у системі WINDOWS`95. Також програма пройшла тести на правильність друку, загальну роботу з принтером. Результати тестів підтверджують правильність роботи програми. Тести проводилися з EPSON-сумісними принтерами.

5. Основні висновки

Програма TXTPRINT.COM - програма для вибіркового друку тексту з екрану. Для того, щоб получити готовий COM - файл з тексту програми, треба виконати: TASM TXTPRINT.ASM, потім TLINK TXTPRINT.OBJ /T. Після цього запустити програму TXTPRINT.COM. Під час просмотру інформації на екрані, яку треба розпечатати треба натиснути ScrollLock. Після цього, користуючись клавишами курсору і ENTER помітити необхідний фрагмент тексту. Потім для розпечатки натиснути клавишу BackSpace, щоб почати розпечатувати, або ESC в разі, якщо текст був помічений неправильно. Після цього програма завершує своє роботу до наступного виклику по ScrollLock. Коли роботу з розпечаткою закінчено взагалі, можна вилучити програму TXTPRINT.COM з пам`яті за допомогою комбинації клавиш Ctrl+Alt+Esc. Програма повідомить про закінчення своєї роботи, і для того, щоб розпочати роботу програми знов, треба заново завантажувати TXTPRINT.COM.

Програма в процесі роботи змінює вектори преривань 08H, 09H, 28H, 2FH, 23H і 24H. Тому якщо після завантаження TXTPRINT.COM були також завантажені інші програми, використовуючи хоча б одне з цих преривань, то цю програму неможна буде вилучити з пам`яті доти, доки не будуть вилучені ті програми, а отже востановлені вектори цих преривань.

Перелiк скороченнь, символiв та спецiальних термiнiв

i т.д. - i так далi

i т.i. - i таке iнше

та iн. - та iншi

т.я. - так як

п. - пункт

ОС - операцiйна система

popup - резидентні програми, які викликаються користувачем

DOS - дискова операцiйна система

BIOS - базова система вводу/виводу

INT - переривання

PC - персональний комп'ютер

WINDOWS - операцiйна система

Список літератури

1. Р. Джордейн «Справочник программиста персональных компьютеров типа IBM PC» М: Мир, 1991р.

2. П. Абель «Мова асемблера для IBM PC та програмування.» М.: Вища школа,1992.

3. Р. Лей та "Уейт-Груп" «Написання драйверів для MS-DOS.» М.: Мир, 1995р.

4. Електронний спавочник «TeachHelp»

5. Конспект лекцій по системному програмуванню

Анотація

Програма TXTPRINT.COM - програма для вибіркового друку тексту з екрану. Для того, щоб получити готовий COM - файл з тексту програми, треба виконати: TASM TXTPRINT.ASM, потім TLINK TXTPRINT.OBJ /T. Після цього запустити програму TXTPRINT.COM. Під час просмотру інформації на екрані, яку треба розпечатати треба натиснути ScrollLock. Після цього, користуючись клавишами курсору і ENTER помітити необхідний фрагмент тексту. Потім для розпечатки натиснути клавишу BackSpace, щоб почати розпечатувати, або ESC в разі, якщо текст був помічений неправильно. Після цього програма завершує своє роботу до наступного виклику по ScrollLock. Коли роботу з розпечаткою закінчено взагалі, можна вилучити програму TXTPRINT.COM з пам`яті за допомогою комбинації клавиш Ctrl+Alt+Esc. Програма повідомить про закінчення своєї роботи, і для того, щоб розпочати роботу програми знов, треба заново завантажувати TXTPRINT.COM.

Програма в процесі роботи змінює вектори преривань 08H, 09H, 28H, 2FH, 23H і 24H. Тому якщо після завантаження TXTPRINT.COM були також завантажені інші програми, використовуючи хоча б одне з цих преривань, то цю програму неможна буде вилучити з пам`яті доти, доки не будуть вилучені ті програми, а отже востановлені вектори цих преривань.

Текст програми має дев`ять модулів. Їх текст, краткий опис та пояснення приводяться у додатках.

Додатки

Текст програми

; Файл TXTPRINT.ASM - основна програма

; Для створення готового продукту необхідно

; виповнити слідуючі команди:

; TASM TXTPRINT.ASM

; TLINK /t TXTPRINT.OBJ

;**************************************************

cr equ 13 ; символ "Возврат каретки".

lf equ 10 ; символ "Перевод строки".

start_offset equ 0b8h ; сміщення початку резидентної

; порції у сегменті команд

; і вершина внутрішнього стеку.

internal_flags record Sf:1,Rf:1,Af:1,Tf:1,Pf:1 ; набор прапорців

; 1=печать дозволена

; 1=Int_08h активна

; 1=программа активна

; 1=команда "удалити"

; 1=команда "стартувати"

.model tiny

.code

org 100h

entry:

jmp boot ; перейти на процедуру загрузки резиденту.

shift = offset callvideo - start_offset ; Величина

; сдвигу резидентної порції.

flags_offset = offset resident_sign - shift ; Сміщення прапорців

callvideo proc

; Обернутися до відео-BIOS.

push di

push si

push bp

int 10h

pop bp

pop si

pop di

ret

callvideo endp

sethandler proc

; Встановити обробник преривання.

push ax

mov ah,35h

int 21h

mov word ptr [di],bx

mov word ptr [di+2],es

pop ax

mov ah,25h

int 21h

ret

sethandler endp

resethandler proc

; Восстановити минулий обробник преривань.

push ds

mov dx,word ptr [di]

mov ds,word ptr [di+2]

mov ah,25h

int 21h

pop ds

ret

resethandler endp

include beep.asm

include typestr.asm

include message.asm

include remove.asm

include main.asm

include prepare.asm

include take&prn.asm

int_28h proc far

test byte ptr cs:[flags_offset],mask Sf or mask Rf

jz pass_28h ; Якщо небуло команди, то вихід.

test byte ptr cs:[flags_offset],mask Af or mask Tf

jnz pass_28h ; Якщо активна, то вихід.

or byte ptr cs:[flags_offset],mask Af

call prepare ; Запуск.

and byte ptr cs:[flags_offset],not(mask Sf or mask Rf or mask Af)

pass_28h: ; Передати управління ісходному обробнику.

jmp dword ptr cs:[int_28h_vect-shift]

int_28h_vect dd ?

int_28h endp

int_08h proc far

test byte ptr cs:[flags_offset],mask Tf or mask Af; or mask Df

jnz pass_08h ; Якщо активна, то вихід.

or byte ptr cs:[flags_offset],mask Tf ; Встановити

; признак активнисті Int_08h.

pushf ; Викликати ісходний

call dword ptr cs:[int_08h_vect-shift] ; обробник.

test byte ptr cs:[flags_offset],mask Sf or mask Rf

jz end_08h ; Якщо не було команды, то вихід.

push di ; Перевірити признак активности DOS.

push es

mov es,word ptr cs:[dos_flag_seg-shift]

mov di,word ptr cs:[dos_flag_off-shift]

test byte ptr es:[di],0ffh

pop es

pop di

jnz end_08h ; Якщо DOS активна, то вихід.

or byte ptr cs:[flags_offset],mask Af ; Встановити признак

; активности START.

call prepare ; Запуск.

and byte ptr cs:[flags_offset],not(mask Sf or mask Rf or mask Af)

end_08h:

and byte ptr cs:[flags_offset],not mask Tf ; Сбросити

iret ; признак активністи Int_08h.

pass_08h: ; Передати управління ісходному

jmp dword ptr cs:[int_08h_vect-shift] ; обробнику.

int_08h_vect dd ?

int_08h endp

int_09h proc far

push ax ; Сохранити регістр AX.

in al,60h ; Ввести код натиснутої клавиши.

cmp al,70 ; клавиша ScrollLock.

jne remove_test

mov ah,2 ; Перевірити Shift state.

int 16h

and al,0h

cmp al,0h

jne pass_09h

or byte ptr cs:[flags_offset],mask Sf

jmp short end_09h

remove_test:

cmp al,1 ; Клавиша Esc ?

jne pass_09h

mov ah,2 ; Перевірити Shift state.

int 16h

and al,0ch

cmp al,0ch

jne pass_09h

or byte ptr cs:[flags_offset],mask Rf

end_09h:

in al,61h ; Обробити апаратне преривання.

push ax

or al,80h

out 61h,al

pop ax

out 61h,al

mov al,20h

out 20h,al

pop ax

iret

pass_09h:

pop ax ; Восстановити регістри і передати управління по старому

jmp dword ptr cs:[int_09h_vect-shift]; вектору преривання Int_09h.

int_09h_vect dd ?

int_09h endp

int_2fh proc far

cmp ax,8900h ; Якщо запитуєтся установка процесу

jne pass_2fh ; з номером 89Н, то запретити установку.

mov al,0ffh ; Інакше передати управління

iret ; ісходному обробнику.

pass_2fh:

jmp dword ptr cs:[int_2fh_vect-shift]

int_2fh_vect dd ?

int_2fh endp

exeptions proc far

int_24h: mov al,3 ; Команда "Зняти системний визов".

int_23h: iret ; Вийти з преривання.

int_24h_vect dd ?

int_23h_vect dd ?

exeptions endp

dos_flag_off dw ?

dos_flag_seg dw ?

resident_sign internal_flags <>

;----- Ця частина програми використовується для загрузки резидента

boot: ; ( сама не є резидентною ).

mov si,offset start_string

call teletype

multiplex_test:

mov ax,8900h ; Тест на подвійну

int 2fh ; установку.

cmp al,0

je install ; Якщо не встановлен, то встановить.

mov si,offset reboot_message ; Інакше

call teletype ; видати повідомлення про подвійну

call teletype_keys ; загрузку, "гарячих" клавишах

int 20h ; і завершитись.

install:

call teletype_keys ; Видати повідомлення про "гарячі" клавиши

cld ; Сдвинути резидентну

mov di,start_offset ; порцію в PSP.

mov si,offset callvideo

mov cx,boot-callvideo

rep movsb

mov cx,sethandler-shift

mov al,09h ; Встановити новий обробник

mov dx,int_09h-shift ; преривання Int09h.

mov di,int_09h_vect-shift

call cx

mov al,2fh ; Встановити новий обробник

mov dx,int_2fh-shift ; преривання Int2fh.

mov di,int_2fh_vect-shift

call cx

mov al,28h ; Встановити новий обробник

mov dx,int_28h-shift ; преривання Int28h.

mov di,int_28h_vect-shift

call cx

mov al,08h ; Встановити новий обробник

mov dx,int_08h-shift ; преривання Int08h.

mov di,int_08h_vect-shift

call cx

mov ah,34h ; Прочитати і сохранити адресу

int 21h ; прапорця активністи DOS.

mov word ptr ds:[dos_flag_off-shift],bx

mov word ptr ds:[dos_flag_seg-shift],es

mov es,word ptr ds:[002ch] ; Освободити

mov ah,49h ; окруженіе DOS.

int 21h

mov dx,boot-shift ; Завершитись, оставив

int 27h ; резидента.

include teletype.asm

teletype_keys proc near

; Виводить повідомлення про гарячі клавиши.

mov si,offset hot_keys_mess1

call teletype

mov si,offset hot_keys_mess2

call teletype

mov si,offset hot_keys_mess3

call teletype

mov si,offset hot_keys_mess4

call teletype

mov si,offset hot_keys_mess5

call teletype

mov si,offset hot_keys_mess6

call teletype

mov si,offset hot_keys_mess7

call teletype

ret

teletype_keys endp

start_string db "Screen text printer. Version 1.0.",cr,lf,0

hot_keys_mess1 db "Use ",0

hot_keys_mess2 db "ScrollLock",40 dup (0)

hot_keys_mess3 db " to activate text printer and",cr,lf,0

hot_keys_mess4 db "Ctrl + Alt + Esc ",34 dup(0)

hot_keys_mess5 db " to remove it from memory.",cr,lf,lf,0

hot_keys_mess6 db "Use Enter to label text and",cr,lf,0

hot_keys_mess7 db "BackSpace to print it. Use Esc to cancel.",cr,lf,0

reboot_message db cr,lf,"Text Taker has already"

db " been installed !",7,cr,lf,lf,0

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Нет! Мы не выполняем работы на заказ, однако Вы можете попросить что-то выложить в наших социальных сетях.
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
4098
Авторов
на СтудИзбе
667
Средний доход
с одного платного файла
Обучение Подробнее