рефераты рефераты
Главная страница > Курсовая работа: Програма Txtprint.com - резидентна програма для швидкого і зручного друкування виборчого тексту з екрану  
Курсовая работа: Програма Txtprint.com - резидентна програма для швидкого і зручного друкування виборчого тексту з екрану
Главная страница
Банковское дело
Безопасность жизнедеятельности
Биология
Биржевое дело
Ботаника и сельское хоз-во
Бухгалтерский учет и аудит
География экономическая география
Геодезия
Геология
Госслужба
Гражданский процесс
Гражданское право
Иностранные языки лингвистика
Искусство
Историческая личность
История
История государства и права
История отечественного государства и права
История политичиских учений
История техники
История экономических учений
Биографии
Биология и химия
Издательское дело и полиграфия
Исторические личности
Краткое содержание произведений
Новейшая история политология
Остальные рефераты
Промышленность производство
психология педагогика
Коммуникации связь цифровые приборы и радиоэлектроника
Краеведение и этнография
Кулинария и продукты питания
Культура и искусство
Литература
Маркетинг реклама и торговля
Математика
Медицина
Реклама
Физика
Финансы
Химия
Экономическая теория
Юриспруденция
Юридическая наука
Компьютерные науки
Финансовые науки
Управленческие науки
Информатика программирование
Экономика
Архитектура
Банковское дело
Биржевое дело
Бухгалтерский учет и аудит
Валютные отношения
География
Кредитование
Инвестиции
Информатика
Кибернетика
Косметология
Наука и техника
Маркетинг
Культура и искусство
Менеджмент
Металлургия
Налогообложение
Предпринимательство
Радиоэлектроника
Страхование
Строительство
Схемотехника
Таможенная система
Сочинения по литературе и русскому языку
Теория организация
Теплотехника
Туризм
Управление
Форма поиска
Авторизация




 
Статистика
рефераты
Последние новости

Курсовая работа: Програма Txtprint.com - резидентна програма для швидкого і зручного друкування виборчого тексту з екрану

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

io_error_mess db "I/O failure.",cr,lf,lf,lf,0

end_entry:

END entry

;****************** Кінець файлу TXTPRINT.ASM ************************

; Файл PREPARE.ASM

; Модуль основної програми.

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

prepare proc

    cli       ; Ініціализувати стек.

    mov word ptr cs:[stack_offset-shift],sp

    mov word ptr cs:[stack_seg-shift],ss

    push cs

    pop ss

    mov sp,start_offset

    sti

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

    push bx

    push cx

    push dx

    push di

    push si

    push bp

    push ds

    push es

    push cs

    pop ds

    mov al,23h   ; Встановити новий обробник преривання Int23h.

    mov dx,int_23h-shift

    mov di,int_23h_vect-shift

    call sethandler

    mov al,24h   ; Встановити новий обробник прерывання Int24h.

    mov dx,int_24h-shift

    mov di,int_24h_vect-shift

    call sethandler

    mov ah,15    ; Визначити поточний відеорежим і

    call callvideo ; номер відеосторінки.

    cmp al,2

    je set_param

    cmp al,3

    je set_param

    cmp al,7

    jne end_prepare  ; Якщо графічний режим, то вихід.

set_param:         ; Сохранити номер відеосторінки.

    mov byte ptr ds:[current_video_page-shift],bh

    mov ah,03h     ; Сохранити позицію курсору.

    call callvideo

    mov word ptr ds:[cursor_loc-shift],dx

Страницы: 1, 2, 3, 4, 5

рефераты
Новости