- Software - Programmering -
Assembler - DOS - Program
Segment Prefix (PSP)
All COM programs start with a 256 byte PSP - so the first program byte is at
offset 100h.
The PSP is built by DOS when the program is loaded.
| +00 | pspInt20 | 2 | CD 20 (INT 20); terminate program. - when loading COM programs, DOS initializes SP to FFFE and puts a 0000 there - so RET will jump here. |
| +02 | pspNextParagraph | 2 | segment addr of first paragraph after memory allocated to program - A000 if all memory allocated (as in COM programs). |
| +04 | pspReserved1 | 1 | reserved. |
| +05 | pspDispatcher | 5 | FAR call to DOS function handler - for compatibility: CALL 5 with f.nr in CL = INT 21,f.nr |
| +0A | pspTerminateVect | 4 | termination vector - terminal restore INT 22 |
| +0E | pspControlCVect | 4 | ^C (^BREAK) vector - terminal restore INT 23 |
| +12 | pspCritErrorVect | 4 | critical error vector - terminal restore INT 24 |
| +16 | pspReserved1 | 22 | reserved. |
| +2C | pspEnvironment | 2 | segment of environment for program. |
| +2E | pspReserved2 | 34 | reserved (DOS work area). |
| +50 | 3 | CD 21 CB: INT 21/ RETF | |
| +52 | 9 | ||
| +5C | pspFCB_1 | 16 | default FCB #1, first 16 bytes: |
| +00 fcbDriveID | 1 | drive no. (0=default, 1=A,...) - set by DOS if programname is followed by DriveName: >PROGRAM A: sets fcbDriveID=01 |
|
| +5D | +01 fcbFileName | 8 | Filename (UPPERCASE, 8 chars - padded with spaces (20)) - or - (Filename+Extension): First command-line argument - treated as a filename - ex: "file.ext" is converted to "FILE EXT". "123456789ABC" is converted to "12345678 ". |
| +65 | +09 fcbExtension | 3 | Extension ( - ) |
| +68 | +0C fcbCurBlockNo | 2 | current block number - with current record. =0000 after opening file (set by DOS). |
| +6A | +0E fcbRecSize | 2 | record size |
| +6C | pspFCB_2 | 16 | default FCB #2, first 16 bytes. |
| +7C | pspReserved3 | 4 | reserved. |
| +80 | pspCommandTail | 128 | command tail (also default DTA) |
| +00 CommandLen | 1 | length of command-line tail | |
| +81 | +01 Commands | ? | unformatted command-line - first char is <space> (20) - first text-char is at offset 82h - terminated by <ret> (0D) |
+100 256 bytes |
ex.: the PSP of COMMAND.COM :
0 1 2 3 4 5 6 7 8 9 A B C D E F
------------------------------------------------------------------------
00 CD 20 ;INT 20 instruction
2 00 A0 ;A000: addr after prog
4 00 ;reserved
5 9A F0 FE-1D F0 ;CALL F01D:FEF0 instr.
A F5 02 E7 51 ;termination addr.(int 22)
E 2E 03 ;^C handler addr.(int 23)
10 E7 51 ; = 51E7:032E
2 BD 02 E7 51 ;crit. err. addr.(int 24)
6 AF 51-05 06 01 00 02 FF FF FF ;reserved
20 FF FF FF FF FF FF FF FF-FF FF FF FF
C CB 55 ;segment of environment
E C8 30 ;reserved (DOS work area)
30 E7 51 14 00 18 00 D2 55-FF FF FF FF 00 00 00 00
40 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
50 CD 21 ;INT 21 instr.
2 CB 00 00 00 00 00-00 00 00 00 ;RETF (reserved)
C 00 20 20 20 ;FCB #1
60 20 20 20 20 20 20 20 20-00 00 00 00
C 00 20 20 20 ;FCB #2
70 20 20 20 20 20 20 20 20-00 00 00 00
C 00 00 00 00 ;reserved
;COMMAND-TAIL:
80 0D ;length of parameters:
1 20 5C 43 4F 4D 4D 41-4E 44 2E 43 4F 4D ; \COMMAND.COM.
0D ;
00
90 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
|
F0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00
------------------------------------------------------------------------