程序段前缀是Dos下可执行程序载入内存后结构的一部分,位于前0100h部分,它的大致作用有:
(1) 子进程通过程序段前缀继承、恢复父进程的信息
(2 ) 使子进程正确地返回到父进程
( 3) 恢复中断23 H 和24H 的入口地址
(4) 给子进程提供Dos 的入口信息
更详细的信息请参考:
http://zhangxunzi.zxq.net/ebook/xxdos/f/dospro/psp.htm
下面我们来验证一下PSP的作用:
(借用Orange's中的一个程序,在freedos中运行实验,以下程序如果看不懂,可以只看后面更改的部分)
; ==========================================
; pmtest2.asm
; 编译方法:nasm pmtest2.asm -o pmtest2.com
; ==========================================
%include "pm.inc" ; 常量, 宏, 以及一些说明
org 0100h
jmp LABEL_BEGIN
[SECTION .gdt]
; GDT
; 段基址, 段界限 , 属性
LABEL_GDT: Descriptor 0, 0, 0 ; 空描述符
LABEL_DESC_NORMAL: Descriptor 0, 0ffffh, DA_DRW ; Normal 描述符
LABEL_DESC_CODE32: Descriptor 0, SegCode32Len-1, DA_C+DA_32; 非一致代码段, 32
LABEL_DESC_CODE16: Descriptor 0, 0ffffh, DA_C ; 非一致代码段, 16
LABEL_DESC_DATA: Descriptor 0, DataLen-1, DA_DRW ; Data
LABEL_DESC_STACK: Des