什么是节目段前缀 (PSP)?
What is the Program Segment Prefix (PSP)?
节目段前缀 (PSP) 到底是什么?
我在 Google 中进行了搜索,但找不到任何清晰直接的答案来帮助我完全理解它。它有什么作用,有什么用?
当您想 运行 DOS 中的程序时,它的命令处理器 command.com
从剩余的可用内存中保留一个块并填充一个名为 PSP[= 的 256 字节长的结构44=] 在此块的开头。可执行程序的图像在 PSP 之后从磁盘加载到内存。 PSP 的段地址被加载到段寄存器 DS
和 ES
并启动程序。
如果是 COM 程序,CS=DS=ES=SS
和指令指针 IP
设置在 PSP 之后,即 IP=256
.
当程序是 MZ 可执行程序时,CS:IP
和 SS:SP
是从它们在 MZ header.
中的相应字段设置的
程序段前缀在很多方面对程序有用:
- 启动的程序可以检查位于 command-line 个参数
PSP 中的偏移量
80h
。
- 带环境的字符串块的段地址
可以在
PSP:2Ch
. 找到变量
- 程序可能会挂钩和更改
在
PSP:0Eh
时对 Ctrl-Break 的默认系统反应或对
PSP:12h
. 处的严重错误
- 在
PSP:16h
可以得到PSP地址
它的 parent 进程以确定它是否从
command.com
或从其他可执行程序派生。
- 最后一个
但至少可以使用
PSP:0
处的 return 指令 INT 20h
在 COM 程序中通过一条指令终止自身 RET
.
有关 PSP 的更多详细说明,请参阅 Wikipedia。
节目段前缀 (PSP) 到底是什么?
我在 Google 中进行了搜索,但找不到任何清晰直接的答案来帮助我完全理解它。它有什么作用,有什么用?
当您想 运行 DOS 中的程序时,它的命令处理器 command.com
从剩余的可用内存中保留一个块并填充一个名为 PSP[= 的 256 字节长的结构44=] 在此块的开头。可执行程序的图像在 PSP 之后从磁盘加载到内存。 PSP 的段地址被加载到段寄存器 DS
和 ES
并启动程序。
如果是 COM 程序,CS=DS=ES=SS
和指令指针 IP
设置在 PSP 之后,即 IP=256
.
当程序是 MZ 可执行程序时,CS:IP
和 SS:SP
是从它们在 MZ header.
程序段前缀在很多方面对程序有用:
- 启动的程序可以检查位于 command-line 个参数
PSP 中的偏移量
80h
。 - 带环境的字符串块的段地址
可以在
PSP:2Ch
. 找到变量
- 程序可能会挂钩和更改
在
PSP:0Eh
时对 Ctrl-Break 的默认系统反应或对PSP:12h
. 处的严重错误
- 在
PSP:16h
可以得到PSP地址 它的 parent 进程以确定它是否从command.com
或从其他可执行程序派生。 - 最后一个
但至少可以使用
PSP:0
处的 return 指令INT 20h
在 COM 程序中通过一条指令终止自身RET
.
有关 PSP 的更多详细说明,请参阅 Wikipedia。