VS2005 で C++ ツールを x64 に移植しようとしています。問題は、64 ビット コンパイラでサポートされていないインライン アセンブリがコードに含まれていることです。私の質問は、それを明確な C++ でコーディングするか、組み込み関数を使用するためにもっと多くの努力があるかどうかです。しかし、この場合、すべてのアセンブラー関数が x64 で使用できるわけではありませんよね? 簡単なプログラムがあるとしましょう
#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);
}
組み込み関数を使用してこのコードを実行するには、どのように変更する必要がありますか? 私はアセンブラが初めてで、その機能のほとんどを知りません。
アップデート:
Hansが提案したように、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
。ポインターに何か問題があると思います。どこで間違いをしましたか?