Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
133.doc
Скачиваний:
14
Добавлен:
30.04.2022
Размер:
970.75 Кб
Скачать

8.2. Задание

Реализовать программное управление заданным дискретным объектом в реальном масштабе времени.

8.3. Порядок выполнения работы

  1. Получить у преподавателя временную .

  2. Написать на Паскале разделы программы с описанием модулей, меток, констант и переменных. Указать на использование библиотечных модулей Паскаля Crt, Dos.

  3. Написать подпрограмму обработки прерывания, заголовок которой в «Паскале» имеет вид:

Procedure Int(Flags,CS,IP,AX,BX,CX,DX,SI,DI,DS,ES,BP:word); INTERRUPT;

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

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

Var A: T absolute B; , где: A и B – переменные соответственно подпрограммы и основной программы, T – тип переменной.

Тело процедуры обработки прерывания должно содержать все операции, которые необходимо выполнить в данном такте. В завершении программы обработки должна быть команда разрешения контроллеру прерывания вновь реагировать на очередное прерывание: port[$20]:=$20;. Оператор возврата из прерывания в неявной форме присутствует в описании процедуры. Его не нужно вводить в явном виде.

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

  1. В теле основной программы определить адрес своей программы обработки прерывания. Для этого присвоить некоторой переменной An типа pointer (указатель) значение функции addr, возвращающей адрес переменной. Например, An:=addr(Int);

Переменная An будет иметь значение дальнего адреса программы обработки прерывания.

  1. Запомнить старый (системный) адрес обработки прерывания. Для этого используется процедура GetIntVec($1C, A_old);. Первый параметр процедуры – шестнадцатиричный номер вектора прерывания, адрес программы обработки которого мы сохраняем. Знак $ указывает на шестнадцатеричную систему счисления. В примере сохраняется адрес программы обработки прерывания с вектором $1C. Второй параметр – имя переменной типа Pointer, в которой будет храниться адрес старой программы обработки

  2. Установить новый адрес программы обработки прерывания. Для этого используют процедуру SetIntVec($1C,An);. Первый параметр процедуры -номер вектора прерывания, адрес программы обработки которого мы устанавливаем. Второй параметр – имя переменной типа Pointer, в которой содержится адрес новой программы обработки. При выполнении смены программ обработки процедура автоматически запрещает прерывания.

  3. Используя значения счетчика прерываний составить программу заданного перемещения ИМ, предусмотрев выход из основной программы пользователя по нажатию клавиши.

  4. Организовать при выходе из программы пользователя восстановение старого вектора прерывания, используя процедуру SetIntVec($1C,A_old);.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]