I'm trying to call an assembly function from c,but i keep getting errors.
.text
.globl integrate
.type integrate, @function
integrate:
push %ebp
mov %esp, %ebp
mov $0,%edi
start_loop:
cmp %edi,1024
je loop_exit
mov 8(%ebp),%eax
mov 12(%ebp),%ecx
sub %eax,%ecx
add %edi,%ecx
incl %edi
jmp start_loop
loop_exit:
movl %ebp, %esp
popl %ebp
ret
This is my assembly function,file called integrate.s.
#include <stdio.h>
extern int integrate(int from,int to);
void main()
{
printf("%d",integrate(1,10));
}
Heres my c code.
function.c:5:6: warning: return type of ‘main’ is not ‘int’ [-Wmain]
/tmp/cciR63og.o: In function `main':
function.c:(.text+0x19): undefined reference to `integrate'
collect2: ld returned 1 exit status
Whenever i try to compile my code with gcc -Wall function.c -o function,it gives the 'undefined reference to integrate' error.I also tried adding link to the integrate.s file from c,like
#include<(file path)/integrate.s>
but it didnt work as well.Btw what assembly code is doing is not important,for now im just trying to call the function from c successfully.Can anyone help me about solving this problem ?
I see the following problems with the code:
edi
cmp %edi,1024
is using 1024
as address and will probably fault. You want cmp $1024,%edi
for comparing with an immediate numbereax
and ecx
from the arguments each iteration so the calculation you perform has no effecteax
(it will return the value of from
that was passed in)The first two points apply even if "what assembly code is doing is not important".