на тему рефераты Информационно-образоательный портал
Рефераты, курсовые, дипломы, научные работы,
на тему рефераты
на тему рефераты
МЕНЮ|
на тему рефераты
поиск
Програма Txtprint.com - резидентна програма для швидкого і зручного друкування виборчого тексту з екрану
jne nn ; Якщо ні - далі.

or byte ptr ds:[flags_offset],mask Pf ; Іначе дозволити печать,

mov ah,01h ; ініціализувати 0 порт,

mov dx,0

int 17h

call unlabel ; розпечатать

jmp hi ; й вийти.

nn:

cmp al,28 ; ENTER ?

jne n0 ; Якщо ні - далі.

call here

n0:

cmp al,72 ; UP ?

jne n1 ; Якщо ні - далі.

cmp byte ptr ds:[yy-shift],0 ; Перевірити позицію курсора.

jne n00

mov byte ptr ds:[yy-shift],25

jmp n00

rd1:

call keybuf

jmp rd

n00:

dec byte ptr ds:[yy-shift] ; Уменьшить Y на 1.

call kurpos ; Встановити курсор.

n1:

cmp al,80 ; DOWN ?

jne n2 ; Якщо ні - далі.

cmp byte ptr ds:[yy-shift],25 ; Перевірити позицію курсору.

jne n11

mov byte ptr ds:[yy-shift],0

n11:

inc byte ptr ds:[yy-shift] ; Увеличити Y на 1.

call kurpos ; Встановити курсор.

n2:

cmp al,75 ; LEFT ?

jne n3 ; Якщо ні - далі.

cmp byte ptr ds:[xx-shift],0 ; Преревірити позицію курсору.

jne n22

mov byte ptr ds:[xx-shift],80

dec byte ptr ds:[yy-shift]

n22:

dec byte ptr ds:[xx-shift] ; Уменьшить X на 1.

call kurpos ; Встановити курсор.

n3:

cmp al,77 ; RIGHT ?

jne n4 ; Якщо ні - далі.

cmp byte ptr ds:[xx-shift],80 ; Перевірити позицію курсору.

jne n33

mov byte ptr ds:[xx-shift],0

inc byte ptr ds:[yy-shift]

n33:

inc byte ptr ds:[xx-shift] ; Увеличить X на 1.

call kurpos ; Встановити курсор.

n4:

cmp al,1 ; ESC ?

jne rd1 ; Якщо ні - далі.

cmp byte ptr ds:[fl2-shift],0 ; Інакше восстановити колір

je hi ; й вийти.

call unlabel

; Вихід.

hi:

call keybuf ; Очистити буфер клавіатури.

mov sp,bp

ret ; Завершитись.

start endp

; Опис змінних:

scrr db ?

xx db ?

yy db ?

x1 db ?

y1 db ?

tx db ?

ty db ?

wx db 2

wy db 2

fl2 db 0

flag db 0

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

; Файл TAKE&PRN.ASM

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

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

keybuf proc

; Очищає буфер клавіатури.

push es

push ax

sub ax,ax

mov es,ax

mov al,es:[41ah] ; Взяти кінець буферу

mov es:[41ch],al ; і записати в початок.

pop ax

pop es

ret

keybuf endp

delay proc

; Ініціірує затримку.

push cx

mov cx,60

l1:

push cx

mov cx,20000

l2:

loop l2

pop cx

loop l1

pop cx

ret

delay endp

del2 proc

; Ініціірує затримку.

push cx

mov cx,6000

a2:

loop a2

pop cx

ret

del2 endp

here proc

; Обробка виділення тексту.

push ax

cmp byte ptr ds:[flag-shift],0

je nh

mov al,byte ptr ds:[wx-shift]

cmp byte ptr ds:[xx-shift],al

jne lab

mov al,byte ptr ds:[wy-shift]

cmp byte ptr ds:[yy-shift],al

je rr

lab:

call labela ; Виділити.

jmp rr

nh:

mov al,byte ptr ds:[xx-shift]

mov byte ptr ds:[x1-shift],al

mov al,byte ptr ds:[yy-shift]

mov byte ptr ds:[y1-shift],al

rr:

pop ax

mov byte ptr ds:[flag-shift],1

ret

here endp

kurpos proc

; Встановлює курсор.

push ax

mov ah,02h

mov dh,byte ptr ds:[yy-shift]

mov dl,byte ptr ds:[xx-shift]

mov bh,0

call callvideo

pop ax

ret

kurpos endp

labela proc

; Змінює колір поміченого тексту.

cmp byte ptr ds:[fl2-shift],0

je f0

call unlabel

call ifswap

jmp f1

f0:

mov al,byte ptr ds:[x1-shift]

mov byte ptr ds:[wx-shift],al

mov al,byte ptr ds:[y1-shift]

mov byte ptr ds:[wy-shift],al

call ifswap

f1:

mov byte ptr ds:[fl2-shift],1

mov al,byte ptr ds:[x1-shift]

mov byte ptr ds:[tx-shift],al

mov al,byte ptr ds:[y1-shift]

mov byte ptr ds:[ty-shift],al

hh:

push cx

push dx

mov ah,02h ; Змінити позицію курсору.

mov dh,byte ptr ds:[ty-shift]

mov dl,byte ptr ds:[tx-shift]

mov bh,0

call callvideo

mov ah,08h ; Считати символ/атрибут.

mov bh,0

call callvideo

mov byte ptr ds:[scrr-shift],ah

mov ah,09h ; Записати символ з ізмененим атрибутом.

mov bl,byte ptr ds:[scrr-shift]

add bl,15

mov cx,1

mov bh,0

call callvideo

pop dx

pop cx

mov dl,byte ptr ds:[tx-shift]

cmp dl,byte ptr ds:[xx-shift]

je ok

as:

inc byte ptr ds:[tx-shift]

cmp byte ptr ds:[tx-shift],80

jne hh

mov byte ptr ds:[tx-shift],0

inc byte ptr ds:[ty-shift]

jmp hh

ok:

mov al,byte ptr ds:[yy-shift]

cmp byte ptr ds:[ty-shift],al

je rro ; Якщо кінець, то вийти,

jmp as ; інакше оброблювати наступний символ.

rro:

mov al,byte ptr ds:[xx-shift]

mov byte ptr ds:[wx-shift],al

mov al,byte ptr ds:[yy-shift]

mov byte ptr ds:[wy-shift],al

ret

labela endp

unlabel proc

; Встановлює колір поміченого тексту.

push ax

push dx

push cx

mov al,byte ptr ds:[x1-shift]

mov byte ptr ds:[tx-shift],al

mov al,byte ptr ds:[y1-shift]

mov byte ptr ds:[ty-shift],al

tl:

mov ah,02h ; Змінити позицію курсору.

mov dh,byte ptr ds:[ty-shift]

mov dl,byte ptr ds:[tx-shift]

mov bh,0

call callvideo

mov ah,08h ; Считати символ/атрибут.

mov bh,0

call callvideo

mov byte ptr ds:[scrr-shift],ah

call ToPrn

mov ah,09h ; Записати символ з востановленим атрибутом.

mov bl,byte ptr ds:[scrr-shift]

sub bl,15

mov cx,1

mov bh,0

call callvideo

mov al,byte ptr ds:[wx-shift]

cmp byte ptr ds:[tx-shift],al

je don

nt:

inc byte ptr ds:[tx-shift]

cmp byte ptr ds:[tx-shift],80

jne tl

call PrnEnt

mov byte ptr ds:[tx-shift],0

inc byte ptr ds:[ty-shift]

jmp tl

don:

mov al,byte ptr ds:[wy-shift]

cmp byte ptr ds:[ty-shift],al

je ex ; Якщо кінець, то вийти,

jmp nt ; інакше оброблювати наступний символ.

ex:

pop ax

pop cx

pop dx

ret

unlabel endp

ToPrn proc

; Печатает символ.

test byte ptr ds:[flags_offset],mask Pf ; Перевірити прапорець печаті.

jz outp ; Якщо не дозволено - вийти.

mov ah,00h

mov dx,0

int 17h ; Печатать.

call del2

outp:

ret

ToPrn endp

PrnEnt proc

; Печатает ENTER

test byte ptr ds:[flags_offset],mask Pf ; Перевірити прапорець печаті.

jz notp ; Якщо не дозволено - вийти.

mov ah,0

mov dx,0

mov al,0ah ; Печатати CR.

int 17h

mov ah,0

mov dx,0

mov al,0dh ; Печатать LF.

int 17h

notp:

ret

PrnEnt endp

ifswap proc

push ax

mov al,byte ptr ds:[y1-shift] ; Порівняти координати Y1 и YY

cmp al,byte ptr ds:[yy-shift]

jg zq

jl qw

mov al,byte ptr ds:[x1-shift] ; Порівняти координати X1 и XX

cmp al,byte ptr ds:[xx-shift]

jng qw

zq: ; Якщо треба змінити,

mov al,byte ptr ds:[yy-shift] ; змінюєм.

mov byte ptr ds:[y1-shift],al

mov al,byte ptr ds:[xx-shift]

mov byte ptr ds:[x1-shift],al

mov al,byte ptr ds:[wx-shift]

mov byte ptr ds:[xx-shift],al

mov al,byte ptr ds:[wy-shift]

mov byte ptr ds:[yy-shift],al

qw:

pop ax

ret ; Выход

ifswap endp

;******************* Кінець файлу TAKE&PRN.ASM ***********************

; Файл REMOVE.ASM

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

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

test_vector proc

; Перевірити вектор преривання.

mov ah,35h

int 21h

cmp bx,dx

jne exit

mov dx,es

cmp cx,dx

exit:

ret

test_vector endp

remove proc

mov cx,cs

mov di,test_vector-shift

mov al,09h ; Перевірити вектор преривання Int09h.

mov dx,int_09h-shift

call di

jne not_remove

mov al,2fh ; Перевірити вектор преривання Int2fh.

mov dx,int_2fh-shift

call di

jne not_remove

mov al,28h ; Перевірити вектор преривання Int28h.

mov dx,int_28h-shift

call di

jne not_remove

mov al,08h ; Перевірити вектор преривання Int08h.

mov dx,int_08h-shift

call di

je uninstall

not_remove:

mov ax,notremove_mess-shift

push ax

push ax

call mess

ret

uninstall:

mov ax,remove_mess-shift

push ax

xor ax,ax

push ax

call mess

mov cx,resethandler-shift

mov al,09h ; Восстановити вектор преривання Int09h.

mov di,int_09h_vect-shift

call cx

mov al,2fh ; Восстановити вектор преривання Int2fh.

mov di,int_2fh_vect-shift

call cx

mov al,28h ; Восстановити вектор преривання Int28h.

mov di,int_28h_vect-shift

call cx

mov al,08h ; Восстановити вектор преривання Int08h.

mov di,int_08h_vect-shift

call cx

cli

push cs

pop es

mov ah,49h ; Освободити займаєму пам`ять.

int 21h

ret

remove_mess db ' has been',0,'REMOVED form memory. ',0

notremove_mess db ' UNABLE to',0,'remove. Not on the top. ',0

remove endp

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

; Файл MESSAGE.ASM

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

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

xchgmess proc

mov di,code_table-shift ; Загрузити сміщення

mov si,attribute_table-shift ; таблиць кодів і

; атрибутів вікна повідомлення.

mov cx,6

mov dh,10

loop_1: ; Цикл по строках.

push cx

mov cx,30

mov dl,25

loop_2: ; Цикл по стовбцях.

push cx

mov ah,2

call callvideo

mov ah,8

call callvideo

cmp dh,15

jb lab_1

cmp dl,27

jb exch_noth

jmp short exch_attr

lab_1:

cmp dh,11

jb lab_2

cmp dl,52

ja exch_attr

jmp short exch_code

lab_2:

cmp dl,52

ja exch_noth

exch_code:

xchg al,byte ptr [di] ; Заменити код символа.

inc di

exch_attr:

xchg ah,byte ptr [si] ; Заменити атрибут.

inc si

exch_noth:

mov bl,ah ; Вивести символ.

mov cx,1

mov ah,9

call callvideo

inc dx

pop cx

loop loop_2

inc dh

pop cx

loop loop_1

mov dx,1900h ; Убрати курсор.

mov ah,02h

call callvideo

ret ; Вийти з процедури.

xchgmess endp

mess proc

push bp

mov bp,sp

push bx

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

mov bl,byte ptr ds:[attribute_table-shift]

push bx ; Вивести вікно повідомлення.

call xchgmess

pop bx

mov dx,0b29h ; Вивести текст повідомлення.

mov si,word ptr [bp+6]

call typestr

mov dx,0c1bh

call typestr

push bx ; Подати звуковий сигнал.

mov cx,2

mess_loop:

mov di,550

mov bx,30

call beep

mov di,1100

call beep

loop mess_loop

pop bx

wait_mess:

mov ah,0 ; Ждати натиснення клавиши.

int 16h

call xchgmess ; Восстановити екран.

pop bx

pop bp

ret 4 ; Вийти з процедури.

mess endp

; Таблиця атрибутів вікна повідомлення.

attribute_table db 29 dup(4eh),14 dup (206),13 dup (4eh)

db 07h,07h

db 28 dup (4eh)

db 07h,07h

db 4eh,26 dup (206),4eh

db 07h,07h

db 28 dup (4eh)

db 30 dup (07h)

; Образ атрибутів вікна повідомлення.

code_table db '============================'

db '!Screen Printer: !'

db '! !'

db '! press any key... !'

db '============================'

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

; Файл TYPESTR.ASM

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

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

typestr proc

typestr_loop:

mov ah,2 ; Встановити курсор в нужну позицию.

call callvideo

lodsb

or al,al ; Якщо зустрився кінець строки,

jz end_typestr ; то вихід.

mov cx,1

mov ah,9

call callvideo

inc dx ; Определити позицію для вивода

jmp short typestr_loop ; следуючого символу.

end_typestr:

push dx ; Убрати курсор.

mov dx,1900h

mov ah,2

call callvideo

pop dx

ret ; Вийти з процедури.

typestr endp

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

; Файл BEEP.ASM

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

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

beep proc

; Подає звуковой сигнал заданої частоти і тривання.

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

push cx

push di

mov di,1000

mov al,0b6h ; Записати у регістр режим таймеру.

out 43h,al

mov dx,14h ; Делитель часу равен

mov ax,4f38h ; 1331000/частота.

div di

out 42h,al ; Записати молодший байт лічильника таймера 2.

mov al,ah

out 42h,al ; Записати молодший байт лічильника таймера 2.

in al,61h ; Считати поточну установку порта В

push ax ; й сохранити її.

or al,3

out 61h,al ; Включити динамик.

wait_beep:

mov cx,01fffh

speaker_on:

loop speaker_on

dec bx ; Лічильник тривалісті ісчерпан ?

jnz wait_beep ; Ні. Продовжити звучання.

pop ax ; Да. Восстановити похідну установку

out 61h,al ; Порта В.

pop di ; Восстановити всі регистри.

pop cx

pop bx

ret ; Вийти з процедури.

beep endp

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

; Файл TELETYPE.ASM

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

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

teletype proc

mov bh,0 ; Обрати нулеву відеосторінку.

cld

type_next_char:

lodsb ; Загрузити наступний символ в AL.

mov ah,0eh

cmp al,0 ; Якщо кінець строки, то вихід.

je end_teletype

call callvideo ; Вивести символ.

jmp short type_next_char

end_teletype:

ret

teletype endp

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

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



© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент.