我的環境是64位win7,VC2010。是否有可能在intel/64位win7上的32位應用程序中使用64位指令
當然,intel裏面是64位的CPU。
我可以在32位應用程序中使用64位指令/本機機器字(64位)嗎?由於我的大部分代碼都是32位的,我不想將它移植到64位。我想通過編譯器內部或內聯彙編(也是64位VC編譯器不支持內聯彙編)手動優化它,是否有可能運行64位代碼fox示例mov rax ,在32位模式應用程序中的rbx?
我的環境是64位win7,VC2010。是否有可能在intel/64位win7上的32位應用程序中使用64位指令
當然,intel裏面是64位的CPU。
我可以在32位應用程序中使用64位指令/本機機器字(64位)嗎?由於我的大部分代碼都是32位的,我不想將它移植到64位。我想通過編譯器內部或內聯彙編(也是64位VC編譯器不支持內聯彙編)手動優化它,是否有可能運行64位代碼fox示例mov rax ,在32位模式應用程序中的rbx?
如果您的應用程序使用32位指令集,則不可以選擇在同一應用程序中「有時」使用64位指令。有一些選擇,但是:
其實你可以。用於從32位切換到64位模式(顯然必須存在於64位操作系統上才能運行32位代碼)的機制不受任何保護,可以從用戶代碼中使用。在Windows上,它被稱爲Heaven's Gate,它非常簡單:只需要一個33h段選擇器就可以進行遠程調用。
那麼,如何運行64位代碼呢?
call 33h:your64bitcode
...
your64bitcode:
; do something
retf
有,當然,一些限制,你可以以這種方式進入的,因爲你在一個64位的過程確實不是64位的代碼做什麼。
可能的重複[在32位Windows下使用Amd64指令的輕量級方法?](http://stackoverflow.com/questions/7133078/lightweight-method-to-use-amd64-instructions-under-32bit -windows) –
@John Zwinck:不,它不是重複的。這裏的操作系統是64位。 –
順便說一下,當使用MSVC定位64位時,您仍可以鏈接分別彙編的代碼。 – harold