2010-09-01 87 views
2

我刚刚决定开始学习装配,所以我开始使用FASMW进行16位装配。 HOwever,我最近得到了一台运行Windows 7 64位的新电脑,现在没有一个编译好的.COM文件可以再次安装。他们会提供一条错误消息,指出.COM与64位窗口不兼容。 32位程序集仍然可以工作,但是我宁愿从16开始,一路顺风...... 可以在Windows 7上运行16位程序吗?还是有特定的方法来编译它们?或者我应该放弃并跳到32位?64位Windows上的16位程序集?

+5

您可以随时为目标环境运行虚拟机。 – 2010-09-01 17:37:30

+0

程序集是_processor_特定的。你在用什么处理器?你在用什么处理器? – Oded 2010-09-01 17:38:22

+2

像Windows Virtual PC这样的虚拟机。但是这个问题无论如何都是误导的,因为没有16位的工作。 64位模式比32位更简单和相似,不需要专门学习后者。更多的位!=更难 – jbcreix 2010-09-08 10:07:54

回答

6

不能使用16位程序集的原因是因为所有64位版本的Windows中的16-bit subsystemhas been removed

解决此问题的唯一方法是安装类似DOSBox或VirtualBox等虚拟机软件包,然后将FreeDOS安装到该软件中。这样,无论如何你都会得到真正的DOS。 (NTVDM is not true DOS

个人而言,我会鼓励为DOS编写16位程序集吗?不,我会使用32位甚至64位的程序集 - 原因是不同的操作系统有不同的函数调用(称为ABI)。因此,64位Linux应用程序的ABI与32位应用程序不同。不确定这是Windows的情况。但是,我保证中断的含义可能不同。另外,你已经有了16位程序集要考虑的各种事情,比如正在使用的内存模型。我可能是错的,但我相信DOS给你64K的内存来玩“就是这样”。正如我所理解的,所有的东西,你的整个堆和堆栈以及代码都必须适合这个空间,这让你想知道如何运作,真的。

+0

为了让你思考64K内存是否足够,你应该检查demoscene - > http://www.demoscene.info/ – Esko 2010-09-01 18:03:10

+0

不准确(但不是你的错)。它已被删除,因为它在长时间模式下无法正常工作。 http://en.wikipedia.org/wiki/Long_mode – 2010-09-01 18:04:04

+0

有趣的是,我没有意识到这是它被删除的原因,我只知道它已被微软分类。就我而言,这不是一个坏的举动,我们真的不应该再使用WOW64了。 – 2010-09-01 18:07:52

5

我的建议是只写32位代码。虽然最初看起来学习如何编写16位代码,然后“毕业”到32位代码是有意义的,但实际上我认为情况恰恰相反:编写32位代码实际上更容易因为相当多的任意体系结构约束(例如,你可以用作基址寄存器)基本上都不在32位代码中。

对于这个问题,我认为它是开放的问题是否真的有理由编写16位x86代码。对于大多数实际用途而言,这是一个死板 - 对于台式机来说,认为已经过时,对于嵌入式机器,您更有可能看到诸如ARM或Microchip PIC之类的东西。除非你有一个特定的目标,并且确定它将会是一个16位的x86,否则我可能会忘记它存在,就像世界上其他大多数人一样。

+0

+1,我想提到嵌入式,但从汇编的角度来看,我不太了解它。那么说r.e.学习曲线。 – 2010-09-01 18:06:05

相关问题