美文网首页
如何在.c程序中用汇编函数

如何在.c程序中用汇编函数

作者: 半步江南 | 来源:发表于2018-12-03 20:39 被阅读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
    

    相关文章

      网友评论

          本文标题:如何在.c程序中用汇编函数

          本文链接:https://www.haomeiwen.com/subject/lhmucqtx.html