我嘗試將VS2005中的C++工具移植到x64。問題是,代碼包含內聯彙編,這是64位編譯器不支持的。我的問題是,如果有更多的努力用清晰的C++編碼或使用內在函數。但在這種情況下,並不是所有的彙編函數都可用於x64,對嗎?比方說,我有一個簡單的程序如何在C++中使用內聯函數進行內聯裝配?
#include <stdio.h>
void main()
{
int a = 5;
int b = 3;
int res = 0;
_asm
{
mov eax,a
add eax,b
mov res,eax
}
printf("%d + %d = %d\n", a, b, res);
}
我該如何更改此代碼使用intrinsics來運行它?我是彙編新手,不瞭解其大部分功能。
UPDATE:
我所做的更改編譯組件,ml64.exe像漢斯建議。
; add.asm
; ASM function called from C++
.code
;---------------------------------------------
AddInt PROC,
a:DWORD, ; receives an integer
b:DWORD ; receives an integer
; Returns: sum of a and b, in EAX.
;----------------------------------------------
mov eax,a
add eax,b
ret
AddInt ENDP
END
的main.cpp
#include <stdio.h>
extern "C" int AddInt(int a, int b);
void main()
{
int a = 5;
int b = 3;
int res = AddInt(a,b);
printf("%d + %d = %d\n", a, b, res);
}
但結果是不正確的5 + 3 = -1717986920
。我猜,指針有問題。我在哪裏犯了一個錯誤?
這是典型的例子您的問題或只是一個很簡單的例子,你的問題嗎?我會盡我所能刪除彙編程序並用C/C++替換它。對於幾乎所有的例子來說,性能都是可比的(可能現代C編譯器比人類更聰明) – Elemental
在我的項目中有很多組裝部件,所以這是一個普遍的問題 – alex555
Intrinsics不包括簡單的說明,任何C編譯器都可以生成的類型。只有SSEx中的特殊說明纔會設置。您將需要此代碼的彙編程序,ml64.exe –