如何在.c程序中用汇编函数
2018-12-03 本文已影响2人
半步江南
root@192:~/workdir/KandG/open_read_copy# gcc -c open.c -o open.o
root@192:~/workdir/KandG/open_read_copy# as asmopen.s -o asmopen.o
root@192:~/workdir/KandG/open_read_copy# as asm_read.s -o asm_read.o
root@192:~/workdir/KandG/open_read_copy# gcc open.o asmopen.o asm_read.o -o target1
root@192:~/workdir/KandG/open_read_copy# ./target1 in.txt
//open.c
#include <stdio.h>
int main(int argc,char *argv[]){
int fd_in,fd_read;
char buf[500];
fd_in=open(argv[1] ,0,0);//fd_in中接受到文件的标识号,在32位系统上,他是一个4字节的int值;
fd_read=read(fd_in,buf,500);
printf("Hello,world! %s \n",buf);
printf("%d\n",fd_read);
return fd_in;
}
//asmopen.o
.globl open
.type open,@function
open:
pushl %ebp
movl %esp,%ebp
movl $5,%eax
movl 8(%ebp),%ebx
movl 12(%ebp),%ecx
movl $0666,%edx
int $0x80
store_fd_in:
movl %eax,-4(%ebp)
movl %ebp,%esp
pop %ebp
ret
//asm_read.o
.section .data
.section .bss
.section .text
.globl read
.type read,@function
read:
pushl %ebp
movl %esp,%ebp
movl $3,%eax
movl 8(%ebp),%ebx
movl 12(%ebp),%ecx
movl 16(%ebp),%edx
int $0x80
cmpl $0 , %eax
jle end_loop
end_loop:
pop %ebp
ret