是否可以在intel/64-bit win7上的32位应用程序中使用64位指令

zha*_*fei 4 c++ assembly

我的环境是64位win7,VC2010.

当然,intel里面是64位CPU.

我可以在32位应用程序中使用64位指令/本机机器字(64位)吗?由于我的大多数代码都是32位,我不想将其移植到64位.

对于一些性能关键的热代码,我想通过编译器内部或内联汇编手动优化它(也是64位VC编译器不支持内联汇编),是否可以运行64位代码fox示例mov rax,rbx in a 32位模式应用?

har*_*old 10

实际上,你可以.用于从32位模式切换到64位模式的机制(显然必须存在于能够运行32位代码的64位操作系统上)不受任何方式保护,并且可以从用户代码中使用.在Windows上,它被称为Heaven's Gate,它非常简单:只需要​​一个33h的段选择器远程调用.

那么,如何运行64位代码?

call 33h:your64bitcode
...
your64bitcode:
; do something
retf
Run Code Online (Sandbox Code Playgroud)

当然,对于以这种方式输入的64位代码可以做些什么有一些限制,因为你不是真正的64位进程.


Joh*_*nck 4

如果您的应用程序使用 32 位指令集,则不可以,您不能选择在同一应用程序中“有时”使用 64 位指令。不过,还有一些选择:

  • 使用 SIMD 指令,例如 SSE、AVX 等。这在此处记录:http://msdn.microsoft.com/en-us/library/t467de55 (v=vs.90).aspx
  • 将 32 位代码移植到 64 位。也许这并不那么难?
  • 将您的程序一分为二:一个包含旧代码的 32 位进程,一个包含新代码的 64 位进程。您可以在它们之间映射内存,一个可以启动另一个,所以它有点像多线程程序。它是否会表现良好很大程度上取决于我们目前还不知道的细节。