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。
沒有留言:
張貼留言