Prefijo de segmento de programa

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 29 de marzo de 2018; las comprobaciones requieren 8 ediciones .

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 _

Notas

  1. INT 21.62 - Obtener la dirección de PSP (DOS 3.x) (enlace descendente) . Archivado desde el original el 26 de abril de 2012. 

Enlaces