Методическое руководство к курсовой работе по дисциплине Assembler ibm pc содержание
Вид материала | Руководство |
- Учебно-методическое пособие по выполнению курсовой работы по дисциплине «Комплексный, 276.48kb.
- Дейт К. Д27 Руководство по реляционной субд db2/ Пер с англ и предисл. М. Р. Когаловского, 4309.37kb.
- Методическое пособие по дисциплине «информатика» (2семестр), 838.3kb.
- Методическое пособие по курсовой работе Для студентов Современной Гуманитарной Академии, 63.65kb.
- Пособие предназначено для студентов, выполняющих курсовые работы по дисциплине «Направления, 589.33kb.
- Руководство к выполнению курсовой работы по дисциплине «Финансы предприятий», 244.13kb.
- Методические указания к курсовой работе по дисциплине «Материаловедение и ткм», 699.8kb.
- Пояснительная записка к курсовой работе на тему: «Активный полосовой фильтр» по дисциплине, 342.06kb.
- Всвязи с имеющими место случаями невыполнения требований задания к курсовой работе, 112.75kb.
- Курс. 01;Мпк. 01;3 методическое пособие по курсовой работе методика воспитательной, 230.31kb.
Endp new_1Bh
Proc main
mov ax,@data ;Установка в ds адреса
mov ds,ax ;сегмента данных
;Сохраним системные вектора 09h и 1Bh с помощью функции 35h
mov ax,3509h ;al=09h- номер вектора
int 21h
mov [word cs:old_09h],bx ;offset 09h
mov [word cs:old_09h+2],es ;segment 09h
mov ax,351Bh ;al=1Bh- номер вектора
int 21h
mov [word cs:old_1Bh],bx ;offset 1Bh
mov [word cs:old_1Bh+2],es ;segment 1Bh
;Установим новые обработчики векторов 09h и 1Bh функцией 25h. Адрес обработчиков должен
;быть в DS:DX
…
;Дальше, так же как в программе Prg3
…
;Собственно программа пользователя
;Бесконечный цикл вывода на экран "*", выход из которого возможен нажатием клавиши ESC.
;Нажатие комбинаций клавиш Ctrl-C и Ctrl-Break не прерывает цикл вывода "*" на консоль
…
;Дальше, так же как в программе Prg3
…
;Выход из цикла, т.к. нажата клавиша ESC
;Восстановление старых (системных) обработчиков
mov ax, 2509h ;al=09h -номер вектора
lds dx,[cs:old_09h] ;ds:dx - адрес вектора 09h
int 21h
mov ax, 251Bh ;al=1Bh -номер вектора
lds dx,[cs:old_1Bh] ;ds:dx - адрес вектора 1Bh
int 21h
;Выходим в DOS
Exit: mov ax,4C00h
int 21h
;Поля данных системных векторов
old_09h DD ?
old_1Bh DD ?
^
Endp main
End main
9. Резидентные программы и их организация
Резидентная программа, это программа, остающаяся в памяти после её завершения. Их ещё кратко называют ^ TSR – программами, что определяется английской фразой Terminate State Resident – завершить и остаться резидентным. Никогда не известно, по каким адресам в памяти оказываются загруженными в разное время TSR – программы, поэтому единственным способом получить управление над ними является механизм программных (пассивный резидент) или аппаратных (активный резидент) прерываний. Наиболее часто используются резидентные драйверы, обеспечивающие русифицированную работу экрана, клавиатуры или поддержку мыши. Общеупотребительны резидентные переводчики и детекторы, позволяющие на ранней стадии обнаружить появление вируса. MS-DOS рассматривает TSR – программы как часть операционной системы, защищая их адресное пространство от других систем.
TSR – программы обычно пишутся в формате .com, так как их проще оставить в памяти резидентными, в сравнении с exe-программами. Существует два стандартных способа оставить программу резидентной в памяти. Это прерывание Int 27h для COM – программ и функция DOS 31h, которая может использоваться как для Com –, так и exe- программ. Рассмотрим оба способа на примере шаблона типичной TSR – программы (правда, позже выяснится, что такая структура резидентной программы не вполне удовлетворят предъявляемым к ним требованиям).
%Title “Шаблон COM - резидента”
Ideal
Model tiny
Codeseg
Org 100h ;Установим IP на адрес после PSP
Proc resident
jmp init ;Переход на секцию инициализации
;Данные резидентной секции программы
…
Entry: ;Начало программного кода резидента (точка входа после активизации резидента)
…
Endp resident ;Секция инициализации резидента
Proc init
…
mov ah,27h ;Можно опустить
lea dx,[cs:init] ;DX - адрес первого байта за резидентной частью программы,
;CS – на начало PSP
Int 27h ;Оставить резидентной
Endp init
End resident ;Конец программы/точка входа
При запуске программы управление передаётся (в соответствии с параметром директивы ^ End) на начало процедуры resident. Командой jmp сразу же осуществляется переход на секцию инициализации, которая обычно оформляется в виде отдельной процедуры. В секции инициализации подготавливаются условия для работы программы (её вызова) в резидентном состоянии. В конце секции инициализации вызывается прерывание int 27h с параметрами, указанными в комментарии к шаблону. Секция инициализации располагается в конце программы и отбрасывается при её завершении. Прерывание 27h, закрепив за резидентной частью программы необходимую для её функционирования память, передаёт управление командному процессору DOS. Процесс первичного запуска резидентной программы, приводящего к её загрузке в память, называют её установкой. Наличие программы, резидентной в памяти, никак не отражается на ходе исполнения других программ, хотя уменьшает объём свободной памяти компьютера.
Шаблон резидентной программы (только секция инициализации) с использованием функции DOS 31h.
Proc resident
…
mov dx,(init-resident+10Fh/16) ;Размер резидентной части программы,
;включая PSP, в параграфах
mov ax,3100h ;Функция завершить и оставить в памяти
int 21h
Endp init
End resident
В данном случае в регистр DX записывается объём резидентной части программы с учётом PSP (+100h) и ещё добавляется число 0Fh, чтобы после целочисленного деления на 16, результат мог быть округлён в большую сторону.
Как уже отмечалось ранее, передать управление резиденту можно с помощью механизма аппаратных или программных прерываний. В этом случае, в процессе инициализации должен быть осуществлён перехват какого-либо системного прерывания или произведена установка одного из свободных векторов прерывания для пользователей, реализующих вход в резидентную часть на метку entry. Такой процесс активизации резидентной части программы обуславливает её оформление по типу обработчика прерывания, заканчивающегося командой iret, а метка entry – имя обработчика прерывания.
В резидентной программе Prg5_res, реализован принцип передачи управления (активизации) через посредство обработчика одного из свободных векторов прерывания для пользователей Int 61h. Для проверки работы резидента предлагается использовать тестовую программу Prg5_test. Особенности работы программ и их функциональное назначение разъяснено в подробных комментариях2 (естественно, тестовая программа запускается после успешной загрузки резидентной).
^ Prg5_res. Пассивный резидент с использованием прикладного программного обработчика прерывания с номером 61h
;Взаимодействие тестовой и резидентной задач выполняется через пользовательский вектор 61h.
;Тестовая программа передаёт управление резиденту командой int 61h, предварительно загрузив в
;регистр BP 16-разр.двоичное число для преобразования его в десятичное, а в регистры AX:BX-
;полный адрес (seg:offset) буфера результата преобразования. Резидент выполняет преобразование
;двоичного кода в десятичный (ASCII- формат) и помещает его в заданный буфер для тестовой
;программы.
Ideal
Model Tiny ;COM- программа
P386N
Codeseg
Org 100h ;Установим IP на адрес после PSP