Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторная_работа_1-4(8086).doc
Скачиваний:
58
Добавлен:
21.03.2015
Размер:
217.09 Кб
Скачать

Структура psp

Префикс программного сегмента PSP (Program Segment Prefics) – специальная область оперативной памяти размером 256 (100h) байт. PSP может использоваться в программе для определения имен файлов и параметров из командной строки, введенной при запуске программы на выполнение, объема доступной памяти, переменных окружения системы и так далее. После загрузки программы в память сегментные регистры DS и ES указывают на начало PSP этой программы.

Таблица. Структура PSP

Сме-щение

Длин-на

Содержимое

+0

2

INT 20 (EXE-программы могут делать сюда JMP или RET для выхода)

+2

2

вершина доступной памяти системы в параграфах

+4

1

резервируется

+5

5

FAR CALL к диспетчеру функций DOS

+6

доступные байты в программном сегменте (только для файла COM)

+0ah

4

адрес завершения

+0eh

4

адрес обработки Ctrl-Break

+12h

4

обработчик критических ошибок

+16h

16h

резервная область DOS

+2ch

2

сегментный адрес окружения DOS

+2eh

2eh

резервная область DOS

+5ch

10h

форматированная область параметра1

+6ch

14h

форматированная область параметра2

+80h

1

длина области UPA (с адреса 81H) также смещение умалчиваемой DTA

+81h

7fh

символы из командной строки DOS (исключая директивы переназначения)

100h

Размер префикса программного сегмента

Окружение dos

DOS поддерживает область памяти, содержащую набор строк ASCIIZ, которые могут использоваться приложениями для получения некоторой системной информации и для передачи данных между программами. Эта область памяти называется окружением DOS.

Структура окружения DOS:

имя_1=значение_1«0»

имя_2=значение_2«0»

. . .

имя_N=значение_N«0»

«0»

«xxxx»

EXEC_string_1«0»

. . .

EXEC_string_NN«0»

«0»

Здесь «0» - это символ ASCII NUL (00H), а «xxxx» - 16-битовое двоичное значение (количество дополнительных строк).

Окружение не превышает 32K байт и начинается на границе параграфа. Смещение 2cH в PSP текущей программы содержит номер параграфа окружения. Используя окружение, можно найти нужное имя' серией сравнений строк ASCIIZ, пока не достигнута пустая строка (нулевой длины), что указывает конец окружения.

В последних версиях DOS, за концом официального окружения помещается дополнительная строка, которая содержит диск и путь, с которых была загружена программа. Вслед за последней строкой ASCIIZ окружения находится нулевой байт, указывающий конец официального окружения. Следующие два байта содержат 16-битовый двоичный счетчик дополнительных строк (обычно 0001H). Вслед за значением счетчика находится строка ASCIIZ, содержащая путь и имя файла. Это в точности та строка, которая использовалась функцией DOS 4bH (EXEC) для загрузки и запуска программы.

Лабораторная работа №4 Работа с прерываниями: перехват и восстановление.

Цель. Изучить алгоритм переопределения и восстановления прерываний.

Задание. Разработать программу переопределения прерывания 05h (клавиша PrintScreen).

Замечания:

  1. перед загрузкой нового вектора прерывания необходимо сохранить старый вектор (функция 35h прерывания 21h);

  2. для проверки, новая процедура обработки прерывания 05h должна выполнять действия в соответствии с вариантом задания. В основной программе необходимо организовать большой цикл, в течении которого можно будет проверить работы прерывания (прерывание 21h в этом цикле использовать нельзя, если оно будет использоваться в подпрограмме обработки прерывания;

  3. вывод на экран в из подпрограммы обработки прерывания, можно выполнять, используя функции прерывания 21h, но лучше непосредственно оперируя с видеопамятью;

  4. перед выгрузкой программы из памяти восстановить старый вектор прерывания (функция 25h прерывания 21h).

Таблица. Варианты заданий

Вариант

Задание

1

Подпрограмма обработки прерывания должны выводить звуковой сигнал (символ с кодом 7 на экран).

2

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

3

Подпрограмма обработки прерывания должны выводить на экран время текущего вызова (функция 2сh прерывания 21h).

4

Подпрограмма обработки прерывания должны выводить на экран текущую дату (функция 2ah прерывания 21h).

5

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

6

Подпрограмма обработки прерывания должны выводить на экран время загрузки программы в память (время читается и сохраняется при запуске программы функцией 2сh прерывания 21h).

7

Подпрограмма обработки прерывания должны выводить на экран имя программы. (Имя читается, например, из окружения DOS при загрузке программы в память).

8

Подпрограмма обработки прерывания должны выводить на экран содержимое регистра флагов в двоичной или другой, удобной для восприятия форме.

9

Подпрограмма обработки прерывания должны выводить на экран свой адрес в шестнадцатеричной системе счисления в форме «сегмент:смещение». (Эти данные можно прочитать из 5 ячейки таблицы векторов прерывания).

10

Подпрограмма обработки прерывания должны выводить на экран номер версии DOS (функция 30h прерывания 21h).