A programszegmens előtag ( angolul - „Programszegmens előtag”, rövidítve PSP ) egy adatstruktúra, amelyet a DOS és a CP / M család operációs rendszereiben használnak a számítógépes programok állapotának mentésére .
A DOS-ban a PSP felépítése a következő:
Offset | Méret | Tartalom |
---|---|---|
00-01 | 2 bájt (kód) | INT 20 kilépési kódot tartalmaz CP/M stílusban (a kompatibilitás érdekében) |
02-03 | gépi szó (2 bájt) | Közvetlenül a programhoz lefoglalt memória utáni szegmens |
04 | byte | fenntartott |
05-09 | 5 bájt (kód) | CALL FAR kódot tartalmaz a CP/M stílusú DOS függvények hívásához (a kompatibilitás érdekében) |
0A-0D | dword (4 bájt) | Az előző program terminate kezelőjének címe (előző INT 22) |
0E-11 | kard | Az előző program töréskezelő címe (előző INT 23) |
12-15 | kard | Az előző program kritikus hibakezelőjének címe (előző INT 24) |
16-17 | gépszó | A hívási folyamat PSP szegmense (általában a command.com belső) |
18-2B | 20 bájt | hu:Job File Table (belső) |
2C-2D | gépszó | Környezeti változó szegmens |
2E-31 | kard | SS:SP belépéskor az utolsó híváshoz INT 21 (belső) |
32-33 | gépszó | a megnyitott fájlok maximális száma (belső - lásd alább) |
34-37 | kard | A kézi bevitelek címe (belső - lásd alább) |
38-4F | 24 bájt | fenntartott |
50-52 | 3 bájt (kód) | DOS hívása (mindig tartalmazza az INT 21 + RETF kódot) |
53-5B | 9 bájt | fenntartott |
5C-6B | 16 bájt | Zárt szintű FCB 1 |
6C-7F | 20 bájt | Zárt FCB szint (felülírva, ha az FCB 1 nyitva van) |
80 | 1 bájt | A karakterek száma a parancssorban |
81-FF | 127 bájt | Parancssor ( 0Dh befejeződik ) |
PSP (Zero-Page vagy Base Page) CP/M-86-ban
Offset | Méret | Tartalom |
---|---|---|
00-02 | 3 bájt | Kódcsoport hossza bájtban |
03-04 | gépszó | Kódcsoport szegmens címe |
05 | Byte | Model 8080 flag - akkor állítsa be, ha a program egy szegmensben van |
06-08 | gépszó | Adatcsoport hossza bájtban |
09-0A | gépszó | Adatcsoport szegmens címe |
0B | Byte | fenntartott |
0C-11 | További csoportleíró - formátum, mint az adatcsoportnál | |
12-17 | Veremcsoportleíró – ugyanaz a formátum, mint az adatcsoport | |
18-1D | Csoportleíró X1 - adatcsoport formátuma | |
1E-23 | Csoportleíró X2 - adatcsoport formátuma | |
24-29 | Csoportleíró X3 - adatcsoport formátuma | |
2A-2F | Csoportleíró X4 - adatcsoport formátuma | |
30-4F | fenntartott | |
ötven | Byte | Lemez, amelyről a programot betöltötték (CP/M 3) |
51-52 | gépszó | Az első FCB jelszavának címe (CP/M 3) |
53 | Byte | Az első FCB jelszavának hossza (CP/M 3) |
54-55 | gépszó | A második FCB jelszavának címe (CP/M 3) |
56 | Byte | A második FCB jelszavának hossza (CP/M 3) |
57-5B | bájtok | fenntartott |
5C-6B | Alapértelmezett FCB 1 | |
6C-7F | FCB 2 alapértelmezett (felülírva, ha a CB 1 nyitva van) | |
80 | Byte | A karakterek száma a parancssorban |
81-FF | bájtok | Parancs sor |
A PSP-t leggyakrabban arra használják, hogy argumentumokat fogadjanak a DOS-programok parancssorából, például a "foo.exe -a -f" parancs végrehajtja (futtatja) a foo.exe fájlt a '-a' és a ' argumentumokkal. -f'.
A PSP szegmenscíme a program végrehajtása során kerül be a DS regiszterbe. Később is definiálható a #62h alfunkció #21h megszakításával . Ez a megszakítás visszaadja a PSP címét a BX regiszterbe. [egy]
Ezenkívül a .COM programokban csak a fenti listában található eltolásokkal érheti el közvetlenül a PSP-t. A 00h a PSP elejét, az FFh a végét és így tovább. Például a következő kód megjeleníti a parancssori argumentumokat:
org 100h _ ; Az int 21h 9. alfüggvényéhez '$' szükséges a karakterlánc lezárásához xor bx , bx mov bl , [ 80 h ] mov byte [ bx + 81h ] , ' $ ' ; vonal kimenet mov ah , 9 mov dx , 81 óra int 21h _ ; befejezése mov ax , 4C00h _ int 21h _