zoukankan      html  css  js  c++  java
  • c调用汇编

        在此记录一下c调用汇编,汇编使用的是AT&T语法。例子很简单,就是在给一个整数用汇编转换成二进制。

    c部分很简单,文件名随便,如main.c:

    #include <stdio.h>
    #include <stdlib.h>
    
    void decToBin(long dec,char *b); //声明外部汇编函数
    int main()
    {
              long dec=254;
              char *bin=(char*)malloc(sizeof(char)*64);
              decToBin(dec,bin);
              printf("%s\n",bin);   
              free(bin);   
              return 0;   
    }    

     本人使用的是mac 64位系统,所以64bit寄存器为r开头,如:rax、rbx等。

    c调用的代码如下,保存的文件名随便,如decBin.S or decBin.s.

     1 .global _decToBin #下划线是必须的
     2 
     3 _decToBin:
     4     pushq     %rbp
     5     movq    %rsp,%rbp
     6 
     7     movq     %rdi,-8(%rbp) #第一个参数
     8     movq     %rsi,-16(%rbp) #第二个参数
     9 
    10     movq    -8(%rbp),%rax
    11     movq    -16(%rbp),%rbx
    12     movq    $63,%rcx
    13 
    14 A:
    15     rclq     $1,%rax
    16     jnc    B
    17     movb     $49,(%rbx)
    18     jmp C
    19 B:
    20     movb     $48,(%rbx)
    21 C:
    22     addq    $1,%rbx
    23     loop A
    24 
    25     popq     %rbp
    26     ret

    AT&T语法的汇编网上有很多,俺就不介绍了。

    在mac中使用的实际是clang编译器,这又牵扯到了LLVM项目,LLVM是构架编译器(compiler)的框架系统,Apple是LLVM计划的主要资助者。

    cc链接的就是clang,Makefle文件:

    main:main.o decBin.o
    
    main.o:main.c
        
    decBin.o:decBin.s
        cc -c $<
    
    clean:
        -rm main.o decBin.o main

         在这样解释型语言横行的年代,编译语言越来越不受到重视,越来淡出我们的视线,比如汇编,已经很少很少有人学了。当然像java、python、javascript、ruby等

    自有他们的优势,没有无缘无故的热门。比如我就很喜欢python,确实很方便,有段时间导致写C和C++程序时忘记加变量类型,但不管怎样,python确实很好用,

    特别使用matplotlib库生成图表,很酷,以后我会写写的。

       但是如果我们往底层学下去特别到了OS和driver就是c外加一些汇编的天下了。UEFI中intel架构的Tiano 99%使用的是c,另外是汇编啦,以后会分享下的。

    作为程序猿还是尽量了解了解底层原理,比如哪天出来个SB语言,又出来火热的安狗手机系统,安狗软件用SB语言开发,我们又得屁颠的学它,受人摆布啊。

    俺是喜欢关于OS的东东(比如linux kernel),虽然还有很长的路要走。

      哎,为啥OS对于瓷器来说就这么费劲呢...值得深思!

        

  • 相关阅读:
    ASP.NET MVC案例教程(一)
    大型网站架构演变和知识体系
    Windows下的.NET+ Memcached安装
    ASP.NET MVC案例教程(基于ASP.NET MVC beta)
    JS调用webservice的通用函数。
    ASP.NET MVC案例教程(基于ASP.NET MVC beta)——第五篇:MVC整合Ajax
    自己实现memcached客户端库
    ASP.NET 2.0防止同一用户同时登陆
    cookie,dom,css,js实现页面换肤
    在线编辑器实现原理(兼容IE和FireFox)
  • 原文地址:https://www.cnblogs.com/wuchaofan/p/2978620.html
Copyright © 2011-2022 走看看