34661

Доступ к системным ресурсам. Определение переменной как Absolute. Предопределенные массивы MEM. Прерывания. Обработка прерываний

Реферат

Информатика, кибернетика и программирование

Прерывания. Прерывания Прерывание это особое состояние вычислительного процесса. В момент прерывания нарушается нормальный порядок выполнения команд программы и управление передается специальной процедуре которая входит в состав ДОС и называется процедурой обработки прерывания. В архитектуре центрального процессора ПК предусмотрены прерывания двух типов аппаратные и программные.

Русский

2013-09-08

66 KB

8 чел.

исциплина «Основы алгоритмизации и программирование»  Доступ к системным ресурсам

Доступ к системным ресурсам. Определение переменной как Absolute. Предопределенные массивы MEM. Прерывания. Обработка прерываний.

Доступ к системным ресурсам.

В операционной  системе  MS-DOS  доступ к системным функциям осуществляется посредством программных прерываний.  Каждое прерывание позволяет сделать обращение к функциям определенной категории. Тип функции определяется значением регистра АН. Дополнительная  информация  при  необходимости передается через регистры AL, BX,  CX и DX.

Определение переменной как Absolute.

Var идентификатор : тип Absolute сегмент:смещение;

или

Var идентификатор : тип Absolute переменная;

Замечания:

1. Первая форма непосредственно задает адрес (сегмент и смещение) переменной. Оба значения должны быть внутри диапазона $0000..$FFFF (от 0 до 65,535).

2. Вторая форма объявления размещает новую переменную поверх существующей переменной (по тому же самому адресу).

3. Если в списке переменных присутствует слово Absolute, то в данной строке может находиться только одна переменная.

Предостережение:

- Используйте первую форму объявления осторожно. Во время работы Windows в защищенном режиме ваше приложение не может иметь прав доступа к областям памяти вне вашей программы. При попытке обращения к этим областям, выполнение вашей программы, вероятно, будет приостановлено.

- Вторая форма объявления абсолютных переменных безопасна для приложений Windows. Память, к которой вы обращаетесь, находится внутри области памяти вашей программы.

Пример:

Type VectorTable = Array [0..255] Of Pointer;

Var IntVectors : VectorTable Absolute 0:0;

CrtMode : Byte Absolute $0040:$0049;

Str : String;

StrLen : Byte Absolute Str;

Предопределенные массивы MEM

В Турбо Паскале имеются предварительно объявленные массивы: MEM, MEMW, MEML, PORT и PORTW. Первые три обеспечивают доступ к любому участку оперативной памяти по абсолютному адресу, два других - доступ к портам ввода-вывода.

Компонентами массива MEM являются данные типа BYTE, массива MEMW - типа WORD, массива MEML - типа LONGINT. Обращение к элементам этих массивов, т.е. их индексация, имеет специальный вид: каждый индекс представляет собой абсолютный адрес и состоит из двух выражений типа WORD; первое дает сегментную часть адреса, второе - смещение; выражения разделяются двоеточием. Например:

Меm[$0000:$1000] := 0; 

DataMem := MemWfSeg(p):0fs(p)]; 

MemLong :.= MemL [64 : i*SizeOf (real) ] ;

Компонентами массива PORT являются байты (тип BYTE), а массива PORTW - слова (тип WORD). Индексами этих массивов должно быть выражение типа BYTE, указывающее номер нужного порта. Присвоение значения элементу массива PORT или PORTW приведет к записи в порт, упоминание элемента в выражении - к чтению из порта. Компоненты массивов PORT и PORTW нельзя передавать в качестве параметров процедурам или функциям. Эти идентификаторы не употребляются без индексных выражений.

Прерывания

Прерывание - это особое состояние вычислительного процесса. В момент прерывания нарушается нормальный порядок выполнения команд программы и управление передается специальной процедуре, которая входит в состав ДОС и называется процедурой обработки прерывания. Каждое прерывание характеризуется в рамках ДОС порядковым номером и связано со своей процедурой обработки. В архитектуре центрального процессора ПК предусмотрены прерывания двух типов - аппаратные и программные. Аппаратные прерывания создаются схемами контроля и управления ПК и сигнализируют операционной системе о переходе какого-либо устройства в новое состояние или о возникновении неисправности. Программные прерывания инициируются при выполнении одной из двух специальных команд микропроцессора (INT или INTO) и служат для обращения к средствам ДОС.

Описываемые ниже процедуры входят в состав библиотечного модуля DOS.TPU и становятся доступными после объявления USES DOS. При возникновении программного прерывания в большинстве случаев необходимо передать процедуре обработки прерывания некоторые параметры, в которых конкретизируется запрос нужной функции. Эти параметры, а также выходная информация (результат обработки прерывания) передаются от программы к процедуре и обратно через регистры центрального процессора. В составе модуля DOS.TPU для этих целей определен специальный тип:

type

Registers = record case integer of

0 : (AX, BX, CX, BP, SI, DI, DS, ES, Flags : word); 

1 : (AL, AH, BL, BH, CL, CH, DL, DH : byte) 

end ;

Этот тип имитирует регистры центрального процессора и дает возможность обращаться к ним как к 16-битным или 8-битным регистрам.

Процедура INTR. С помощью этой процедуры инициируется программное прерывание с требуемым номером. Обращение:

INTR (<N>,<регистры>)

Здесь <N> - выражение типа BYTE; номер прерывания;

<регистры> - переменная типа REGISTERS; в этой переменной процедуре обработки прерывания передается содержимое регистров и в ней же возвращается выходная информация.

Например, прерывание с номером 18 ($12) возвращает в регистре АХ объем оперативной памяти ПК. Короткая программа, представленная в примере 11.1, выведет на экран сообщение об этом объеме.

Пример

Uses DOS; 

var

r : registers; 

begin

Intr ($12, r); 

writeln ('Объем памяти = ',r.AX, ' Кбайт')

end.

Процедура MSDOS. Инициирует прерывание с номером 33 ($21). Формат обращения:

MSDOS (<регистры>)

Программное прерывание с номером 33 ($21) стоит особняком, так как оно дает доступ к большому количеству функций ДОС (этим прерыванием вызывается 85 функций). Рассматриваемая процедура полностью эквивалентна вызову процедуры INTR с номером прерывания 33. Например, следующая программа (пример 11.2) выведет на экран версию операционной системы:

Пример

Uses DOS; 

var

r : registers; 

begin

r.АН := $30;

MsDos(r);

WriteLn('Версия операционной системы: ', r.AL, '.' r.АН) 

end.

Обработка прерываний

При написании процедур обработки прерываний существенными являются два обстоятельства. Во-первых, процедура обработки прерывания не должна искажать работу прерванной программы. Для этого необходимо сначала сохранить регистры центрального процессора, а перед выходом из процедуры - восстановить их. Во-вторых, процедура должна строиться по принципу реентерабельности (повторной входимости): ее работа может быть прервана в любой момент другими прерываниями и ДОС может обратиться к соответствующей функции до завершения обработки предыдущего прерывания.

Турбо Паскаль предоставляет программисту возможность написания процедур обработки прерывания на языке высокого уровня, хотя обычно такие процедуры пишутся на языке ассемблера.

Процедура обработки прерывания, написанная на Турбо Паскале, должна начинаться стандартной директивой INTERRUPT (прерывание), например:

Procedure IntProc (Flags, CS, IP, AX, BX, CX, DX,

SI, DF, DS, ES, BP : word); inerrupt; 

begin

...

end ;

Формальные параметры в заголовке процедуры должны перечисляться в указанном порядке - через эти параметры все регистры прерванной программы становятся доступны процедуре обработки прерывания. Количество перечисляемых в заголовке процедуры параметров-регистров может быть любым, но не больше 12. Если в списке опущен какой-либо параметр, должны быть опущены также и все предшествующие ему параметры. Например, описание

Procedure IntProc(SI, DP, ES: word); interrupt; 

будет неверным (опущены параметры DS и ВР); правильное описание:

Procedure IntProc(SI, DP, DS, ES, BP: word); interrupt;

Заметим, что компилятор не контролирует порядок перечисления параметров в заголовке процедуры обработки прерывания.

Директива INTERRUPT вызывает генерацию специальных машинных кодов, обеспечивающих заталкивание регистров в стек при входе в процедуру и извлечение их из стека перед выходом из нее.

В самой процедуре обработки прерывания не рекомендуется обращаться к другим функциям ДОС, так как некоторые из них, в том числе все функции ввода-вывода, нереентерабельны.

Для связи с любыми процедурами прерываний, а следовательно, и с процедурами, написанными программистом, используются векторы прерываний - четырехбайтные абсолютные адреса точек входа в эти процедуры. Векторы прерываний располагаются в младших адресах оперативной памяти, начиная с нулевого адреса: прерывание номер 0 - по адресу 0, номер 1 - по адресу 1*4 = 4, номер N - по адресу N * 4. С помощью следующих двух процедур программист может прочитать содержимое любого вектора или установить его новое значение.

Процедура GETINTVEC.

Возвращает вектор прерывания с указанным номером. Обращение:

GETINTVEC (<,<вектор>)

Здесь <D> - выражение типа BYTE; номер прерывания;

<вектор> - переменная типа POINTER; адрес точки входа в процедуру обработки прерывания.

Представленная в примере 11.3 программа выводит на экран содержимое всех ненулевых векторов прерываний.

Пример

Uses DOS; 

var

i : byte; p : pointer; 

begin

for i := 0 to 255 do 

begin

GetlntVec (i, p) ;

if (Seg (р) <> 0) or (Ofs (рл) <> 0) then 

WriteLn (' N=', i:3, ' Seg=', Seg (р):5,

' Ofs =' , Ofs (р) :5) 

end 

end.

Процедура SETINTVEC.

Устанавливает новое значение вектора прерывания. Формат обращения:

SETINTVEC (<D>,<адрес>)

Здесь <D> - выражение типа BYTE; номер прерывания;

<адрес> - выражение типа POINTER; адрес точки входа в процедуру обработки прерывания.

При нормальном завершении программы она выгружается из памяти, что делает невозможным разработку резидентных в памяти процедур обработки прерываний. Вы можете прекратить работу программы и оставить ее резидентной в памяти, если воспользуетесь процедурой KEEP.

Структура резидентной программы. Вызов исполняемых программ. Передача параметров вызываемым программам. Процедурные типы. Передача функций в качестве параметров.

Структура резидентной программы.

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

Вспомогательная часть выполняет следующие действия:

1.) сохраняет векторы "захватываемых" прерываний во внутренних переменных;

2.) устанавливает эти векторы по адресу резидентной части программы;

3.) инициализирует внутренние переменные резидентной части;

4.) завершает работу программы без удаления резидентной части из памяти компьютера.

С того момента как резидентная часть программы находится в ОЗУ, и на нее указывает вектор "захваченного" прерывания, она может быть активизирована путем вызова этого прерывания.

Построение резидентной части может осуществляться по трем схемам выполнения.

В схеме "А" сначала вызывается системная обработка, а затем производится добавочная пользовательская обработка, написанная программистом. Эта схема подходит в том случае, когда программист хочет чем-либо дополнить системную обработку. Например, можно заставить машину менять по нажатию клавиш Ctrl-Alt атрибуты яркости символов на противоположные.

(* Резидентная программа, которая при

нажатии клавиш Ctrl-Alt генерирует звук *)

{$M 3000,0,3000}                                                    (* Резервирование памяти *)

uses crt,dos;

program resident_example (input,output);

var

            i:word;

            ch:char;

            int9:procedure;

            logr:boolean;

{$F+}

(* РЕЗИДЕНТНАЯ ЧАСТЬ ПРОГРАММЫ *)

procedure pressbutton(flags,CS,IP,AX,BX,CX,DX,SI,DI,ES,DS,BP:word);interrupt;

var

            b:byte;

            i:word;

begin

            inline($9c);                                          (* Имитация прерывания (PUSHF) *)

            int9;                                                    (* Вызов системной обработки *)

            b:=mem[$0000:$0417];                                  (* Чтение флагов клавиатуры *)

            if ((b and 12)=12) and (logr) then                    (* Проверка нажатия Ctrl-Alt *)

            begin

                        logr:=false;

                        i:=500;

                        while i<=1000 do                                (* Программирование динамика *)

                        begin

                                   sound(i);

                                   delay(1);

                                   inc(i,20);

                        end;

                        nosound;

                        logr:=true;

            end;

            if (b and 5)=5 then                               (* Проверка нажатия RightShift-Ctrl *)

                        setintvec($9,addr(int9));                      (* Восстановление захваченного вектора *)

end;

                                                                       (* Возврат управления *)

{$F-}

(* ВСПОМОГАТЕЛЬНАЯ ЧАСТЬ ПРОГРАММЫ *)

begin

            getintvec($9,@int9);                            (* Сохранение вектора 09H *)

            setintvec($9,addr(pressbutton));                      (* Установка вектора 09H *)

            logr:=true;                                           (* Инициализация внутренней переменной *)

            keep(0);                                                          (* Выход с сохранением памяти *)

end.

Вызов исполняемых программ

Из программы, написанной на Турбо Паскале, можно запустить любую другую готовую к работе программу. Для этого используется процедура ЕХЕС из библиотечного модуля DOS. Формат обращения к процедуре:

ЕХЕС (<имя>,<параметры>)

Здесь <имя> - выражение типа STRING; имя файла с вызываемой программой; <параметры> - выражение типа STRING; параметры вызова.

Имени запускаемой программы может предшествовать путь к файлу. Параметры передаются запускаемой программе в виде текстовой строки и могут быть проанализированы ею с помощью двух следующих функций.

Передача параметров вызываемым программам.

Функция PARAMCOUNT.

Возвращает общее количество параметров вызова программы (значение типа WORD). Обращение:

PARAMCOUNT

Параметры вызова обычно следуют в командной строке ДОС сразу за именем вызываемой программы и отделяются от этого имени и друг от друга пробелами, например:

C:\TP\TURBO MYPROG.PAS 

C:\SIAM A:\SYSTEM1.SIA

Здесь MYPROG.PAS и A:\SYSTEM1.SIA - параметры, передаваемые программам TURBO и SIAM.

При вызове программы непосредственно из среды Турбо Паскаля ей можно передать параметры с помощью опции OPTIONS/PARAMETERS (см. прил.1).

Функция PARAMSTR.

Возвращает значение типа STRING, соответствующее нужному параметру вызова. Формат обращения:

PARAMSTR (<D>)

Здесь <D> - выражение типа WORD; порядковый номер параметра.

Заметим, что программе всегда передается параметр, соответствующий N = 0. В этом параметре ДОС сообщает полное имя запущенной программы с указанием диска и каталога, откуда она была загружена.


 

А также другие работы, которые могут Вас заинтересовать

54334. Формування логічного мовлення школярів у період навчання грамоти засобами словниково-логічних вправ 192 KB
  Важливе місце у цьому процесі належить збагаченню словника дитини словаминазвами предметів їхніми якостями діями. Як свідчить практика головна увага вчителя у цей час спрямована на вивчення звукового комплексу слова тим часом його лексичне значення нерідко залишається поза увагою. Досвід підказує що шестирічна дитина здатна розрізняти і фонетичну і семантичну сторони слова усвідомлювати його як мовну одиницю. В основі методики формування лексичних понять необхідна робота над лексичним значенням слова.
54335. ВІДЛУННЯ ЕПОХ У МУЗИЧНОМУ МИСТЕЦТВІ 43.5 KB
  Без музики важко переконати людину яка вступає в світ у тому що людина прекрасна а це переконання по суті є основою емоційної естетичної моральної культури В. Загальна...
54336. Текстові формули (функції) Microsoft Excel (MICROSOFT OFFICE 2010) 263.5 KB
  Необхідно використовуючи текстові функції заповнити даними таблицю № Автор Назва книги Видавник Кількість сторінок. формат запису функції НАЙТИискомый_текст; просматриваемый_текст; начальная позиция в якості результату повертає позицію початку пошукового рядка тексту який міститься в даному рядку текста.
54337. Методичний конструктор як техніка підготовки педагогів до впровадження директивних інновацій 59.5 KB
  Цей методичний захід має бути необхідний закладу та учителям легкий у виконанні не обтяжуючий учасників заходу і водночас корисний Для цього треба не забувати про особливості навчання дорослих людей які мають свій досвід свої погляди на себе та оточуючий світ на розвиток себе в професії і суспільстві. Подруге підійдіть до розробки заходу дуже ретельно хоча на сучасному етапі саме розробка дійсно якісного методичного заходу не завжди є проблемою для цього є маса літератури з даного приводу але до технік що обираються треба...
54338. Використання методу проектів на уроках інформатики 187 KB
  Тема: Компютерні презентації Проект: Я інформую Тип проекту : інформаційнотворчий. Очікуваний результат: створення презентації засобами MS PowerPoint. Порада Перед створенням презентації бажано: Визначити тему та призначення презентації Створити схему сценарій презентації Спланувати зміст усіх слайдів їх стиль. ДОДАТКОВІ ВИМОГИ ДО ЗМІСТУ ПРЕЗЕНТАЦІЇ ЗА Д.
54339. ВИКОРИСТАННЯ ПРОЕКТНИХ ТЕХНОЛОГІЙ НА УРОКАХ МАТЕМАТИКИ ЯК ЗАСІБ АКТИВІЗАЦІЇ ПІЗНАВАЛЬНОЇ ДІЯЛЬНОСТІ УЧНІВ 107.5 KB
  Дуже важливою також є структуризація змістовної частини проекту із зазначенням поетапних результатів. Необхідною складовою методики здійснення проектної діяльності є складання загальної моделі що розглядається як умовний образ схема кінцевого результату проекту. Першим із них передбачено виконання завдань навчального проекту та здійснення презентації кінцевого інтелектуального матеріального продукту безпосередньо на уроці або під час проведення серії уроків з певної теми. Водночас педагогічна функція вчителя ускладнюється порівняно з...
54340. Метод проектів на уроках інформатики 78.5 KB
  Історія виникнення методу проектів Місце методу проектів у навчальному процесі Формування проектних компетенцій Метод проектів на уроках інформатики Висновки Використані джерела Вступ Сучасну практичну діяльність людства науковотехнічний та культурний прогрес у різних сферах суспільного буття неможливо уявити без проектування і проектів. Історія виникнення методу проектів Використання у навчальновиховному процесі методу проектів не є новим для українських шкіл. Першим увів поняття метод проектів...
54341. Культура Европы в XX - начале XXI вв.: противоречия и проблемы 28.21 KB
  Таким образом процесс подготовки и проведения такого учебного занятия как комбинированный урок увлекает студентов активизирует их достаточно свободно пользоваться простыми языковыми средствами в основных видах речевой деятельности: говорении аудировании чтении и письме. ФГОУ СПО Чебоксарский техникум строительства и городского хозяйства МЕТОДИЧЕСКАЯ КАРТА ЗАНЯТИЯ Дисциплина: Английский язык Группа: С41 Преподаватель: Бутакова Л. Тема занятия: Строительство зданий и сооружений Тип и вид занятия: комбинированный Цели занятия...