рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

Описание для программиста

Работа сделанна в 2000 году

Описание для программиста - Курсовой Проект, раздел Программирование, - 2000 год - Системы программирования и операционные системы Описание Для Программиста. Программа Пишется В Формате Сом, Поэтому В Ней Пре...

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

При запуске программы с клавиатуры управление передается в соответствии с параметром директивы end на начало процедуры main. Командой jmp сразу же осуществляется переход на секцию инициализации, которая оформлена в виде отдельной процедуры. В секции инициализации подготавливаются условия для работы программы уже в резидентном состоянии.

В начальной части инициализации мы проверяем наличие хвоста в PSP, если же в командной строке кроме имени команды ничего не было переходим на дальнейший анализ mov cl, es80h cmp cl,0 je live Если хвост присутствует, проверим не был ли введн ожидаемый параметр off. При положительном результате проверки устанавливаем флаг требования выгрузки flag в единицу и переходим на дальнейший анализ. Затем вызываем мультиплицированное прерывание int2Fh c функцией F1h и подфункцией проверки на повторную установку 00h. Если наш обработчик находится в оперативной памяти он возвратит ALFFH, и программа перейдт на метку installed.

Проверим установлен ли флаг требования выгрузки flag. Если flag 1 перейдм на метку unins, где перешлм в первую резидентную копию программы запрос на выгрузку из оперативной памяти по средствам прерывания int2Fh и функцией F2h с подфункцией 01h. После чего происходит вывод строки Program is DIE на экран сигнализирующей об успешном удалении резидентной части программы. После чего выйдем из программы, обычным образом, функцией 4С00h. Если флаг требования выгрузки flag0, это говорит о том, что введена неизвестная команда, а наш резидент уже инсталлирован.

В этом случае выведем на экран предупреждающую надпись о невозможности повторной установки программы Program already installed сопровождаемую звуковым сигналом. После этого завершим программу функцией 4Ch с кодом возврата 01h. Если после прерывания int2Fh c функцией F200h, возвратиться ALFFh, то нашего обработчика в памяти не оказалось.

Сохраним смещения и сегменты системных обработчиков int09h и int2Fh, а затем заполним векторы смещениями наших обработчиков. mov ax,352fh int 21h mov word ptr csold2fh, bx mov word ptr csold2fh2,es mov ax,252fh mov dx, offset new2fh int 21h mov ax,3509h int 21h mov word ptr csold09h, bx mov word ptr csold09h2,es mov ax,2509h mov dx, offset new09h int 21h После этого произведм поиск рабочего файла scodef.txt в текущем каталоге.

Если файл не будет найден, то запустится процедура divf, которая создаст рабочий файл и запишет в него строку SkencodeKlavflag file. В дальнейшем в этот файл будут записываться скэн-коды и байт флагов клавиатуры. Если файл уже существует, будет вызвана процедура div2f, которая допишет в конец файла текущую дату и время. Выведем на экран строку Program installed подтверждающую установку программы. Последними строками этой части инициализации вызывается функция DOS 31h, которая выполняет завершение программы с оставлением в памяти указанной ее части.

Размер резидентной части программы в параграфах передается DOS в регистре DX. Размер резидентной секции определяется разностью смещений endres-main, которая равна длине резидентной части программы в байтах, прибавляется размер PSP l00h и еще число 15 Fh для того, чтобы после целочисленного деления на 16 результат был округлен в большую сторону. mov ax,3100h mov dx, endres-main10fh16 int 21h С целью экономии памяти секция инициализации располагается я конце программы и отбрасывается при ее завершении.

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

Резидентная часть обработчика. Эта секция программы имеет две точки входа 1. Перехват прерывания int09hклавиатура. В результате нажатия или отпускания клавиши на клавиатуре запускается процедура new09h. 2. Перехват мультиплексорного прерывания int2Fh. В результате перехвата мультиплексорного прерывания запускается процедура new2fh. Обработчик прерывания от клавиатуры. После запуска процедуры new09h сохраним используемые регистры. Затем получим скэн-код последней нажатой клавиши.

В противном случае восстановим регистры и передадим управление следующему по цепочке обработчику клавиатуры скорее всего это будет BIOS-овский обработчик int09h. in al,60h cmp al,80h ja exit Затем запишем этот скэн-код в буфер, считаем байт флагов клавиатуры из области данных BIOS и также занесм в буфер. Наш буфер имеет объм 32 байта, поэтому после каждого шестнадцатого нажатия необходимо сохранять буфер в рабочем файле. Для подсчта нажатий введена переменная-счтчик sch. Увеличим счтчик на 2, затем проверим полон ли буфер, сравнив счтчик с 32. Если буфер не полон, сохраним использовавшиеся регистры и передадим управление следующему по цепочке обработчику клавиатуры.

Если буфер забит, передадим управление процедуре fil. Эта процедура откроет наш рабочий файл, установит указатель в конец и допишет столько байт из буфера начиная сначала, сколько укажет ей переменная-счтчик. mov ah,40h mov cl, sch mov dx, offset bufer int 21h Это сделано для того, чтобы при удалении программы из памяти в файл были записаны все скэн-коды включая команду на удаление.

Этот случай рассмотрим ниже. После того как данные будут сохранены, восстановим использовавшиеся регистры и передадим управление следующему по цепочке обработчику клавиатуры. Обработчик мультиплексорного прерывания Процедура new2fh перехватит прерывание 2Fh, и если прерывание вызвано вместе с функцией F1h, то в зависимости от подфункции значение которой находится в AL выполнит следующие действия 1. Если подфункция находящаяся в AL00h код наличия в памяти нашего обработчика, то наш обработчик возвратит в ALFFh и выйдет из прерывания. cmp al,00h je inst inst mov al,0ffh iret 2. Если подфункция находящаяся в AL01h команда на удаление из памяти обработчика, то сохраним используемые регистры, вызовем процедуру fil работа этой процедуры была описана выше, а затем освободим блоки памяти занятые нашим обработчиком, восстановим старые векторы 09h и 2Fh. Восстановим использовавшиеся регистры и выйдем из прерывания.

Если мультиплексорное прерывание было вызвано с другой функцией либо с нашей функцией но с другими подфункциями, то обработчик передаст управление следующему по цепочке обработчику мультиплексорного прерывания. cmp ah,0f1h jne out2fh cmp al,00h je inst cmp al,01h je off jmp short out2fh inst mov al,0ffh iret out2fh 3.3.

– Конец работы –

Эта тема принадлежит разделу:

Системы программирования и операционные системы

Обработчик должен иметь механизм выгрузки из оперативной памяти встроенный в него самого. Также программа должна иметь защиту от повторной установки в оперативную… Такие программы носят названия программ, резидентных в памяти Terminate and Stay Resident, TSR, или просто резидентных…

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: Описание для программиста

Что будем делать с полученным материалом:

Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Все темы данного раздела:

Краткие теоретические сведенья
Краткие теоретические сведенья. Резидентный обработчик прерываний Большой класс программ, обеспечивающих функционирование вычислительной системы драйверы устройств, программы шифрации и защиты данн

Защита резидентной программы от повторной установки
Защита резидентной программы от повторной установки. Как правило, в секции инициализации загружаются векторы прерываний, через которые будет активизироваться программа. Последними строками секции и

Выгрузка резидентной программы из памяти
Выгрузка резидентной программы из памяти. Следует заметить, что в DOS отсутствуют средства выгрузки резидентных программ. Единственный предусмотренный для этого механизм - перезагрузка компь

Перехват прерываний
Перехват прерываний. В архитектуре процессоров 80х86 предусмотрены особые случаи, когда процессор прекращает прерывает выполнение текущей программы и немедленно передает управление программе-обрабо

Резидентный обработчик прерываний от клавиатуры с подключением до системного обработчика
Резидентный обработчик прерываний от клавиатуры с подключением до системного обработчика. Практически любая программа, в которой предусмотрено управление ходом ее выполнения с помощью команд, подав

Описание для пользователя
Описание для пользователя. Приведнная ниже программа осуществляет перехват прерывания от клавиатуры, и производит запись скэн-кодов клавиш и байта флагов клавиатуры в файл с именем scodef.txt. При

Рекомендации по улучшению
Рекомендации по улучшению. Главным недостатком этой программы является неудобное визуальное восприятие записей в файле. Т.е. мы видим не ASCII-код который образовался в результате нажатия кл

Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • Популярное
  • Облако тегов
  • Здесь
  • Временно
  • Пусто
Теги