调用组件的C函数[复制](Calling a C function in assembly [dup

2019-10-19 05:01发布

这个问题已经在这里有一个答案:

  • 从x86汇编语言调用C函数 2个回答

尽管我到处找我找不到任何解决我的problem.The的问题是,II定义的函数“程序hello_world()”中的C文件“hello.c的”,我想调用这个函数在汇编文件。 “hello_assembly.asm”。可谁能帮助我? 谢谢。

Answer 1:

你可以查看下面的例子可能会给你一些想法。

\#include <stdio.h>
int main(void)
{
        signed int a, b;
        a=5,b=25;
        mymul(&a,&b);
        printf("\nresult=%d",b);
        return 0;
}

mymul是正在用汇编语言编写的文件名为mymul.S功能

下面是mymul.S代码

.globl mymul
mymul:
        pushl %ebp            # save the old base pointer register
        movl %esp, %ebp       #copy the stack pointer to base pointer register
        movl 8(%ebp), %eax    # get the address of a 
        movl 12(%ebp), %ebx   # get the address of b
        xchg (%eax), %ecx     # we get the value of a and store it in ecx
        xchg (%ebx), %edx     # we get the value of b and stored it in edx
        imul %ecx,%edx        # do the multiplication
        xchg %ecx, (%eax)     #save the value back in a
        xchg %edx, (%ebx)     # save the value back in b
        movl %ebp, %esp       # get the stack pointer back to ebp
        popl %ebp             #restore old ebp
        ret                   #back to the main function

我们使用命令“CC”编译我们上述计划

$ cc mymul.S mul.c -o mulprogram

在当我们调用mymul的mul.c,我们传递的a和b的地址,这些地址被越来越推到堆栈。 当程序的执行进入mymul功能,堆栈看起来像这样:addressofb,addressofa,returnAddress的,oldebp


我们获取存储在的地址和b。使用XCHG地址的值(我们可以在这里使用MOVL),做乘法并将结果保存在B。


我希望上面的程序可以帮助你。



文章来源: Calling a C function in assembly [duplicate]