我尝试将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 –