Читать курсовая по информатике, вычислительной технике, телекоммуникациям: "Програма Txtprintcom - резидентна програма для швидкого і зручного друкування виборчого тексту" Страница 6
сегменті команд
;і вершина внутрішнього стеку. 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; Якщо не
Похожие работы
Интересная статья: Основы написания курсовой работы

(Назад)
(Cкачать работу)