编辑: 匕趟臃39 | 2019-07-08 |
5 个系统服务功能 名称功能号 入口值 出口值 版本 建立新 PSP 26H DX=新PSP 段址 DS 指向新建的 PSP DOS 1.X 置当前 PSP 段址 50H BX=当前 PSP 段址 / DOS 2.X 取当前 PSP 段址 51H / BX=当前 PSP 段址 DOS 2.X 建立新 PSP 55H DX=新PSP 段址 DS 指向新建 PSP DOS 2.X 取当前 PSP 段址 62H / BX=当前 PSP 段址 DOS 3.X DOS 技术资料只公开了
2 个功能: 26H 和62H.没有公开的功能建议避免使用.此外, 26H 功能 也建议避免使用,在DOS 的4BH 功能 ( EXEC )中,不仅包括建立 PSP,还增加了进程的加载和执 行的新操作,对一般使用来说,单独申请 PSP 是比较少的. 3. 程序加载及实现 所谓 加载 就是在 DOS 环境下,PC 机从磁盘上将可执行文件(即DOS 下的 .EXE 文件 和.COM 文件)装入到内存的过程.加载的过程包括程序装入内存的分配方案,加载是否成功,装入后 CPU 各寄存器内容及包括的信息等,对编程者而言,掌握一般的加载后信息分配,在某些应用场合中,了 解和掌握如何在自己的程序中加载新的程序并使之运行的方法是非常有用的. 我们知道, DOS 下允许用户键入的命令有 DOS 内部命令,DOS 外部命令,可执行的应用程序及批 处理文件,对同名的可执行文件按 .COM 到.EXE 的优先顺序处理,具体的说,DOS 加载可执行文 件是通过 EXEC 子功能实现的 ( 即INT 21H 的AH=4BH ) .由于 .COM 和.EXE 文件的结构不 同,它们在加载的实际过程及装入内存方式是不同的,所以,对待不同的文件应有不同的处理方式. 加载 .EXE 文件后,各寄存器的初值设置 1) DS 和ES 指向 PSP 的段地址 2) CS 指向代码段的绝对段址 3) SS 指向堆栈段的绝对段址 4) IP 指向代码段入口时第一条指令的偏移地址 5) SP 指向堆栈段如口时深度,此值由文件头位移 10H 的字域决定 6) BX, CX 是加载程序的字节长度 加载 .COM 文件后,各寄存器的初值设置 1) CS,DS,ES 和SS 指向 PSP 的段地址 2) IP 固定为 100H 3) SP 位FFFEH ,并在栈顶出压入一全
0 字4) BX, CX 是COM 文件的字节长度 A DOS 下EXEC 子功能的应用 B 加载程序的设计和实现 ........