WikiSort.ru - Не сортированное

ПОИСК ПО САЙТУ | о проекте

Program Segment Prefix (рус. Префикс программного сегмента, PSP) — структура данных, которая используется в операционных системах семейства DOS и CP/M для сохранения состояния компьютерных программ.

PSP в DOS имеет следующую структуру:

Offset (Смещение) Size (Размер) Contents (Содержание)
00-01 2 байта (код) Содержит код INT 20 выхода из программы в стиле CP/M (для совместимости)
02-03 машинное слово (2 байта) Сегмент, расположенный сразу после выделенной программе памяти
04 байт Зарезервировано
05-09 5 байтов (код) Содержит код CALL FAR для вызова функций DOS в стиле CP/M (для совместимости)
0A-0D dword (4 байта) Адрес обработчика Terminate предыдущей программы (предыдущий INT 22)
0E-11 dword Адрес обработчика Break предыдущей программы (предыдущий INT 23)
12-15 dword Адрес обработчика критических ошибок предыдущей программы (предыдущий INT 24)
16-17 машинное слово Сегмент PSP вызывающего процесса (как правило, command.com - внутренний)
18-2B 20 байт en:Job File Table (внутренняя)
2C-2D машинное слово Сегмент переменных среды
2E-31 dword SS:SP на входе к последнему вызову INT 21 (внутренний)
32-33 машинное слово максимальное количество открытых файлов (внутренний - см. ниже)
34-37 dword Адрес ручных записей (внутренний - см. ниже)
38-4F 24 байта Зарезервировано
50-52 3 байта (код) Для вызова к DOS (всегда содержит INT 21 + RETF)
53-5B 9 байт Зарезервировано
5C-6B 16 байт Закрытый уровень FCB 1
6C-7F 20 байт Закрытый уровень FCB (перезаписан, если FCB 1 открыт)
80 1 байт Количество символов в командной строке
81-FF 127 байт Командная строка (завершается 0Dh)

PSP (Zero-Page или Base Page) в CP/M-86

Offset (Смещение) Size (Размер) Contents (Содержание)
00-02 3 байта Длина кодовой группы в байтах
03-04 машинное слово Адрес сегмента кодовой группы
05 Байт Флаг модели 8080 - установлен, если программа в одном сегменте
06-08 машинное слово Длина группы данных в байтах
09-0A машинное слово Адрес сегмента группы данных
0B Байт Зарезервировано
0C-11 Дескриптор дополнительной группы - формат как для группы данных
12-17 Дескриптор группы стека - формат как для группы данных
18-1D Дескриптор группы X1 - формат как для группы данных
1E-23 Дескриптор группы X2 - формат как для группы данных
24-29 Дескриптор группы X3 - формат как для группы данных
2A-2F Дескриптор группы X4 - формат как для группы данных
30-4F Зарезервировано
50 Байт Диск, с какого была загружена программа (CP/M 3)
51-52 Word Address of the password for the first FCB (CP/M 3)
53 Byte Length of the password for the first FCB (CP/M 3)
54-55 Word Address of the password for the second FCB (CP/M 3)
56 Byte Length of the password for the second FCB (CP/M 3)
57-5B Bytes Reserved
5C-6B Default FCB 1
6C-7F Default FCB 2 (overwritten if FCB 1 is opened)
80 Byte Количество символов в командной строке
81-FF Bytes Командная строка

PSP наиболее часто используется для получения аргументов из командной строки программой под DOS, например, команда "foo.exe -a -f" исполнит (запустит) файл foo.exe с аргументами '-a' и '-f'.

Сегментный адрес PSP будет занесён в регистр DS в момент исполнения программы. Также он может быть позже определён через использование прерывания №21 подфункции №62. Это прерывание возвратит адрес PSP в регистр BX.[1]

Кроме этого, в .COM-программах можно обратиться непосредственно к PSP только при помощи смещений в списке выше. 00h указывает на начало PSP, FFh указывает на конец, и т.д. Например, следующий код отображает аргументы командной строки:

org   100h

; int 21h subfunction 9 requires '$' to terminate string
xor   bx, bx
mov   bl, [80h]
mov   byte [bx + 81h], '$'

; print the string
mov   ah, 9
mov   dx, 81h
int   21h

; exit
mov   ax, 4C00h
int   21h

Примечания

  1. INT 21,62 - Get PSP address (DOS 3.x). Архивировано 26 апреля 2012 года.

Внешние ссылки

Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".

Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.

Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .




Текст в блоке "Читать" взят с сайта "Википедия" и доступен по лицензии Creative Commons Attribution-ShareAlike; в отдельных случаях могут действовать дополнительные условия.

Другой контент может иметь иную лицензию. Перед использованием материалов сайта WikiSort.ru внимательно изучите правила лицензирования конкретных элементов наполнения сайта.

2019-2025
WikiSort.ru - проект по пересортировке и дополнению контента Википедии