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










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

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

Сегмент программного префикса (PSP)

Когда DOS загружает программу, он создает сегмент префикса программы. В предыдущей главе описаны многие из полей PSP. DOS всегда помещает PSP на шестнадцатибайтовую границу параграфа, так что он может быть описан, как значение длиной в слово (сегмент, а смещение ноль). Команда DOS 62h возвращает адрес текущего PSP в регистре BX (недокументированная функция AH=51h также возвращает PSP в BX).


Листинг 4-15 показывает структуру PSP. Поля PSP PSP_D_JFTAddr и PSP_W_JFTSize содержат адрес и размер рабочей таблицы файлов (JFT). PSP содержит также копию (по умолчанию) JFT, начинающуюся с JFT_T_JFT. DOS использует некоторые другие поля PSP для обработки критических ошибок и запроса завершения; подробнее об этих полях позднее.



                            Листинг 4-15. Структура PSP
         ----------------------------------------------------------------

         PSP   STRUC
         PSP_W_int20     DW    0cd20h ; [00] команда int 20
         PSP_W_MemSiz    DW    0      ; [02] начало памяти (para)
         PSP_B_Unused0   DB    0      ; [04] неизвестно
         PSP_T_Call      DB    09aH,0f0h ; [05] дальний вызов DOS
                         DB    0feH,01dh,00f0h ; диспетчер (CPM relic)
         PSP_D_Term      DD    0      ; [0a] конечный адрес
         PSP_D_Break     DD    0      ; [0e] адрес прерывания
         PSP_D_CritErr   DD    0      ; [12] критическая ошибка
         PSP_W_Parent    DW    0      ; [16] родительский PSP
         PSP_T_JFT       DB    14h   DUP   90ffn) ; [18] таблица JFT
         PSP_W_Envron    DW    0      ; [2c] окружение
         PSP_D_SSSP      DD    0      ; [2e] SS:SP пользователя на
                                      ; время int 21
         PSP_W_JFTSize   DW    14h    ; [32] размер JFT
         PSP_D_JFTAddr   DD    0      ; [34] адрес JFT
         PSP_D_NextPSP   DW    0ffffH,0ffffh ; [38] не применяется
         PSP_T_Unused2   DB    14h    DUP  (0) ; [3c] не применяется
         PSP_W_Int21     DW    0cd21h ; [50]
         PSP_B_Retf      DB    0      ; [52]
         PSP_T_Unused3   DB    9     DUP  (0) ; [53]
         PSP_T_Parm1     DB    10h   DUP  (0) ; [5c] форматировано param 1
         PSP_T_Parm2     DB    14h   DUP  (0) ; [6c] форматировано param 2
         PSP_T_DTA       DB    80h   DUP  (0) ; [80] по умолчанию DTA
         PSP   ENDS
         ----------------------------------------------------------------

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

Hosted by uCoz