Главная » Все файлы » Просмотр файлов из архивов » Документы » Лекция по разработке TST (курсовая работа)

Лекция по разработке TST (курсовая работа)

2018-01-09СтудИзба

Описание файла

Документ из архива "Лекция по разработке TST (курсовая работа)", который расположен в категории "". Всё это находится в предмете "системное программирование" из 4 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "лекции и семинары", в предмете "системное программирование" в общих файлах.

Онлайн просмотр документа "Лекция по разработке TST (курсовая работа)"

Текст из документа "Лекция по разработке TST (курсовая работа)"

33


Лекция по разработке TST (курсовая работа)

1. Вектор прерываний 2

2. Резидентные программы 2

3. Структура запускающей программы (2-е части) 2

4. Обработка прерываний в процессоре (программных и аппартных) 3

5. Установка резидента 3

6. Расчет размера резидента 3

7. Запуск части инициализации 3

8. Разбор параметров в основной программе 4

9. Определение и запоминание старого обработчика 4

10. Задание нового обработчика прерывания 4

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

12. Много обработчиков 5

13. Точки входа в обработчики прерываний и главную программу 5

14. Вызов старого обработчика прерывания 5

15. Связь с резидентной программой из программы 6

16. Контроль наличия резидента в памяти (другие способы) 7

17. Связь с резидентной программой с помощью клавиатуры 7

18. Выгрузка резидента (части выгрузки) 7

19. Освобождение памяти внутри резидента 7

20. Освобождение памяти внешнее из отдельной программы 8

21. Восстановление старых обработчиков 8

22. Память: область PSP, тело резидента и окружение процесса 8

23. Проверка загрузки и выгрузки с помощью утилиты mem.exe 8

24. Обработка прерываний ДОС в резиденте 8

25. Описание данных резидента 9

26. Вывод строк в резидентной программе на экран 9

27. Завершение основной программы при проверке повторной загрузки 9

28. Примеры резидентных программ. 10

1.Вектор прерываний

<far адрес обработчика>

<far адрес обработчика или блока>

<far адрес обработчика>

<системные области >

<области п/п ДОС и BIOS>

Пользовательские резидентные программы и драйверы

Пользовательские программы

Видеобуфер

<системные области >

<Буферы экрана для разных режимов>

<системные области >

Идентификационный № ЭВМ (2б)

HMA – High Memory Area

0000:0000 – начало области вектора

Каждый адрес - 4 байта

0000:03F – 1024б=4*256 – конец области вектора

0000:0400 – буферы, данные ОС и т.д

B800:0000 – буфер дисплея (видеопамять)

F000:FFFУE – IBM Computer Type

FFFF:FFF0 – конец области HMA

Все остальные детали смотрите в справочниках ДОС – General Memory Map.

2.Резидентные программы

Э
то программы, которые могут работать параллельно с другими программами ДОС (псевдопараллельно). Обращение к этим программам выполняется через прерывания.

3.Структура запускающей программы (2-е части)

Резидентная часть программы

Временная часть программы, используемая при инициализации резидента

- находиться постоянно в памяти и вызывается только посредством прерываний программных и аппаратных.

- работает только при запуске резидента, проверке повторного запуска или при выполнении процедуры выгрузки резидента.

4.Обработка прерываний в процессоре (программных и аппартных)

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

При обработке программных прерываний процессор (CPU) выполняет команду:

INT <номер прерывания>

Он автоматически вычисляет адрес процедуры прерывания на основе номера (№*4) и выполняет фактически команду CALL с запоминанием в стеке точки возврата (CS:IP). Запоминаются также флаги, а регистры общего назначения программист должен сохранять и восстанавливать самостоятельно в основной программе или в собственной процедуре обработки прерываний.

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

5.Установка резидента

Для установки резидента используется специальное прерывание ДОС (Terminate and Stay Resident - TSR):

031H – 21H.

Или BOIS прерывание

027Н

Они отличаются способом задания размера памяти резидента ("обрезания") и отдельными свойствами – см. в справочниках:

1- способ( >64kb и старшие версии ДОС):

MOV DX , <размер резидента в параграфах>

MOV AX, 3100H

INT 21H

2-способ:

MOV DX , <адрес конца резидента от PSP>

INT 27H

6.Расчет размера резидента

Для случая с прерыванием 031H – 21H нужно определить в параграфах размер оставляемой памяти. Он определяется для программы:

ORG 100h

Begin: …

INIT:

Так:

MOV DX, (INIT – BEGIN + 10fh)/16

100h – размер PSP, а

0Fh – коррекция при деление нацело (16) для округления целого числа параграфов.

7.Запуск части инициализации

BEGIN:

JPM INIT ; это метка начала части инициализации

; Определение данных резидента

8.Разбор параметров в основной программе

Разбор параметров вы освоили в 6-й ЛР. Здесь вкратце:

  1. В PSP со смещением 80Н задана длинна командной строки. Если - 0, то параметров в командной строке нет. (CS:80H – 1 байт).

  2. Начиная с CS:81H идет строка параметров которые нужно проверять, включая и сброс пробелов. Просмотр идет в цикле.

  3. Алгоритм просмотра реализуется в цикле и с учетом строгой и нестрогой последовательности параметров в задании.

9.Определение и запоминание старого обработчика

Для каждого прерывания нужно определить и запомнить адрес старого обработчика прерывания. Это делается для восстановления старого обработчика и, при необходимости, вызова его из собственного обработчика для выполнения стандартных действий (например, при обработке прерывания от клавиатуры).

Адрес обработчика считывается в поле длинной в 4 байта (длинный адрес).

OLD_09 dd ? ; адрес старого обработчика 09h

(поле определяется в пределах резидентной части)

MOV AH, 35h

MOV AL , 09h ; номер обработчика

INT 21h

MOV WORD PTR CS:OLD_09, BX

MOV WORD PTR CS:OLD_09+2, ES

10.Задание нового обработчика прерывания

Для каждого прерывания, которое обслуживает резидент нужно определить новый обработчик прерывания. Это делается с помощью функции 025h-21h.

MOV AH, 25h

MOV AL , 09h ; номер обработчика

LEA DX, NEW_09

INT 21h

Адрес NEW_09 должен быть определен в резидентной части программы (он является смещением), а сегментный адрес берется из регистра DS, поэтому он должен быть обязательно загружен и быть равным CS.

11.Другой способ запоминания старого и определение нового обработчика прерывания.

Можно напрямую, так как все адреса доступны и без прерываний считать и записать адрес прерываний. Рисунок. Текст этой программы:

Запоминание старого обработчика:

MOV AX, 0

PUSH AX

POP ES

MOV BX, WORD PTR ES: 09h*4

MOV WORD PTR CS:OLD_09, BX

MOV BX, WORD PTR ES: 09h*4 + 2

MOV WORD PTR CS:OLD_09+2, BX

И запись нового обработчика:

MOV AX, 0

PUSH AX

POP ES

LEA BX , NEW_09

MOV WORD PTR ES: 09h*4, BX

MOV BX, DS

MOV WORD PTR ES: 09h*4 + 2, BX

12.Много обработчиков

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

Обработчик 1

Обработчик 2

Обработчик 3

 вызов 1 из вектора прерываний

 вызов 1 из вектора прерываний

 вызов 1 из вектора прерываний

Рисунок.

13.Точки входа в обработчики прерываний и главную программу

Различают точку входа в основную программу (процедуру инициализации) и точки входа в обработчики прерываний. Так как процедуры обработки прерываний инициализируются процессором с использованием вектора прерываний, то их точка вызова определяется заносимым в вектор адресом. Отмечу, что завершение процедуры обработки должно выполняться командой IRET, или вызовом без возврата (JMP) старого обработчика прерывания (cм. ниже). Вызов программы инициализации, которая выполняется в обычном режиме, производится так:

BEGIN: …

JMP INIT

; определение полей и процедур обработки резидента

INIT: …

; команды и поля части инициализации

<выход из процедуры инициализации с фиксацией резидента>

< обычный выход из процедуры инициализации >

14.Вызов старого обработчика прерывания

Вызов старого обработчика прерывания может быть выполнен как безусловный переход (JMP), так и как переход с возвратом (CALL). И первом и во втором случае адресом вызова должен быть запомненный в резидентной части адрес старого обработчика (например: OLD_09).

При безусловном переходе:

JMP DWORD PTR CS:[OLD_09]

При переходе с возвратом:

CALL DWORD PTR CS:[OLD_09]

IRET

15.Связь с резидентной программой из программы

Связь с резидентной программой может быть выполнена разными способами: посредством специальных или общих прерываний и непосредственным вызовом процедур резидента с предварительным определением адреса из вектора.

Специальные прерывания 2F и 2D. Главная проблема – точно установить, что Вы обращаетесь именно к своей резидентной программе.

Мультиплексорное прерывание 2F:

1. Первоначально необходимо сохранить старый вектор и установить собственный обработчик в резидентном модуле (см. выше)/

2. Далее в резиденте описывается процедура типа:

NEW_2F PROC FAR

CMP AH, 0EEh ; собственный код

JE MY_OBR

JMP OLD_OBR

;

MY_OBR: CMP AL, 1 ; код наличия в памяти

JE M1

; Проверка выгрузки

CMP AL, 2 ; код выгрузки

JNE M2

; команды и данные для выгрузки

MOV AL, 0FFh ; сигнал об успешной выгрузке

IRET

; Установка признака наличия в памяти

M1: MOV AL, 0FFh ; по договоренности код информирования о наличия

M2: IRET

; Вызов старого обработчика

OLD_OBR: JMP DWORD PTR CS:[OLD_2F]

..

3. В основной программе для различных действий вызывается свой обработчик:

Для проверки наличия:

MOV AH, 0EEh

MOV AL, 1 ; Проверка наличия

INT 2Fh

CMP AL, 0FFh

JE IMET1 ; переход если резидент в памяти

; код если нет в памяти

Для передачи сигнала выгрузка (если при завершении резидент должен что-то делать):

MOV AH, 0EEh

MOV AL, 2 ; Сигнал выгрузки

INT 2Fh

CMP AL, 0FFh

JE IMET1 ; переход если выгружено

; код если не выгружен

Можно выполнять и другие действия для передачи информации резиденту из других программ.

16.Контроль наличия резидента в памяти (другие способы)

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

PASSW DW 626278

INT_09: …

Далее в программе инициализации вычисляем адрес резидента с помощью функции ДОС 35H.

MOV AH, 35h

MOV AL , 09h ; номер обработчика

INT 21h

SUB BX , 2

MOV AX , WORD PTR ES:BX

CMP AX , PASSW

JNE ERR ; метка обработки отсутствия в памяти

17.Связь с резидентной программой с помощью клавиатуры

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

По адресу 0417h – находится 2 байта для управляющих клавиш (Ctrl, Alt, Shift и др.),

По адресу 0419h – находится адрес головы циклического буфера (2 байта)

По адресу 041иh – находится адрес головы циклического буфера (2 байта)

По адресу 041Eh (32 - байта) – циклический буфер клавиатуры

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

Кроме того в AL можно прочитать символ или скан код непосредственно из клавиатуры через порт:

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5224
Авторов
на СтудИзбе
428
Средний доход
с одного платного файла
Обучение Подробнее