2309com与exe的区别

原文
为什么可按EXE重命名COM文件,而不会产生明显不良影响.
最初,唯一存在的程序COM文件.COM文件的格式是:嗯,没有.没有格式.COM文件只是一个内存映射.该"格式"从CP/M继承.

为了加载COM文件,程序加载器只是把文件原封不动复制进内存中,然后跳转到第一个字节.没有修复,没有校验和,什么都没有.

只需加载即可.

COM文件格式存在包括程序不能大于约64KB许多问题.为了解决这些限制,引入了EXE文件格式.EXE文件头以"MZ"神奇字母开头,并带加载程序到内存中并准备执行其他信息,来继续加载程序.

就是这样,COM文件是"原始内存镜像",EXE文件是"结构化"的,严格保持区别.如果重命名EXE文件为COM,操作系统试按机器代码(问题不大)执行头文件,相反,如果按EXE重命名COM文件,程序加载器会拒绝它,因为缺少神奇的MZ头.

随着时间推移,像FORMAT.COM,EDIT.COM甚至COMMAND.COM这些程序都超过了大约64KB.根据原始规则,表明必须更改扩展EXE,但会带来兼容问题.

毕竟,因为在此之前文件一直是COM文件,因此想要生成命令解释器程序批处理文件试执行COMMAND.COM.如果命令解释器COMMAND.EXE重命名,则这些硬编码程序名程序会停止工作,因为不再有COMMAND.COM.
为让程序加载器更加灵活,表明这些"知名程序"可保留其COM扩展名,同时不再受COM文件的"必须小于64KB"限制的约束.

但是等等,如果COM程序恰好以MZ字母开头怎么办?幸好,这从未发生过,因为如下反汇编"MZ"机器代码:

0100 4D  DEC BP
0101 5A  POP DX

第一条指令递减未定义初值寄存器,第二条指令使栈下溢.理智程序不会以如上两个未定义操作开始.

你可能感兴趣的:(小技巧,小技巧)