我正在尝试将我的x64汇编程序代码嵌入到c ++中,因为我知道x64中不允许使用x64 __asm
,所以我尝试过,我在func.asm
中做了这样的asm定义:
.code
proc_testing PROC
push rcx
pop rcx
proc_testing ENDP
END
在我的C代码中,main.c
:
#include "stdafx.h"
extern"C" void inline proc_testing();
int main()
{
proc_testing();
return 0;
}
我认为inline
关键字会使编译器不能调用proc_testing()
,而是将其代码放在main中。不幸的是,它仍然是call proc_testing
。在masm中你也有一个关键字MACRO
,但在这里我不能使用它,如果使用MACRO
而不是PROC
我会得到编译错误,我试着这样做:
.code
proc_testing MACRO
push rcx
pop rcx
proc_testing ENDM
END
这样我就会收到错误:unmatched macro nesting
。
所以我实际上有两个问题:
1)Visual Studio中x64中的masm程序集可以内联吗?因此,当我使用proc_testing();
时,它不会执行call proc_testing
,但实际上会将proc_testing
的代码放在main
内。
2)你能让masm MACRO
在.asm
文件之外工作吗?如果那么我怎么能实现呢?
所以基本上我需要摆脱call
并将汇编代码直接放在链接/编译时。汇编程序代码是使用某些引擎动态生成的,所以我不能使用编译器内在函数,我需要为此重写asm生成器。
最后,如果所有变种都不可能,我可以对_asm _emit
进行类比,只是将机器代码放在十六进制中,放在特定位置的.text
内吗?