Visual Studio中的X64 Assembly,作为内联函数

时间:2017-08-16 10:56:20

标签: c++ c assembly visual-studio-2017 inline-assembly

我正在尝试将我的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内吗?

0 个答案:

没有答案