# cat bar.c
void myprint(char* msg, int len );
int choose(int a, int b)
{
if (a>b)
{
myprint("the 1st one\n",13);
}
else
{
myprint("the 2nd one\n",13);
}
return 0;
}
# cat foo.asm
extern choose
[section .data]
num1st dd 3
num2nd dd 4
[section .text]
global _start
global myprint
_start:
push dword [num2nd]
push dword [num1st]
call choose
add esp,8
mov ebx,0
mov eax,1
int 0x80
myprint:
mov edx,[esp+8]
mov ecx,[esp+4]
mov ebx,1
mov eax,4
int 0x80
void myprint(char* msg, int len );
int choose(int a, int b)
{
if (a>b)
{
myprint("the 1st one\n",13);
}
else
{
myprint("the 2nd one\n",13);
}
return 0;
}
# cat foo.asm
extern choose
[section .data]
num1st dd 3
num2nd dd 4
[section .text]
global _start
global myprint
_start:
push dword [num2nd]
push dword [num1st]
call choose
add esp,8
mov ebx,0
mov eax,1
int 0x80
myprint:
mov edx,[esp+8]
mov ecx,[esp+4]
mov ebx,1
mov eax,4
int 0x80
ret
nasm -f elf -o foo.o foo.asm
gcc -c -o bar.o bar.c -m32
ld -s -o foobar foo.o bar.o -m elf_i386
./foobar
the 2nd one