Реферат: Резидентный обработчик клавиатуры (перехват нажатий клавиш и запись в файл)

. . .

main endp

init proc ;Секция инициализации

. . .

mov DX, (init-main+10Fh)/16 ;Paзмер в параграфах

mov АН, 3100h ;функция "Завершить и оставить в

int 21h ; памяти" init endp text ends

end main

Рис 2 .1. Типичная структура резидентной программы.

Программа пишется в формате СОМ, поэтому в ней предусматри­вается только один сегмент, с котором связываются сегментные ре­гистры CS и DS; в начале сегмента резервируется l00h байт дня PSP.

При запуске программы с клавиатуры управление передается (в со­ответствии с параметром директивы end) на начало процедуры main. Командой jmp сразу же осуществляется переход на секцию инициализа­ции, которая может быть оформлена в виде отдельной процедуры или входить в состав процедуры main. В секции инициализации, в частности, подготавливаются условия для работы программы уже в ре­зидентном состоянии. Последними строками секции инициализации вызывается функция DOS 31h, которая выполняет завершение програм­мы с оставлением в памяти указанной ее части. Эта функция не может оставлять резидентными программы размером больше 64 Кб, но многие программы, написанные на ассемблере, соответствуют этому усло­вию. Так как резидентные программы уменьшают объем основной памяти, их все­гда пишут на ассемблере и оптимизируют для достижения минимального размера.

Размер резидентной части программы (в параграфах) передается DOS в регистре DX. Опре­делить размер резидентной секции можно, например, следующим обра­зом. К разности смещений mil-main, которая равна длине резидентной части программы в байтах, прибавляется размер PSP (l00h) и еще число 15 (Fh) для того, чтобы после целочисленного деления на 16 результат был округлен в большую сторону.

С целью экономии памяти секция инициализации располагается я конце программы и отбрасывается при ее завершении.


Точка входа ® main

при загрузке jmp init

. Резидентные

: поля данных Резидентная часть

Точка входа ® entry программы

при вызове . Резидентные

: коды

iret

init

. Секция

: инициализации Завершение программы

Функция DOS 31h ® с составлением в памяти

её резидентной части

Рис. 2.2 Взаимодействие элементов резидентной программы.

Функция 31h, закрепив за резидентной программой необходимую для ее функционирования память, передает управление командному процессору и вычислительная система переходит в исходное состояние. Наличие программы, резидентной в памяти, никак не отражается на хо­да вычислительного процесса, за исключением того, что уменьшается объем свободной памяти. Одновременно в память может быть загруже­но любое число резидентных программ.

На рис. 2.2 показаны элементы резидентной программы и их вза­имодействие.

К-во Просмотров: 271
Бесплатно скачать Реферат: Резидентный обработчик клавиатуры (перехват нажатий клавиш и запись в файл)