Goo*_*oos 6 assembly dos x86-16
我在8086处理器的汇编中编写了一个游戏,并在名为DOSBox的DOS模拟器上运行它.
现在我想向其他人展示游戏而不必下载模拟器.基本上,我想将8086程序集编译为现代操作系统的可执行文件.这可能,还是应该将其转换为另一种汇编语言?如果是这样,有没有办法自动进行此转换?
Cod*_*ray 15
问题不在于汇编语言和运行时环境一样多.
现代x86处理器运行用8086汇编语言编写的代码绝对没有问题.这些新芯片几乎100%向后兼容 8086.实际上,它们只是一个(非常)快速的8086启动.
不起作用的部分是程序中希望在DOS之上运行的部分.您几乎肯定会调用DOS API(通过中断)并执行其他特定于平台的事情.这就是为什么你需要DOSBox模拟器:不要模拟运行DOS,然后你的程序运行在DOS之上.
在某些情况下,您可以在Windows下使用虚拟DOS机在控制台环境中运行DOS应用程序,但是存在一些非常重要的限制.首先,也是最显著,Windows的64位版本将无法运行16位DOS应用程序在所有的,所以这将只在Windows的32位版本.其次,DOS程序有很多假设(比如,它们直接在硬件上运行,因此可以与它们进行交互,但是它们需要)与在Windows上运行模拟不兼容.游戏尤其因这些假设和不兼容的行为而臭名昭着,这些行为都是由专业软件公司在20世纪80年代写成的,也是你今天可能写的.为什么?因为游戏需要绝对的速度来获得良好的图形效果,所以他们做的事情就像直接写入视频内存而不是调用慢速DOS API来做.
你可以重写你的游戏而不是依靠DOS,但这将是一项艰巨的任务,相当于完全重写.这就像将程序从Windows移植到Macintosh.您必须检查所有正在调用的系统函数,并将它们更改为Windows(或任何其他操作系统)上的等效函数.这已经是艰巨的任务,但在某些情况下,你甚至可能发现有是没有直接的替代,所以你需要重写代码.有一些方法可以编写代码来促进这种类型的平台可移植性(例如,清楚地分隔驱动游戏逻辑的代码和进行系统调用的代码),但是你可能没有编写汇编代码.心神.
它可能不是很漂亮,但最好的解决方案是将你的游戏打包到DOS环境,比如DOSBox,它是GPL许可的.其他虚拟化软件也可以使用.例如,VM VirtualBox,其中VM运行MS-DOS或GPL许可的FreeDOS.正如罗斯里奇所说,这就是公司在GOG.com和Steam上销售旧的MS-DOS游戏的行为.