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 машинное слово Address of the password for the first FCB (CP/M 3)
53 Байт Length of the password for the first FCB (CP/M 3)
54-55 машинное слово Address of the password for the second FCB (CP/M 3)
56 Байт Length of the password for the second FCB (CP/M 3)
57-5B Байты Зарезервированно
5C-6B Дефолт FCB 1
6C-7F Дефолт FCB 2 (перезаписывается, если открыт CB 1)
80 Байт Количество символов в командной строке
81-FF Байты Командная строка

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

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

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

org   100h

; int 21h подфункция 9 требует '$' для завершения строки
xor   bx, bx
mov   bl, [80h]
mov   byte [bx + 81h], '$'

; вывод строки
mov   ah, 9
mov   dx, 81h
int   21h

; завершение
mov   ax, 4C00h
int   21h

Примечания

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

Ссылки

править

📚 Artikel Terkait di Wikipedia

Bad command or file name

вызывающим ошибку): "foo" is not recognized as an internal or external command, operable program or batch file. Некоторые ранние оболочки Unix выдавали столь же

Bell UH-1Y Venom

компанией Bell Helicopter в рамках программы модернизации H-1 (H-1 upgrade program[англ.]) для Корпуса морской пехоты США. Один из последних членов многочисленного

Управляющие символы

SYSTEM COMMAND (OSC), команда операционной системы. 0x9E, PRIVACY MESSAGE (PM), конфиденциальное сообщение. 0x9F, APPLICATION PROGRAM COMMAND (APC), команда

CLIST

WORLD" PROGRAM. */ /* */ /* THIS CLIST CAN BE INVOKED FROM THE ISPF COMMAND LINE AS SHOWN */ /* IN THE FOLLOWING EXAMPLE: */ /* */ /* COMMAND ===> TSO

8.3

или каталогов. Пример файла в формате 8.3: «command.com» Пример имени каталога с использованием LFN: «Program Files» Пример имени каталога с LFN при просмотре

Rundll32.exe

RUNDLL32 Rundll32 commands — Windows command line GUI access . How to run Control Panel tools by typing a command C++ — System Dialogs The Geek. What is

Боевые системы будущего

машина Medical Vehicle Treatment (MV-T) XM1208, командно-штабная машина Command and Control Vehicle (C2V) XM1209. При этом все боевые системы должны были

Null object (шаблон проектирования)

отсутствие такового). Впервые опубликован в серии книг Pattern Languages of Program Design. В таких объектно-ориентированных языках как Java или C# объекты