2.2.1.1. step1
2.2.1.2. step2
2.2.1.3. step3
2.2.2.1. step1
2.2.2.2. step2
2.2.2.3. step3
2.2.2.4. step4新增測試**
#include
#include "windows.h"
using namespace std;
//組合語言外暴漏函式
extern "c" double __stdcallcombinea(int a, int b, int c, int d, int e, double f);
//與組合語言功能相同的c函式
double combinec(int a, int b, int c, intd, int e, double f)
//測試主函式
void main()
2.2.3.1. step1
2.2.3.2. step2
2.2.3.3. step3新增測試彙編**
;combinea(int a, int b, int c, int d,int e, double f)
.data
realval real8 + 1.5;
.code
public combinea
combinea proc
add ecx, dword ptr [rsp+28h]
parameter:
add ecx, r9d
add ecx, r8d
add ecx, edx
movd xmm0, ecx
cvtdq2pd xmm0, xmm0
movsd xmm1, realval
addsd xmm1, mmword ptr [rsp+30h]
divsd xmm0, xmm1
retcombinea endp
end2.2.4.1. 修改編譯環境為x64
如果沒有x64,則選擇new
修改為x64
2.2.4.2. 設定asm檔案屬性
2.2.4.3. 講上面的does not…修改為custom build tool
2.2.4.4. 屬性頁左側多出一項自定義編譯設定
2.2.4.5. 修改command line和outputs
command line
:
ml64.exe /dwin_x64 /zi /c /cp /fl /fo$(intdir)\x64asm.obj x64asm.asm
outputs
$(intdir)\x64asm.obj
注意:上述紅色字型如果改為$(inputname)會報錯,「找不到.asm檔案」,所以我修改為了檔名,這樣編譯就通過了。
同理,可以設定release模式。
2.2.4.6. 編譯asm檔案
2.2.4.7. 編譯成功
至此,x64環境下vs2012混合程式設計成功
X64下VC工程內聯彙編
問題 在x64 release下出現乙個奇怪的bug,優化後乙個浮點乘法運算出錯了,例如1.0 1000 居然為 0。分析 反彙編跟蹤發現原來是暫存器的值傳入有問題,本該傳1000.0,結果傳的是0.0。所用暫存器是xmm12,為什麼會出現這個問題呢,發現是因為前面呼叫了 libmpeg2的函式修改...
在x64平台上除錯依賴於x86的WCF服務
根據微軟官方的解釋,wcf 之前的版本名為 indigo 是使用託管 建立和執行面向服務 service oriented 應用程式的統一框架。它使得開發者能夠建立乙個跨平台的安全 可信賴 事務性的解決方案,且能與已有系統相容協作。雲平台框架。上次在作業的時候遇到了一件蛋疼的事情。根據要求,需要建立...
一台主機同時支援x86與x64客戶端安裝
這一篇則需要在一台主機上同時支援.net程式,不論編譯成x86還是x64都要ok。x86 x64 2 閱讀裡面的readme。以其中乙個為例,另乙個操作步驟一致。3 解壓到任意資料夾 臨時的,一會可以刪掉 3.1 開始 執行 cmd cd 該資料夾 3.2 執行命令 install.bat all ...