zoukankan      html  css  js  c++  java
  • OpenEuler 中C与汇编的混合编程

    使用下面代码下载gcc32位库
    sudo apt-get install gcc-multilib g++-multilib module-assistant

    1.将C代码编译成汇编代码:

     C语言代码:

    复制代码
    #include <stdio.h>
    
    extern int B();
    
    int A(int x,int y)
    {
        int d,e,f;
        d = 4;e = 5;f = 6;
        f = B(d,e);
    }
    复制代码

    汇编代码:

     

     

    2.用汇编语言实现函数

    获取CPU寄存器

    main.c

    复制代码
    #include <stdio.h>
    extern int get_ebp();
    extern int get_esp();
    int main()
    {
        int ebp, esp;
        ebp = get_ebp();
        esp = get_esp();
        printf("ebp=%8x     esp=%8x\n",ebp,esp);
    }
    复制代码

    s.s

    复制代码
        .section .text
        .global get_esp, get_ebp
    get_esp:
        movl    %esp, %eax
        ret
    get_ebp:
        movl    %ebp, %eax
        ret
    复制代码

    运行截图:

     3.用汇编编写mysum函数

    mysum.s

    复制代码
        .text
        .global mysum,printf
    mysum:
        pushl %ebp
        movl %esp, %ebp
    
        movl 8(%ebp), %eax
        addl 12(%ebp), %eax
    
        movl %ebp, %esp
        pop  %ebp
        ret
    复制代码

    mysum.c

    复制代码
    #include <stdio.h>
    extern int mysum(int a, int b);
    int main()
    {
        int a,b,c;
        a = 123; b = 456;
        c = mysum(a,b);
        printf("c = %d\n",c);
    }
    复制代码

    运行截图:

     3.从汇编调用C函数

    b.c

    复制代码
    #include <stdio.h>
    int a,b;
    extern int sub();
    int main()
    {
        a = 100; b = 200;
        sub();
    }
    复制代码

    b.s

    复制代码
        .text
        .global sub, a, b, printf
    sub:
        pushl   %ebp
        movl    %esp, %ebp
    
        pushl   b 
        pushl   a 
        pushl   $fmt
        call    printf
        addl    $12, %esp
    
        movl    %ebp,%esp
        pop     %ebp
        ret
    
        .data
    fmt:    .asciz  "a = %d  b = %d\n"
    复制代码

    运行截图:

  • 相关阅读:
    kafka基础
    springboot启动过程(3)-refresh方法
    springboot启动过程(2)-run方法
    springboot启动过程(1)-初始化
    springBoot数据库jpa+对接mybatis
    spirng boot web配置开发
    spring boot 入门
    jetty分析
    NIO/AIO
    使用jsPDF 和jspdf-autotable 导出中文表格页面
  • 原文地址:https://www.cnblogs.com/2902480848sy/p/15646906.html
Copyright © 2011-2022 走看看