内联汇编程序调用子程序

发布于 2024-08-20 19:29:32 字数 347 浏览 4 评论 0原文

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

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?

干杯,
托马斯

I have question about inline assembler. It's possible to call another assembler subroutine from inline assembler within the same function? For example:

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
    }
}

Where I should, and how, write subroutine sub123?

Cheers,
Thomas

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

疯了 2024-08-27 19:29:32

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

If you are writing an entire subroutine in assembly, you should look into using the file-level assembler rather than inline.

请别遗忘我 2024-08-27 19:29:32

假设你有一个用汇编语言编写的子程序_func2(我只知道NASM语法)。

    global  _func2

    section .text
_func2:
    ret

您可以像这样从 C++ 代码中调用此子例程。

extern "C" {
void func2();
}

void func1()
{
    __asm {
        call func2
    }
}

int main()
{
    func1();
}

当然,func2 也可以是带有 __asm 块的 C/C++ 函数。

Suppose you have a subroutine _func2 written in assembler (I only know NASM syntax).

    global  _func2

    section .text
_func2:
    ret

You can call this subroutine from your C++ code like this

extern "C" {
void func2();
}

void func1()
{
    __asm {
        call func2
    }
}

int main()
{
    func1();
}

Of course func2 can also be a C/C++ function with an __asm block.

终止放荡 2024-08-27 19:29:32

从语法来看,我假设使用的编译器是VC++?如果是这样,则为裸函数 (http://msdn. microsoft.com/en-us/library/5ekezyy2(VS.80).aspx) 应该让您定义一个可以从汇编语言代码轻松调用的函数。

(裸函数对于 C++ 也是可见的,因此您也可以从 C++ 调用它们,并且可能会得到错误的结果......所以您必须小心!)

From the syntax, I assume the compiler being used is VC++? If so, a naked function (http://msdn.microsoft.com/en-us/library/5ekezyy2(VS.80).aspx) should let you define a function that can be easily called from assembly language code.

(Naked functions are also visible to C++, so you can call them from C++ as well and potentially get the wrong results... so you just have to be careful!)

梦里°也失望 2024-08-27 19:29:32

您可以像创建第一个函数一样创建另一个函数,然后使用其损坏的名称(例如 call __GLOBAL__I_sub123;)来调用它。

将其声明为 extern "C" 可能是一个好主意,以使事情变得更简单。

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

You could do it by creating the other function just as you did with the 1st one and then call it with its mangled name like call __GLOBAL__I_sub123;.

It might be a good idea to declare it as extern "C" to make things simpler.

In gcc, you can use gcc -S file.cpp to see what is the funciton's mangled name.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文