[doc] 程序段前缀PSP及应用
程序段前缀PSP及应用
MOVAX,~4DBA)
M0VSP.AX
S1
JMPn188
NOP
NOP
NoP
NOP
N0P
M0VAX.[4DB4.
~
ADDAX.DX
PUSHF;压入标志
PUSHAXI压AIP
M0VAX.E4DB2]
,kCS PUSHAX:压
M0VAX.ES
ADDAX.004o
M0VES.AX
MOVDI,0000
MOVSI,0200
M0VCX.O1OO
REPZ
MOVSB
MOVCX.DS
CMPCX.1FB1
JGE0IDD
MOVAX,IFBI
SUBAX.CX
SBO010].AX
ES.
S!]B~0016].AX
ES.
SUB[0O2C].AX
ES.
SUBE00302.AX
ES.
SUB~0036].AX
JMP01FF
SUBCX.1ibi
F_S.
ADD[000C].CX
E.
ADDeOOi0].CX
ES.
ADDCOOl6].CX
ES.
ADDC0o2C].CX
Es.
ADD[003O】.CX
ES.
ADD[.036】.CX
IRET中断返回,弹出cs:
IP和标志,控制权交给
SendI-exe
程序段前缀PSP及应用
西北工业六学计算机软件教研宣陈镐缨
在一般的程序设计中都不需要清楚程序
段前缀的结构.但是,如果你能够掌握程序段
前缀的结构,并且能够灵活地运用它,则你
开发的软件水平必然会大大地提高一步.
一,
P$P结构
DOS在每次装载程序时,都要分配出
256(100H)字节的空间建立该程序的程序段
前缀.尽管PSP占用了DOS分配给用户程序
的前256字节,PSP与程序代码不一定在同
一
个段.下面详细介绍它的各个域的内
容:
?
INT20I-I(偏移OH,2字节)
此域包含了一个程序终止,返回揉作系
统的机器指
?
占用内存顶端段地址(偏移2I-I,2字
节)
?38?
这里存放DOS分配给用户程序的内存空
间顶端的段地址,故从此地址偏移0处的字
节便是自由空间的第一个字节.对于一般程
序,由于DOS将所有的自由空间都分配给用
户程序,故此值常常等于系统的RAM配置
量(如640KB,512KB等)o显然,将此域
的值减去PSP的段地址便是用户程序实际占
用的内存空间.
?
DOS服务功能长调用指令(偏移5H,
5字节>
这里存放着D0s服务功能长调用指令的
机器码,第一个字节是长调用CALL的指令
码9AI-I,后四个字节是INT21H的入口地
址.在程序中你可以设置好入口参数后向此
域地址做一个段内调用即可完成一次DOSN
务功能的调用注意,这种方法仅对功能号小
手等于24If1]~IDOS服务功能自效.证用户
序中一般还是以直接做INT21H操作为好.
?
程序结束,Ctrl-Break,错误处理
地址保存(偏移AH,4x3字节)
这里包括了PSP的三个域.当DOS装载
用户程序时,便分别将此时刻的]NT22H,
INT23H和INT24H的中断向量保存在这三
个域中.
?父程序的PSP段地址(偏移16H,2字
节)
父程序是嵌套执行本程序的程序.它可
以是任何可运行程序.
?
FHT(偏移18H,20字节)
FHT是File-handletable(文件句柄表)
的缩写.FHT中可以存放2O个文件句柄,因
此,在用户程序中同时打开的文件不能超过
20个.由于系统内部本身要占用5个文件,
所以实环留给用户的文件最多只有15个.
?
程序环境块段地址(偏移2CH,2字
节)
DOS给每个加载的程序都要建立一个程
序环境块.通过这个域可以访问程序环境
块.
?DOS棱保存域(偏移2EH,4字节)
用户程序调用DOS功能服务程序时,
DOS将用户程序的栈段地址和指针保存在此
域.不允许对这些数据进行任何修改.
?
FHT长度(偏移32H,2字节)
这个域存放FHT的长度,以文件句柄数
为单位.换言之,这就是用户程序可处理文
件的最大数目,遥常它的值为2O.可以修改
此值,使它大于2O.但是,这时也必须重新
建立FI4T,使它足以容纳所有的文件柄.
?
FHT地址(偏移34H,4字节)
此域存放FHT的地址.当你希望建立自
己的FHT时,必须修改此域的值.?
?
INT2IH~FIRETF(偏移50H,3字节)
这个域包含了两条指令码INT21H和
RETF,供调用DOS服务功能之用.
?文件控制块(偏移55H,43字节)
造里包括了FCB1Ext,FCBl,FCB2,
Ext和FCB2四个PSP域.山子新版本的DOS
引八了更为方便的文件句柄式文件操作方
法,所以一般可不使用这几个域.
?
命令行参数长度域(偏移80I{,1字
节)甜命令行参数域(偏移81H,127字节)
当DOs装八用户程序时,便将整个命令
行参数保存在这个域,并且将其总长度存放
在命令行参数长度域.因此,可以很容易地取
得命令行参数.
?DTA域(偏移80H,128字节)
DTA是DiskTransferArea蜘盘传送
区)的缩写.注意,DTA域与命令行域共用
同一内存区域,所以如果需要gI用命令行参
数,就必须在进行磁盘操作之前首先将命令
行叁数保存起来.
:,PSP数据的利用
在程序中利用PSP数据首先应当解决的
问题有两点;确定PSP的地址和正确截取
PSP各域的数据.
本文以TURBOPASCAL为描述工具说
】霉6匹
m
P咖:??
LeQ:bte:
Li:.1.10F0;
一个结构类型常量PreFixS—
eg可供你直接引用,它的傻就是PSP的段地
址.
为了能正确而又方便地截取PSP的各域
数据,较好的
方案
气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载
是定义一个记录类型,这
个记录的域与PSP中的域有一一对应的关
系.为使用方便起见,这里将这个记录定义
在单元PSPU中,并且说明一个对应类型的
变量PSP供你直接引用.
三,PSP的应用
下面介绍PSP的几种重要的应用.
(1)计算程序内存空间占用量
当DOS为程序分配内存并建立它的PSP
时,起始地址均位于节边界(每16字节为一
个节),即段起始地址.所以,DOS为程序
分配的内存量总是大于编译程序报告的量.
根据PSP中”占用内存顶端段地址域的数据
与PreFixSeg,容易求出系统实际分配结程
序的空间字节量:
(PSPA.TopOfDOS-PrePixSeg)*I6.0
(2)截取命令行参数
虽然TURBOPASCAL已提供了两个有
关命令行参数的标准过程ParamCount和Pa-
ramStr,通过它们可以十分方便地得到每一
个命令行参数内容及参数总的数目.但是,
如果需要得到一个完整的命令行参数字符
串,你可以通过访问PSP相应的域获得.?
(3>暂时退出程序的方法
在近些年来开发的许多高级软件中都有
这个功能.用户利用软件的这个功能,可以
暂对中止正在进行的工作,进八操作系统进
行一些其它的操作.当完成这些操作后键八
DOS系统命令EXIT便可立即返回软件继续
进行方才中止的工作.通过这样的设计可以
给用户带来极大的方便和使用上的灵活性.
实现这一功能,事实上是嵌套运行了DOS的
命令处理程序COMMAND.COM.这就产生
了一个问题}当要暂时进八DOS系统时,程
序应该到何处读取COMMAND.COM文件?
?4O?
一
个好的软件应当能够适应在各种环境下运
牙,匿此,一般不应规定用户必须将某个文件
存放在哪个将定的驱动器或目录中.事安
上,这个文件的完整的路径名在文件的环境
块中可以找到.因此,借助于PSP这/卜问题
就可以得到圆满解决.
四,增加系统的文件处理数量
MS-DOS操作系统规定在任何时候,一
个进程可同时打开的文件数量最多不得超过
20个.由于系统内部本身就至少占用了5个,
所以用户程序中可同时处理的文停数目一般
不得超过15个虽然这个数量完垒可以满足
绝大多数用户的需要,但是,在开发某些高
级软件,特别是大型程序时,这个限制就显
得过于苛刻.
0]l:
P:
?豁r
;~xFil笛=40;[琏多可打开4o十文件)
铋
g.,FIIcY~IQ:批..-自|l皓】OF岛:{*硼裹I
f:肌5.~Filesj肾T雠t:
01?:{n,:
01}?”leSfze:
st{Sta”:
i:le~-d
?日)慨EBfIleTab!e:
B?iH
fP’?
BE6州
FiIIFRar扯lSi姗岫F{l曲le).巧5》;(tIFIII”~拍埘
0【鼬铀kl蚰嚼;【撮薛刚加地址)
O?j|.n‰bI曲l;【保存长窿)
P,ffahlze_II’a~il?:(础t匍商窿1
?abI”耐re嚣::9hFj1eT址{瘦置|ifH1吨J
妇’leilmOlCg,”ra,~le蛐劫:耶聃喜
?
B;
蛔姗州触;嘴望触喇庄对茁种船】
几日陪吣
艟G
R口mkM【0埘:
踟?lf’oiHr曲l{}
ttdel~ef[rdl~ble.托}dl埘20);
D:
呻;
蜮?
E,meedFjleTI
iteln【.曲6’t}blJ咎.FII,~);
嘟f:口.h?健饕打开薜陴]
?【H
sIi.StI
舡5jLf【j.st):
Re~ite【ffI.I.
?;
itek~【垴fto(kto6.’lbi】酷.c.pmf{les.)
mi?,I?iIn【r『|1li):『对十文件连抒写?作)
ireIn1’%础ykclo6.’.Ij:?enIiJ}:
P强:《13l唱?CI~(f:I哺有盘
e垫曲
日旺
PC设备驱动程序的格式及安装方法分析
华东工学院计算机科学与工程系张宏刘凤玉
在PC机的应用领域中,用户有时需要
配置非标准的外部设备或伪设备.DOS系统
允许用户为所加的外设提供自己开发的驱动
程序(作为DOS的一部分),从而使所加的
外设可同标准设备一样方便地使用.目前关
于外设驱动程序的安装方法已有许多资科介
绍,但许多用户仍感到有一定的困难,主要
是不能正确理解设备驱动程序格式的规定.
由于工作的需要,我们曾对PC—DOS(3.0
版)进行了详细分析,本文结合DOS对此部
分的处理简单地介绍驱动程序的结构及安装
方法.
一
,驱劝程序的格式与使甩
驱动程序的开发一般以汇编语言为工
具,用户可以按照COM文件的格式写出驱
动程序.但一般的COM格式文件有定位语
句ORG100H,在驱动程序中,定位语句应
是ORG0.另外,一般的COM文件要求第一
个语句是可执行语句,而驱动程序中要求以
一
张表开始,此表称设备头,其格式如下
事实上,DOS操作对一个进程同时打开
的文件数目可以多达255个.之所以一般被
控制在2O个,完全是由于文件旬柄表FHT长
度的限制.因此,如果你建立一个足够大的
FHT,并且修改相关的PSP域,就可以突破
系统的这一限制.
FHT共有20字节,它的某一字节为FFH
时表示空项,否则对应一个打开的文件.以
下是增加系统的文件处理数量操作的步骤:
?为新的FJFIT定义一个变量,为程序运
行结束时恢复原先的环境,再定义两个变量
用于保存PSP~b躁FHT地址和长度
下一个设备头指针
设备属性字
设备策略指针
设备中断指针
名字/装置数段
双字
1r?
字
皇
皇
8字节
下一个设备头指针给出了另一个设备驱
动部分的设备头位置,在一个扩展部为COM
的设备驱动程序中可以开发几个设备驱动部
分,各设备的设备头通过该指针域相链接,
最后一个设备头该指针域是一1.
属性部分给出了外设的属性,如是块设
备还是字符设备,有甭提供输八/出控制
(ioCTL)及其它一些信息.
设备策略指针和设备中断指针是外设驱
动程序中两个程序的人口,此处提供了与
DOS的接口.
名字/装置数段,对字符设备是名字
?用FFH初始化新FI-1T(FFH表示未用
过).
?保存PSP中FJFIT的地址和长度.
?修改PsP中FHT地址域和长度域
?将原FHT的数据恢复到新FHT中.
应当注意,虽然你在程序中可以对DOS
系统的打开文件数目限制进行修改,但是这
有一个前题不能忘记:在系统启动之前,系
统配置文件CONFIG.SYS中必须设置:
FILES=n
这里的n是你扩充系统功能后允许打开文件
的最大数目.下面给出一个示范程序(见40
两右栏).
-41-