На главную
Подписка
Новости










Главная / MS-DOS / MS-DOS. РУКОВОДСТВО РАЗРАБОТЧИКА / Глава 3 / Функции для манипулирования PSP Сделать домашней страницей Добавить в избранное Написать писмо

НАЗАД СОДЕРЖАНИЕ ВПЕРЁД

Функции для манипулирования 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.
         ________|_______________________________________________________

НАЗАД СОДЕРЖАНИЕ ВПЕРЁД

Hosted by uCoz