PSPとは
MS-DOS時代のEXEファイルはメモリ上に読みこまれる際、先頭256バイト(100h)に付随する情報が追加されます。
この付加情報をPSPと呼びます。
以下の図のように初期状態ではDSがこのPSPの先頭を指しており、CS=DS+10h(PSP分)となっています。
そしてd ds:0とすることでPSPの内容が確認出来ます。

デバッグで確認したところ、PSP先頭が0B28、CSがDS+10hの0B38になっており、次に実行される命令がCS:IPで指されることからPSPが256バイトであることが確認できます。
先頭のCD20とは何か
COMファイル実行時のPSP先頭は通常CD 20で、これはプログラム終了命令であり、C言語のreturnに相当する、プログラム終了のための割り込み命令です。
しかしEXEの場合はこのようにint 21を使ってプログラムを終了するためこのCD 20は、互換性のため残っている歴史的産物でしかありません。
assume cs:codesg
codesg segment
mov ax,2000H
add ax,ax
mov ax,4c00H
int 21H
codesg ends
end
masm 1.asm
link 1.OBJ
実験としてINT21を使わずPSP内のINT20(CD20)を使ってプログラムを終了させてみます。
EXEはINT20で終了させることが出来ないようなので、EXEの全身であるCOMを使って実験を行います。
上のEXEはXPを使って実験しましたが、COMファイルを実行させるとうまく動作しなかった為、MS-DOS上で動作させます。
MS-DOS上でCOMファイルを生成するのは少し面倒な為、Ubuntu上でコンパイルします。
COMはEXEと違いヘッダー情報がなく、機械語のアセンブリだけの為、UbuntuのNASMから直接コンパイルが可能です。
org 100h
start:
mov ah, 9
mov dx, msg
int 21h ; 文字列表示
call 0 ; PSP先頭(CD 20)へ跳ぶ
msg db 'Hi!$'
# コンパイル
nasm -f bin hello.asm -o hello.com
# 空のフロッピーイメージ作成 FAT12で初期化
dd if=/dev/zero of=floppy.img bs=512 count=2880
mkfs.fat -F 12 floppy.img
# フロッピーにhello.comを入れる
sudo mkdir /mnt/floppy
sudo mount -o loop floppy.img /mnt/floppy
sudo cp hello.com /mnt/floppy
sudo umount /mnt/floppy
## QEMUで起動
qemu-system-i386 -fda floppy.img -hda msdos_hdd.img -boot c
Hi! と表示され、プログラムは正常に終了してMS-DOSへ戻っています。

しかし、実際に当時の現場でPSP先頭のCD 20が本当に利用されていたのかどうかは、当時の技術者に聞かない限り断定できません。
最後に
PSPには他の情報も色々保存されています。
他の情報については、又別の機会に検証します
20250912追記
8086実機のMSDOS上で試しても動きました。
