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();
}