什么是节目段前缀 (PSP)?

What is the Program Segment Prefix (PSP)?

节目段前缀 (PSP) 到底是什么?

我在 Google 中进行了搜索,但找不到任何清晰直接的答案来帮助我完全理解它。它有什么作用,有什么用?

当您想 运行 DOS 中的程序时,它的命令处理器 command.com 从剩余的可用内存中保留一个块并填充一个名为 PSP[= 的 256 字节长的结构44=] 在此块的开头。可执行程序的图像在 PSP 之后从磁盘加载到内存。 PSP 的段地址被加载到段寄存器 DSES 并启动程序。
如果是 COM 程序,CS=DS=ES=SS 和指令指针 IP 设置在 PSP 之后,即 IP=256.
当程序是 MZ 可执行程序时,CS:IPSS: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