Интернет магазин китайских планшетных компьютеров



Компьютеры - Program Segment Prefix

07 мая 2011





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

Offset Size Contents
00-01 2 байта Выход CP/M
02-03 машинное слово Объем оперативной памяти в пунктах
04 байт Зарезервировано
05-09 5 байтов Дальний вызов совместимости кода CP/M в DOS
0A-0D dword Завершить адреса предыдущей программы
0E-11 dword Прервать адреса предыдущей программы
12-15 dword Адрес критической ошибки предыдущей программы
16-17 машинное слово Сегмент PSP вызывающего процесса
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
53-5B 9 байт Зарезервировано
5C-6B 16 байт Закрытый уровень FCB 1
6C-7F 20 байт Закрытый уровень FCB
80 1 байт Количество символов в командной строке
81-FF 127 байт Командная строка

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

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

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

org   100h

; int 21h subfunction 9 requires '$' to terminate string
xor   bx, bx
mov   bl,
mov   byte, '$'

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

; exit
mov   ax, 4C00h
int   21h


Просмотров: 983


<<< MSDOS.SYS
PTS-DOS >>>