我刚刚决定开始学习装配,所以我开始使用FASMW进行16位装配。 HOwever,我最近得到了一台运行Windows 7 64位的新电脑,现在没有一个编译好的.COM文件可以再次安装。他们会提供一条错误消息,指出.COM与64位窗口不兼容。 32位程序集仍然可以工作,但是我宁愿从16开始,一路顺风...... 可以在Windows 7上运行16位程序吗?还是有特定的方法来编译它们?或者我应该放弃并跳到32位?64位Windows上的16位程序集?
回答
不能使用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的内存来玩“就是这样”。正如我所理解的,所有的东西,你的整个堆和堆栈以及代码都必须适合这个空间,这让你想知道如何运作,真的。
为了让你思考64K内存是否足够,你应该检查demoscene - > http://www.demoscene.info/ – Esko 2010-09-01 18:03:10
不准确(但不是你的错)。它已被删除,因为它在长时间模式下无法正常工作。 http://en.wikipedia.org/wiki/Long_mode – 2010-09-01 18:04:04
有趣的是,我没有意识到这是它被删除的原因,我只知道它已被微软分类。就我而言,这不是一个坏的举动,我们真的不应该再使用WOW64了。 – 2010-09-01 18:07:52
我的建议是只写32位代码。虽然最初看起来学习如何编写16位代码,然后“毕业”到32位代码是有意义的,但实际上我认为情况恰恰相反:编写32位代码实际上更容易因为相当多的任意体系结构约束(例如,你可以用作基址寄存器)基本上都不在32位代码中。
对于这个问题,我认为它是开放的问题是否真的有理由编写16位x86代码。对于大多数实际用途而言,这是一个死板 - 对于台式机来说,认为已经过时,对于嵌入式机器,您更有可能看到诸如ARM或Microchip PIC之类的东西。除非你有一个特定的目标,并且确定它将会是一个16位的x86,否则我可能会忘记它存在,就像世界上其他大多数人一样。
+1,我想提到嵌入式,但从汇编的角度来看,我不太了解它。那么说r.e.学习曲线。 – 2010-09-01 18:06:05
- 1. 64位程序集的32位指令
- 2. 32位/ 64位Windows/Linux应用程序
- 3. 运行16位命令行应用程序的64位
- 4. 在一个Windows安装程序中的32位和64位程序集
- 5. 计数设置位。 16位程序集奇偶校验程序
- 6. Windows 64位操作系统上的32位或64位Android SDK?
- 7. WiX:阻止32位安装程序在64位Windows上运行
- 8. Windows上的SWT 64位
- 9. Windows 7上的System.Data.OracleClient 64位
- 10. 64位Windows上的OpenSSL
- 11. Windows上的Perl:32位或64位?
- 12. 64位Windows 2008上的32位cluster.exe
- 13. 在64位系统(Ubuntu)上编译32位程序集
- 14. 32位nasm程序集不在64位系统上启动
- 15. 无符号16位和64位整数
- 16. 在32位程序中使用64位驱动程序。 Windows
- 17. PowerBuilder 10.5应用程序在Windows XP 32位到Windows 7 64位
- 18. 端口32位Windows驱动程序到64位Windows
- 19. 在32/64位系统上使用16位指针的C++
- 20. 在64位Windows
- 21. 64位Windows IFilterSample
- 22. 在ARM程序集64位SOS
- 23. 程序集和Visual C++ Express 64位
- 24. 如何在64位机器上将64位C++程序编译?
- 25. MSCAL.OCX不适用于Windows 10(64位)上的MS Access 2010(64位)
- 26. MySQL 5.6.14 Windows 8.1 Pro 64位上的64位连接问题
- 27. 64位Java应用程序:是64位操作系统,64位JRE和64位应用程序吗?
- 28. 16位的int VS 32位的int和64位INT
- 29. 64位操作系统上的32位或64位应用程序?
- 30. 32位和64位Windows安装程序的命名约定
您可以随时为目标环境运行虚拟机。 – 2010-09-01 17:37:30
程序集是_processor_特定的。你在用什么处理器?你在用什么处理器? – Oded 2010-09-01 17:38:22
像Windows Virtual PC这样的虚拟机。但是这个问题无论如何都是误导的,因为没有16位的工作。 64位模式比32位更简单和相似,不需要专门学习后者。更多的位!=更难 – jbcreix 2010-09-08 10:07:54