|
|
|
|
Функции для манипулирования PSP
MS-DOS содержит функции, относящиеся непосредственно к префиксу программного сегмента. Эти функции перечислены в таб. 3-2. Для этих функций,
которые получают и устанавливают PSP, текущий PSP определяется MS-DOS не по программному сегменту, выполняемому в данное время.
Например, предположим, что выполняется программа MYPROG, когда получает управление установленная подпрограмма (TSR, если угодно) и выдает вызов
функции GET PSP (получить PSP - функция с кодом 62h). В этом случае MS-DOS возвращает значение PSP для прерванной программы MYPROG. Это происходит
потому, что после того как подпрограмма резидентной памяти выполнит функцию Keep Process (сохранить процесс) или завершить и оставить резидентной,
она еще некоторое время будет считаться активной. MS-DOS считает последнюю загруженную программу текущей активной программой.
Если важно, чтобы TSR имела доступ к своему собственному PSP, то для этого может быть использована недокументированная функция SET PSP (установить
PSP - функция с кодом 50h). Когда TSR загружается в первый раз, она должна сохранить значение своего PSP. Затем , когда TSR позднее получит
управление, PSP прерванной программы может быть определен с помощью функции 62h (GET PSP-получить PSP). Это значение должно быть сохранено и
активизирован собственный PSP TSR с помощью функции 50h (SET PSP - установить PSP). После выполнения TSR, она должна восстановить первоначальный
PSP с помощью функции SET PSP (установить PSP).
Таблица 3-2
Функции прерываний int 21h для сегмента программого префикса
________________________________________________________________
|
Функция| Назначение
________|_______________________________________________________
26h | Создание блока PSP. Устаревшее использование
________|_______________________________________________________
50h | Установка текущего PSP. Недокументированная. BX содер-
| жит адрес сегмента действительного PSP. Эта функция
| заставляет новый PSP (BX) стать активным PSP для
| MS-DOS. Последовательные обращения к MS-DOS, ссылающи-
| еся к данным PSP, также как таблица описателя файла,
| будут использовать новый PSP.
________|_______________________________________________________
51h | Получить сегмент PSP. Недокументированная. Возвращает
| адрес текущего сегмента PSP в регистре BX. Это тоже
| самое, что и функция 62h, но она также доступна и в
| более ранних версиях MS-DOS 3.00. Ненадежна для вызова
| из TSR. Вместо этой функции рекомендуется использовать
| функцию 62h.
________|_______________________________________________________
55h | Получить копию PSP. Недокументированная. Функция почти
| идентична функции 26h. DX содержит адрес сегмента но-
| вого PSP. Однако, эта функция будет также устанавли-
| вать поле владельца нового PSP для адреса сегмента те-
| кущего PSP. Т.к. это недокументированная функция и по-
| лезна только при загрузке новой программы, то вместо
| нее рекомендуется использовать функцию EXEC (выпол-
| нить) с кодом 4Bh.
________|_______________________________________________________
62h | Получить текущий PSP. MS-DOS версии 3.00 и последующие
| версии. Возвращает адрес сегмента текущего PSP в ре-
| гистре BX.
________|_______________________________________________________
|
|
|