El prefijo de segmento de programa (del inglés - "Prefijo de segmento de programa", abreviado PSP ) es una estructura de datos que se utiliza en los sistemas operativos de la familia DOS y CP/M para guardar el estado de los programas informáticos .
PSP en DOS tiene la siguiente estructura:
Compensar | Tamaño | Contenido |
---|---|---|
00-01 | 2 bytes (código) | Contiene código de salida INT 20 en estilo CP/M (para compatibilidad) |
02-03 | palabra de máquina (2 bytes) | El segmento inmediatamente después de la memoria asignada al programa |
04 | byte | reservado |
05-09 | 5 bytes (código) | Contiene código CALL FAR para llamar a funciones DOS de estilo CP/M (para compatibilidad) |
0A-0D | palabra clave (4 bytes) | Dirección del controlador Terminate del programa anterior (INT 22 anterior) |
0E-11 | dword | Romper la dirección del controlador del programa anterior (INT 23 anterior) |
12-15 | dword | Dirección del controlador de errores críticos del programa anterior (INT 24 anterior) |
16-17 | palabra maquina | Segmento PSP del proceso de llamada (generalmente command.com es interno) |
18-2B | 20 bytes | es:Tabla de archivos de trabajo (interna) |
2C-2D | palabra maquina | Segmento variable de entorno |
2E-31 | dword | SS:SP en entrada a última llamada INT 21 (interno) |
32-33 | palabra maquina | número máximo de archivos abiertos (interno - ver más abajo) |
34-37 | dword | Dirección de entradas manuales (internas - ver más abajo) |
38-4F | 24 bytes | reservado |
50-52 | 3 bytes (código) | Para llamar a DOS (siempre contiene INT 21 + RETF) |
53-5B | 9 bytes | reservado |
5C-6B | 16 bytes | Nivel cerrado FCB 1 |
6C-7F | 20 bytes | Nivel de FCB cerrado (sobrescrito si FCB 1 está abierto) |
80 | 1 byte | Número de caracteres en la línea de comando |
81-FF | 127 bytes | Línea de comando (termina 0Dh ) |
PSP (Zero-Page o Base Page) en CP/M-86
Compensar | Tamaño | Contenido |
---|---|---|
00-02 | 3 bytes | Longitud del grupo de código en bytes |
03-04 | palabra maquina | Dirección de segmento de grupo de código |
05 | Byte | Indicador del modelo 8080: establezca si el programa está en un segmento |
06-08 | palabra maquina | Longitud del grupo de datos en bytes |
09-0A | palabra maquina | Dirección de segmento de grupo de datos |
0B | Byte | reservado |
0C-11 | Descriptor de grupo adicional: formato como para el grupo de datos | |
12-17 | Descriptor de grupo de pila: mismo formato que el grupo de datos | |
18-1D | Descriptor de grupo X1 - formato como para un grupo de datos | |
1E-23 | Descriptor de grupo X2 - formato como para un grupo de datos | |
24-29 | Descriptor de grupo X3 - formato como para un grupo de datos | |
2A-2F | Descriptor de grupo X4 - formato como para un grupo de datos | |
30-4F | reservado | |
cincuenta | Byte | Disco desde el que se cargó el programa (CP/M 3) |
51-52 | palabra maquina | Dirección de la contraseña para el primer FCB (CP/M 3) |
53 | Byte | Longitud de la contraseña para el primer FCB (CP/M 3) |
54-55 | palabra maquina | Dirección de la contraseña para el segundo FCB (CP/M 3) |
56 | Byte | Longitud de la contraseña para el segundo FCB (CP/M 3) |
57-5B | bytes | reservado |
5C-6B | FCB predeterminado 1 | |
6C-7F | FCB 2 predeterminado (sobrescrito si CB 1 está abierto) | |
80 | Byte | Número de caracteres en la línea de comando |
81-FF | bytes | Línea de comando |
PSP se usa más comúnmente para recibir argumentos de la línea de comandos de un programa DOS, por ejemplo, el comando "foo.exe -a -f" ejecutará (ejecutará) el archivo foo.exe con los argumentos '-a' y ' -F'.
La dirección de segmento de la PSP se ingresará en el registro DS en el momento en que se ejecute el programa. También se puede definir más adelante usando la interrupción #21h de la subfunción #62h. Esta interrupción devolverá la dirección de la PSP al registro BX. [una]
Además, en los programas .COM , solo puede acceder a la PSP directamente utilizando las compensaciones de la lista anterior. 00h indica el comienzo de PSP, FFh indica el final, etc. Por ejemplo, el siguiente código muestra los argumentos de la línea de comando:
org 100h _ ; int 21h subfunción 9 requiere '$' para terminar la cadena x o bx , bx mov bl , [ 80 h ] byte de movimiento [ bx + 81h ] , ' $ ' ; salida de línea mov ah , 9 mov dx , 81 h ent 21h _ ; terminación hacha mov , 4C00h _ ent 21h _