如何在.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
上一篇下一篇

猜你喜欢

热点阅读