x86平台上,可以利用asm关键字在在C++代码中直接编写汇编语句,而在x64平台上,VC++不再支持asm关键字,不能在代码中内嵌汇编了。这时候,你需要将那部分汇编代码单独编写成ASM文件,编译生成.obj文件后附加到C++工程中。
将C++代码中原来的汇编部分单独编写成ASM文件,需要注意参数传递的问题,前4个参数按照从左到右的顺序用rcx,rdx,r8,r9传递,剩下的参数从右到左用栈传递(右边的参数在更低的位置)。
例如函数add7,它共有7个参数
<span style="font-size:18px;">int add7(int a, int b, int c, int d, int e, int f, int g)
{
return a + b + c + d + e + f + g;
}</span>
调用该函数时,用反汇编查看可以看出,从左到右的前4个参数依次存放在rcx,rdx,r8,r9,剩余的参数从右到左按顺序入栈。
<span style="font-size:18px;">int r = add7(1, 2, 3, 4, 5, 6, 7);
000000013FBE739C mov dword