COM檔的PSP(僅供參考)︰
| 0000H | dw OCD20H | INT 20H |
| 0002H | dw ? | 可用記憶體最大節位址 |
| 0004H | db ? | |
| 0005H | db 5 dup(?) | 用於完成DOS INT 21H的功能呼叫﹐此時CL = AH (OOH - 23H) |
| 000AH | dd ? | 原 INT 22H 中斷的進入位址 |
| 000EH | dd ? | 原 INT 23H 中斷的進入位址 |
| 0012H | dd ? | 原 INT 24H 中斷的進入位址 |
| 0016H | dw ? | 父程式 PSP 位址 |
| 0018H | db 20 dup(?) | 檔案頭銜表 (FHF)﹐決定該行程可以同時開20個檔案 |
| 002CH | dw ? | 環境變數區的節位址 |
| 002EH | dd ? | 堆疊指標紀錄區 |
| 0032H | dw ? | 檔案頭銜表的大小﹐預設值為20 |
| 0034H | dd ? | 檔案頭銜表的起始位址﹐預設為DS︰0018H |
| 0038H | dd ? | |
| 003CH | db ? | |
| 003DH | dw ? | |
| 003FH | db ? | |
| 0040H | dw ? | 所對應的DOS版本 |
| 0042H | dw 14 dup(?) | |
| 0050H | db 3 dup(?) | INT 21H retf |
| 0053H | dw ? | |
| 0055H | db 7 dup(?) | FCB控制塊的擴充部分 |
| 005CH | db 16 dup(?) | 第一個FCB的控制塊 |
| 006CH | db 16 dup(?) | 第二個FCB的控制塊 |
| 007CH | dd ? | |
| 0080H | db 80h dup(?) | 磁碟資料傳送區(DTA) |
EXE檔的PSP(僅供參考)︰
| 0000H | dw ? | 'MZ'表示是EXE檔﹐如果沒有DOS就認為是COM檔 |
| 0002H | dw ? | EXE檔案長度除以512的餘數 |
| 0004H | dw ? | EXE檔案長度除以512的商數 |
| 0006H | dw ? | |
| 重定位表的數目\cell 0008H | dw ? | 檔頭的para數 |
| 000AH | dw ? | 程式所需最少記憶體 |
| 000CH | dw ? | 程式所需最多記憶體 |
| 000EH | dw ? | 初始化SS值﹐(相對於起始節位址) |
| 0010H | dw ? | SP |
| 0012H | dw ? | Checksum |
| 0014H | dw ? | IP |
| 0016H | dw ? | 初始化CS值﹐(相對於起始節位址) |
| 0018H | dw ? | 重定位表起始值﹐(相對於檔頭) |
當COM檔被載入的時候﹐DS、ES都會指向PSP﹐而 PSP的大小是100H bytes﹐所以 IP會指向 0100H。
沒有留言:
張貼留言