Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 对子例程的内联汇编程序调用_C++_Assembly_Inline Assembly - Fatal编程技术网

C++ 对子例程的内联汇编程序调用

C++ 对子例程的内联汇编程序调用,c++,assembly,inline-assembly,C++,Assembly,Inline Assembly,我对内联汇编程序有疑问。是否可以在同一函数中从内联汇编程序调用另一个汇编程序子例程?例如: void FindValidPID(unsigned int &Pid) { __asm { sub esp, 20h mov eax, Pid add eax,eax call sub123 ; another assm subroutine mov Pid, eax add esp

我对内联汇编程序有疑问。是否可以在同一函数中从内联汇编程序调用另一个汇编程序子例程?例如:

void FindValidPID(unsigned int &Pid) 
{
    __asm
    {
        sub esp, 20h
        mov eax, Pid
        add eax,eax
        call sub123 ; another assm subroutine
        mov Pid, eax
        add esp, 20h
    }
}
我应该在哪里以及如何编写子程序sub123

干杯,

Thomas

如果您在汇编中编写整个子例程,您应该考虑使用文件级汇编程序而不是内联汇编程序。

假设您有一个用汇编程序编写的子例程
\u func2
(我只知道NASM语法)

你可以从C++代码中调用这个子程序,比如这个< /P>

extern "C" {
void func2();
}

void func1()
{
    __asm {
        call func2
    }
}

int main()
{
    func1();
}

当然
func2
也可以是一个带有
\uu asm
块的C/C++函数。

您可以像创建第一个函数一样创建另一个函数,然后用其损坏的名称调用它,如
调用\uu全局\uu I\u sub123

最好将其声明为
extern“C”
,以简化操作


在gcc中,您可以使用
gcc-S file.cpp
查看函数的损坏名称。

从语法上看,我假设使用的编译器是VC++?如果是这样,裸函数()应该允许您定义一个可以从汇编语言代码轻松调用的函数

(裸函数对于C++也是可见的,所以你也可以从C++调用它们,并且可能得到错误的结果…所以你必须要小心!)< /P>你所说的“相同”函数是什么意思?您不是指递归,也不是为一种子递归定义替代入口点。看起来您只想定义和调用一个函数。

extern "C" {
void func2();
}

void func1()
{
    __asm {
        call func2
    }
}

int main()
{
    func1();
}