这个问题已经在这里有一个答案:
- 从x86汇编语言调用C函数 2个回答
尽管我到处找我找不到任何解决我的problem.The的问题是,II定义的函数“程序hello_world()”中的C文件“hello.c的”,我想调用这个函数在汇编文件。 “hello_assembly.asm”。可谁能帮助我? 谢谢。
这个问题已经在这里有一个答案:
尽管我到处找我找不到任何解决我的problem.The的问题是,II定义的函数“程序hello_world()”中的C文件“hello.c的”,我想调用这个函数在汇编文件。 “hello_assembly.asm”。可谁能帮助我? 谢谢。
你可以查看下面的例子可能会给你一些想法。
\#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。
我希望上面的程序可以帮助你。