C中调用汇编函数
文件结构:
- obj
- src
- makefile
// src/c/main_c.c
#include "asm.h"
int main_c(){
int a = 10;
int b = 20;
int c = asm_add(a, b);
int d = asm_sub(a, b);
return 0;
}
# src/asm/asm_base.S
.text
.globl asm_add
.globl asm_sub
asm_add:
push %ebp
mov %esp,%ebp
mov 0x8(%ebp),%edx
mov 0xc(%ebp),%eax
add %edx,%eax
pop %ebp
ret
asm_sub:
push %ebp
mov %esp,%ebp
mov 0x8(%ebp),%eax
sub 0xc(%ebp),%eax
pop %ebp
ret
// src/inc/asm.h
#ifndef __INC_ASM_H__
#define __INC_ASM_H__
extern int asm_add(int a, int b);
extern int asm_sub(int a, int b);
#endif
Inc = -Isrc/inc
OBJINC = obj
ASM = gcc
ASMFLAGS = -ggdb -m32
CC = gcc
CFLAGS = -ggdb -m32
LD = ld
LDFLAGS = -m elf_i386
all:
$(CC) $(Inc) $(CFLAGS) -c ./src/c/main_c.c -o $(OBJINC)/main_c.o
$(ASM) $(Inc) $(ASMFLAGS) -c ./src/asm/asm_base.S -o $(OBJINC)/asm_base.o
$(LD) $(LDFLAGS) -e main_c $(OBJINC)/main_c.o $(OBJINC)/am_base.o
clean:
rm $(OBJINC)/*.o
gdb:
gdb a.out --tui