通常,在Windows环境中运行DOS程序时,使用DOS模拟器。但是,这是一个缓慢且CPU贪心的解决方案,有许多限制。这个想法让我印象深刻;简单地翻译/调整打算在DOS下运行的机器代码会不会更节省CPU,因此它将在Windows中运行?对于你的知识,有没有工具可以完成这项工作?
甚至可以创建可以在DOS和Windows中运行的exe文件。这是可能的,因为PE格式的所有Windows exe文件都包含一个初始DOS标题,后跟DOS代码,如果文件在DOS中运行,则指示计算机显示错误消息。然后是DOS代码,然后是其他PE标题,然后是Windows兼容代码。可以用DOS程序中的实际代码替换显示错误消息的DOS代码,然后在PE兼容之后的Windows兼容代码中,您可以放置一个转换器,它转换DOS-代码,然后将执行转移到它。
反过来,虽然更难,但也是可能的。您只需要一个Windows程序,并将显示错误的dos代码替换为将Windows兼容代码转换/适应DOS环境的代码,然后将执行转移到它。
答案 0 :(得分:0)
理论上说这是可能的。实际上,我认为,我只看到相反的情况:DOS扩展器模拟Win32 API的一个子集,允许简单的Windows应用程序在DOS下运行。
DOS存在两个问题:
因此,如果您仍想访问所有内容,则需要模拟或虚拟化大量内容(CPU,内存,中断,各种设备)。否则它将无法与其他任何东西和平共处。 DOSBox已经为你完成了大部分工作。
x86系统是64位的。这带来了CPU设计的缺点。一旦CPU处于64位(AKA长)模式,它就无法在实际寻址模式或虚拟8086模式下执行16位代码。这种兼容性并非在CPU中设计或实现(比如感谢AMD和intel)。所以,要么你失去64位,所有需要它或你失去DOS。有硬件虚拟化(intel-VT / AMD-Pacifica),它带来了16位,但你需要一个虚拟机管理程序,而且,因为没有魔力(虚拟机管理程序本身并不能使两台PC一体化),你仍然需要模仿/虚拟化DOSBox所做的很多事情。
没有廉价而有效的解决方案。除了专门用于DOS东西的单独的旧PC。这些越来越难以获得和维护。
我认为你严重低估了所需的工作量和所涉及的复杂性。如果无法重写程序,请使用模拟器或VM。如果可以,请将其重写为本机上的Windows。另一种选择可能只是简单地将DOSBox或其他类似程序与程序捆绑在一起,使其只显示为一个Windows程序,也许只是一个包含所有内容的.exe文件。