X64平台C C 與彙編混編工程搭建說明

2021-06-18 19:05:15 字數 1679 閱讀 1026

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 ...