繁体   English   中英

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

[英]Is it possible to use 64-bit instruction in a 32-bit application on intel/64-bit win7

我的环境是64位win7,VC2010。

当然,intel里面是64位CPU。

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

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

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

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

call 33h:your64bitcode
...
your64bitcode:
; do something
retf

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

如果您的应用程序使用32位指令集,那么不,您不能选择在同一应用程序中“有时”使用64位指令。 但是有一些选择:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM