- 1
- 2
- 3
- 4
- . . .
- последняя »
mainendp
initproc;Секция инициализации
. . .
mov DX, (init-main+10Fh)/16;Paзмер в параграфах
movАН,3100h ;функция "Завершить и оставить в
int21h; памяти" initendp textends
endmain
Рис 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 показаны элементы резидентной программы и их взаимодействие.
Любая резидентная программа имеет по крайней мере две точки входа. При запуске с клавиатуры программы типа .СОМ управление всегда передается на первый байт после PSP (IP=l00h). Поэтому практически всегда первой командой резидентной программы является команда jmp, передающая управление на начало секции инициализации.
После отработки функции DOS 31h программа остается в памяти в пассивном состоянии. Для того, чтобы активизировать резидентную программу, ей надо как-то передать управление и, возможно, параметры. Вызвать
- 1
- 2
- 3
- 4
- . . .
- последняя »
Похожие работы
Тема: Резидентный обработчик клавиатуры (перехват нажатий клавиш и запись в файл) |
Предмет/Тип: Информатика, ВТ, телекоммуникации (Реферат) |
Тема: Перехват сеанса |
Предмет/Тип: Отсутствует (Курсовая работа (т)) |
Тема: Перехват методов COM интерфейсов |
Предмет/Тип: Информатика, ВТ, телекоммуникации (Реферат) |
Тема: Перехват методов COM интерфейсов |
Предмет/Тип: Информатика, ВТ, телекоммуникации (Реферат) |
Тема: Перехват методов интерфейса Iunknown |
Предмет/Тип: Информатика, ВТ, телекоммуникации (Реферат) |
Интересная статья: Основы написания курсовой работы