DOS下COM文件的加载过程
来源:互联网 发布:js窗口最大化事件 编辑:程序博客网 时间:2024/06/03 18:36
COM文件的加载
COM文件格式的历史可以追溯到CP/M(Control Program/Moniter)时代,被沿用至今,所有的Windows系统都支持此格式。
COM文件包含程序的一个绝对映象――就是说,为了运行程序准确的处理器指令和内存中的数据,MS-DOS通过直接把该映象从文件拷贝到内存而加载COM程序,而不作任何改变。
加载过程如下:
1 分配内存
因为COM程序必须位于一个64K的段中,所以COM文件的大小不能超过65,278(65,536减去用于PSP(程序段前缀,Program Segment Prefix)的256字节和用于一个起始堆栈的至少2字节)。如果MS-DOS不能为程序、一个PSP、一个起始堆栈分配足够内存,分配尝试失败。否则,MS-DOS分配尽可能多的内存(直至所有保留内存),即使COM程序本身不能大于64K。在试图运行另一个程序或分配另外的内存之前,大部分COM程序释放任何不需要的内存。
2 设置PSP
分配内存后,MS-DOS在该内存的头256字节建立一个PSP,如果PSP中的第一个FCB(文件控制块,File Control Block)含有一个有效驱动器标识符,则置AL为00h,否则为0FFh。MS-DOS还置AH为00h或0FFh,这依赖于第二个FCB是否含有一个有效驱动器标识符。
3 加载COM程序
建造PSP后,MS-DOS在PSP后立即开始(偏移100h)加载COM文件
4 设置寄存器
它置CS,SS,DS和ES为PSP的段地址,接着创建一个堆栈。为创建一个堆栈,MS-DOS置SP为0000h,若已分配了至少64K内存;否则,它置寄存器为比所分配的字节总数大2的值。最后,它把0000h推进栈(这是为了保证与在早期MS-DOS版本上设计的程序的兼容性)。MS-DOS通过把控制传递给偏移100h处的指令而启动程序。程序设计者必须保证COM文件的第一条指令是程序的入口点。注意,因为程序是在偏移100h处加载,因此所有代码和数据偏移也必须相对于100h。汇编语言程序设计者可通过置程序的初值为100h而保证这一点(例如通过在原程序的开始使用语句org 100h)。
由于COM文件没有任何标志,所以识别COM文件的时候有些难度。
- DOS下COM文件的加载过程
- DOS下EXE文件的加载与执行过程
- php调用com组件加载dos命令解压缩的方法
- 使用Dos运行Com文件
- 为什么dos下的com文件都要org 0100h呢?为什么系统启动时要org 07c00h呢
- DOS下NFO文件的查看方法!
- DOS下比较两个文件的大小
- LINUX平台下ELF文件加载过程
- Class文件的加载过程
- EXE文件的加载过程
- 加载plist文件的过程
- Class文件的加载过程
- DOS下搜索文件
- dos 下拷贝文件
- dos下利用SMTP、POP3协议发送邮件的过程
- python程序在DOS界面下的执行过程
- 【dos BAT】关于DOS的批处理学习过程 之三 (活学活用复制文件的批处理)
- 在DOS下删除所有子目录下的文件
- Silverlight 下换肤的实现
- 自己烤面包
- 财力会计3---存货和销售成本
- 用友致远A6协同管理软件操作手册
- 存储过程循环添加数据
- DOS下COM文件的加载过程
- linux下的mkdir函数
- 使用Java JDK中Java.net包控制UDP协议
- RTLinux安装
- 在Linux下产生并调试core文件[转]
- 关于微软认证
- Delphi操作Excel大全
- 三鹿让管理界疯狂
- lucene 学习