- UID
- 1
- 精华
- 积分
- 76361
- 威望
- 点
- 宅币
- 个
- 贡献
- 次
- 宅之契约
- 份
- 最后登录
- 1970-1-1
- 在线时间
- 小时
|
PSP头是DOS的16位程序都要用到的数据块,总共占用256字节,作用是帮助程序访问基本的DOS功能。
COM程序的org 256(org 0x100、org 100h)之所以设置其实前面的保留块
从www.ctyme.com拿下来直译过来的,不保证大家能看懂
偏移 长度 描述
0x00 2 BYTEs INT 0x20指令
0x02 2 WORD 分配给程序的第一个段
0x04 1 BYTE DOS:未使用,OS/2:假的DOS版本返回数
0x05 1 BYTE CP/M:CALL 5服务请求(远调用到绝对地址0x00C0)
0x06 2 WORD CP/M:兼容性--.COM文件第一个段的大小
0x08 2 BYTEs 剩下的远跳转到0x05
0x0A 4 DWORD 存储的INT 0x22终止地址
0x0E 4 DWORD 存储的INT 0x23控制中断处理地址
0x12 4 DWORD DOS 1.1+:存储的INT 24关键性异常处理地址
0x16 2 WORD 父PSP段
0x18 20 BYTEs DOS 2+:正在操作的文件表,每个文件句柄占1字节, FFh = 已关闭
0x2C 2 WORD DOS 2+:环境变量的段
0x2E 4 DWORD DOS 2+:最后的INT 21调用后的程序的SS:SP
0x32 2 WORD DOS 3+:正在操作的文件表项数(默认20)
0x34 4 DWORD DOS 3+:正在操作的文件表的地址(默认PSP:0018h)
0x38 4 DWORD DOS 3+:上一个PSP的指针(默认FFFFFFFFh在3.x版本的DOS)用于DOS 3.3的SHARE
0x3C 1 BYTE DOS 4+:(DBCS)中期控制台标识(见AX=6301h)Novell DOS 7 DBCS中期标识在AX=6301h这里设置(可能同样被Far East MS-DOS 3.2-3.3使用)
0x3D 1 BYTE (APPEND)TrueName标识(see INT 0x2F/AX=0xB711)
0x3F 1 BYTE (Novell NetWare) Novell 任务数,如果上个字节是CEh
0x40 2 BYTEs DOS 5+ INT 21/AH=30h返回的版本号
0x42 2 WORD (MSWindows3)链表中的下一个PSP (PDB)的选择子。Windows有一个链表,只用于Windows程序
0x44 2 WORD (MSWindows3) "PDB_Partition"
0x46 2 WORD (MSWindows3) "PDB_NextPDB"
0x48 1 BYTE (MSWindows3) 如果位0设置了,那么这不是一个Windows应用程序(WINOLDAP)
0x49 1 BYTE 对于DOS版本<= 6.00的,未使用
0x4C 2 WORD (MSWindows3) "PDB_EntryStack"
0x4E 2 BYTEs 对于DOS版本<= 6.00的,未使用
0x50 3 BYTEs DOS 2+ 服务请求(INT 21/RETF指令)
0x53 2 BYTEs 对于DOS版本<= 6.00的,未使用
0x55 7 BYTEs 对于DOS版本<= 6.00的,未使用;能用于制作第一个FCB到扩展的FCB
0x5C 16 BYTEs 第一个默认的FCB,从第一个命令行参数填充覆盖第二个FCB,如果打开了文件。
0x6C 16 BYTEs 第二个默认的FCB,从第二个命令行参数填充覆盖开始的命令行,如果打开了文件。
0x7C 4 BYTEs 未使用
0x80 128 BYTEs 命令行或默认的DTA命令尾是BYTE用于尾巴的长度, N BYTEs用于尾巴,在包含了0Dh字节的后面
|
|