Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ASM_lectures.doc
Скачиваний:
27
Добавлен:
28.04.2019
Размер:
992.77 Кб
Скачать

Префикс сегмента программы (psp)

(program segment prefix)

PSP – это область размером 100h (25610), которая содержит информацию, необходимую DOS для обеспечения работы программы. Для СОМ-программы сегментные регистры (CS, DS и ES) указывают на начало PSP, а программа размещается сразу вслед за PSP, то есть со смещением 100h от начала PSP.

Структура префикса программного сегмента.

Поле

Смещение от начала PSP

Размер поля (десятичн)

Значение

1

0h

2 байт

Команда INT 20h

2

2h

2 байт

Размер памяти в параграфах

3

4h

1 байт

Резерв, обычно 0

4

5h

5 байт

Вызов диспетчера функций DOS

5

Ah

4 байт

Вектор завершения работы (Адрес завершения CS:IP)

6

Eh

4 байт

Вектор прерывания работы (Адрес выхода Ctrl-Break)

7

12h

4 байт

Вектор ошибки (Адрес выхода по ошибке)

8

16h

22 байт

Используется DOS

9

2Ch

2 байт

Указатель строки связи с окружающей средой

10

2Eh

34 байт

Рабочая область DOS

11

50h

3 байт

Коменды INT 21h, RETF

12

53h

2 байт

Зарезервировано

13

55h

7 байт

Расширение FCB #1

14

5Ch

9б айт

FCB #1

15

65h

7 байт

Расширение FCB #2

16

6Ch

20 байт

FCB #2

17

80h

1 байт

Длина параметров

18

81h

127 байт

Параметры

19

80h

128 байт

Область передачи информации

Поле 1 содержит байты CD20, то есть команду INT 20h.

Прерывание INT 20h используется для завершения программы и передачи управления DOS. Прерывание INT 20h эквивалентно AH=0 (функции 0) INT 21h. INT 20h не закрывает все открытые этой программой файлы.

Более совершенная функция выхода из программы h - завершает работу программы и передает тому, кто ее вызвал, код возврата. Если программа была вызвана как подпрограмма, то вызвавшая ее программа может получить код возврата с помощью функции 41h. Если программа вызывалась командой DOS, то код возврата может быть проверен в командном файле с помощью команды ERRORLEVEL. Код возврата возвращается в AL/ При выполнении этой функции DOS автоматически закрывает все файлы, открытые с помощью 3Dh и, возможно, h.

Итак, команда INT 20h находится в начале PSP . Таким образом, можно выйти из программы, просто передав управление на эту ячейку (при условии, что CS указывает на PSP).

Размещение в начале PSP команды INT 20h может быть объяснено тем, что если LINK обнаруживает в программе неудовлетворенную внешнюю ссылку, то он присваивает ее адресу смещения 0. при передаче управления на эту ссылку выполнится команда, находящаяся в начале PSP, то есть INT 20h, - что вызовет завершение программы.

Поле 2 – сколько памяти доступно – содержит номер последнего блока памяти, доступной DOS. Умножив это число на 16, получим общий объем памяти в байтах. То же самое значение, что и в поле 2, возвращает команда CHKDSK DOS. Если программе необходима вся доступная память, то она должна использовать это поле PSP для определения того, сколько памяти она может использовать.

Программа также может получать и возвращать память с помощью вызова функции h.

Поле 4. Это команда вызова с аттрибутом дистанции FAR диспетчера функций DOS. Следовательно, эта команда содержит полный адрес диспетчера. Этот полный адрес не только указывает на диспетчера, но при этом его смещение указывает, сколько памяти в сегменте команд мы можем использовать (до FFF0, то есть на 16 байт меньше, чем 64 КБайт). Это смещение расположено в PSP со смещением 6, сразу за кодом команды, имеющим смещение 5.

Это поле, в отдличие от предыдущего, должно работать с большинством многооконных и мультипрограммных систем. Если DOS может предоставить более 64 Кбайт, то определить, на сколько больше, мы можем по полю 2.

Поля 5, 6 и 7.

Это полные адреса, для трех прерываний по завершению работы, по Ctrl-Break (Ctrl-C) и по ошибке. Если мы хотим использовать свои программы для обработки этих ситуаций, то должны временно изменить эти слова. В конце работы вектора должны быть восстановлены.

Поле 9.

Полный адрес набора строк описания окружающей среды. это набор ASCIIZ строк. каждая строка имеет форму

ИМЯ = значение

Обычно эта среда содержит по крайней мере имя СОМSPEC (используемое DOS для поиска на диске файла COMMAND.COM).

Поле 11.

Содержит команды INT 21H и команду возврата управления вызвавшей программе RETF (так как RET с дальним аттрибутом дистанции FAR).

Таким образом, вместо INT 21h мы можем косвенно через смещение в PSP вызвать эту команду.

Поля 13, 14, 15 и 16.

FCB (File Control Block)

Устаревший способ работы с файлами.

Поля 17, 18.

Обеспечивают нашим программа доступ к параметрам командной строки. Поле 17 содержит полную длину строки параметров (которая может быть от 0 до 127), а поле 18 – ее содержимое.

Передаваемая строка не содержит имя вызванной программы. Строка начинается с символа, следующего в команде вызова сразу за именем программы; обычно это пробел. Разделители, пробелы и запятые не отбрасываются и не снимаются. Любые параметры переадресации ввода/вывода (такие как < - ввод и > - вывод) изымаются DOS и строка реконструируется таким образом, как будто этих элементов не было вообще. В результате этих двух операций программа не может узнать о переадресации стандартного ввода-вывода и не может узнать свое собственное имя.

Поле 19.

Это область, которая по умолчанию используется DOS для обмена данными с диском (DTA – Disk Transfer Area). Это буфер длиной 128 байт, имеющий смещение 80h. Используется всегда, когда мы пользуемся служебной процедурой DOS для обмена с диском, не задавая в качестве буфера свою собственную область.

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