Автор работы: Пользователь скрыл имя, 14 Мая 2012 в 16:48, курсовая работа
В данной работе рассмотрено явление, которое в операционной системе MSDOS играет роль многозадачности. С истинной многозадачностью можно столкнуться, рассматривая программирование в операционной системе Windows. Многозадачность же, рассматриваемая в этой курсовой работе, может быть названа нелегальной. Термин TSR происходит от английской фразы Terminate State Resident, т.е. "завершить и остаться резидентным". Резидентная программа, находясь в памяти, выполняет свои функции через перехваченные прерывания. Связь с резидентной программой также осуществляется посредством прерываний.
1 РЕЗИДЕНТНЫЕ ПРОГРАММЫ 4
2 ЗАЩИТА РЕЗИДЕНТНЫХ ПРОГРАММ ОТ ПОВТОРНОЙ УСТАНОВКИ .....8
3 ВЫГРУЗКА РЕЗИДЕНТНЫХ ПРОГРАММ ИЗ ПАМЯТИ 12
4 ОПИСАНИЕ ПРОГРАММЫ 13
Заключение 21
Литература 22
Приложение-листинг 23
Приложение-рисунок 35
;после запуска программы, содержимое
;командной строки операционная система
размещает по смещению 8 Oh в PSP программы
;Точнее по самому смещению 80h находится байт,
;в котором размещается
;число, равное количеству символов в строке
;параметров. Получим его из PSP,
;для чего смещение интересующего нас байта
;потом загрузим этот байт в AL
;и проверим, длина строки параметров не меньше ;трех символов?
;если меньше, то выйти из программы.
27
;иначе перейдем на адрес следующего байта ;командной строки
inc si
;и возьмем из нее в АХ два байта
lodsw
;проверим, это наш ключ /и ?
cmp ах,'и/'
;если не равно, то это не наш ключ и программу завершаем
jne bue
;В противном случае начинаем модуль выгрузки программы из памяти
;Для начала загрузим регистры ES:BX адресом ; нашей программы в памяти ;для чего возьмем вектор любого из контролируемых ею прерываний например 28h
mov ax,3528h int 21h
;Теперь сохраним регистр ds.
push ds
; загрузим регистры DS:DX адресом старого ;вектора прерывания 1С взятого ;из памяти нашей программы, которая сейчас ;стоит резидентом.
Ids dx,dword ptr es:old_09
mov ax,2509h
int21h
Ids dx,dword ptr es:old_lC
;и возвратим его в таблицу векторов прерываний
mov ax,251Ch int21h
;То же сделаем с прерыванием 28h Ids dx,dword ptr es:old_28
mov ax,2528h
int21h
;И прерыванием 2F Ids dx,dword ptr es:old_2F
mov ax,252Fh
int 21 h
восстановим регистр DS
pop ds
;Используя стандартную функцию 49h прерывания 2lh, освободим память, занимаемую ;нашей резидентной программой. Функция освобождает память, сегмент ;которой стоит в ES. А там как раз адрес начала ;нашей резидентной программы.
mov ah,49h int 21h
;Теперь надо освободить память, занятую блоком ;окружения программы. Возьмем оттуда этот ;адрес и поместим его в ES
mov es,word ptr es:[002ch]
;После чего дадим команду освободить этот блок
mov ah,49h int 21h
завершить программу и возвратиться в операционную систему
bue:
mov ax,4c00h
int 21h
TSRprog endp code_seg ends end begin
Приложение-рисунок
сл C:\WINDOWSUystem32tomd.exe - progl .com | i- nix |
Microsoft Uindous XP (Версия 5.1.26111 CO Корпорация Майкрософт, 1985-2001. |
|
C:\Docuraents and Settings\ftflMHHMCTpaTop>cd.. |
|
C:\Documents and Settings>cd.. |
|
C:\>cd prog |
|
C:\prog>proMessage |
|
C:\PR0G>_ 4 • I |
|