我知道需要一些汇编,并且会受到限制,尤其是寻址超出32位Windows管理的内存。但我考虑的是纯计算任务,只需要适量的内存和不调用外部函数。
在没有内核修改/特殊驱动程序/虚拟化的情况下,32位通用操作系统无法使用Amd64指令(长模式)。
原因是:
1)要使用本机64位指令,您需要切换到长模式。这是一项特权操作。如果CPU被切换到64位模式,32位操作系统内核将无法继续工作,因此您应该在进入内核之前切换回来。
2)但是内核通常会异步调用计时器(调度程序)和其他硬件中断(驱动程序)。它不会保存64位寄存器,也不会将模式从长模式改为保护模式。
也许可以编写特殊的驱动程序,在32位操作系统上执行64位任务,但这种驱动程序更像是64位内核和内核动态打补丁程序。我不知道这样的解决方案。
当在32位操作系统中运行时,您只能使用MMX、SSE、SSE2、SSE3、AVX来访问CPU的64位算术逻辑单元和寄存器。
我可以说的是,Linux、某些BSD、Mac OS X具有一种模式,即使用64位内核,但用户空间软件是32位的。在这种情况下,将可以运行32位和64位应用程序,因为内核知道64位模式并可以访问64位寄存器来执行任务切换。据我所知,MS Windows本身没有这种模式(W7模拟32位模式,但这被MS称为模拟器,因此我认为这不是内核特性)。
其他可能性(如果您的CPU支持硬件虚拟化,这更好),是使用64位虚拟机监控程序(VMware / Xen等过于昂贵的解决方案)与32位和64位客户机操作系统一起使用。VirtualBox是使用虚拟机监视程序的另一个选项,也可以免费使用。
一般情况下,在32位的操作系统内核中运行64位代码几乎是不可能的,原因如下:
原则上,您可以编写新的Windows HAL来解决这两个问题,该HAL以IA-32e模式运行,并切换到64位跳转代码段以保存和恢复64位寄存器。这是一项相当复杂的任务,请参阅Windows DDK以获取详细信息。如果您的CPU支持VMX,则还可以使用仿真方法,例如VirtualBox等。但从一开始就使用64位操作系统会更简单。