• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 混合使用C、C++和匯編語之: C、C++ 和 ARM 匯編語言之間的調(diào)用

    混合使用C、C++和匯編語之: C、C++ 和 ARM 匯編語言之間的調(diào)用

    作者: 時間:2013-09-30 來源:網(wǎng)絡(luò) 收藏

    本文引用地址:http://www.czjhyjcfj.com/article/257031.htm

    (2)語言程序

    下面的例子顯示了如何從語言程序。

    下面的子程序段定義了語言函數(shù)。

    intg(inta,intb,intc,intd,inte)

    {

    returna+b+c+d+e;

    }

    下面的程序段顯示了語言。假設(shè)程序進入f時,r0中的值為i。

    ;intf(inti){returng(i,2*i,3*i,4*i,5*i);}

    PRESERVE8

    EXPORTf

    AREAf,CODE,READONLY

    IMPORTg //聲明C程序g()

    STRlr,[sp,#-4]! //保存返回地址lr

    ADDr1,r0,r0 //計算2*i(第2個參數(shù))

    ADDr2,r1,r0 //計算3*i(第3個參數(shù))

    ADDr3,r1,r2 //計算5*i

    STRr3,[sp,#-4]! //第五個參數(shù)通過堆棧傳遞

    ADDr3,r1,r1 //計算4*i(第4個參數(shù))

    BLg //調(diào)用C程序

    ADDsp,sp,#4 //從堆棧中刪除第5個參數(shù)

    LDRpc,[sp],#4 //返回

    END

    (3)從調(diào)用C

    下面的例子顯示了如何從程序中調(diào)用C函數(shù)。

    下面的程序調(diào)用了C程序。

    structS{ //本結(jié)構(gòu)沒有基類和虛函數(shù)

    S(ints):i(s){}

    inti;

    };

    externCvoidcfunc(S*);

    //被調(diào)用的C函數(shù)使用extern“C”聲明

    intf(){

    Ss(2); //初始化's'

    cfunc(s); //調(diào)用C函數(shù)'cfunc'將改變's'

    returnsi*3;

    }

    下面顯示了被調(diào)用的C程序代碼。

    structS{

    inti;

    };

    voidcfunc(structS*p){

    /*定義被調(diào)用的C功能*/

    p->i+=5;

    }

    (4)從C++中調(diào)用匯編

    下面的例子顯示了如何從C++中調(diào)用匯編程序。

    下面的例子為調(diào)用匯編程序的C++代碼。

    structS{ //本結(jié)果沒有基類和虛擬函數(shù)

    //

    S(ints):i(s){}

    inti;

    };

    externCvoidasmfunc(S*); //聲明被調(diào)用的匯編函數(shù)

    intf(){

    Ss(2); //初始化結(jié)構(gòu)體's'

    asmfunc(s); //調(diào)用匯編子程序'asmfunc'

    returns.i*3;

    }

    下面是被調(diào)用的匯編程序。

    PRESERVE8

    AREAAsm,CODE

    EXPORTasmfunc

    asmfunc//被調(diào)用的匯編程序定義

    LDRr1,[r0]

    ADDr1,r1,#5

    STRr1,[r0]

    MOVpc,lr

    END

    (5)從C中調(diào)用C++

    下面的例子顯示了如何從C++代碼中調(diào)用C程序。

    下面的代碼顯示了被調(diào)用C++代碼。

    structS{//本結(jié)構(gòu)沒有基類和虛擬函數(shù)

    S(ints):i(s){}

    inti;

    };

    externCvoidcppfunc(S*p){

    //定義被調(diào)用的C++代碼

    //連接了C功能

    p->i+=5;//

    }

    調(diào)用了C++代碼的C函數(shù)。

    structS{

    inti;

    };

    externvoidcppfunc(structS*p);

    /*聲明將會被調(diào)用的C++功能*/

    intf(void){

    structSs;

    s.i=2;/*初始化S*/

    cppfunc(s);/*調(diào)用cppfunc函數(shù),該函數(shù)可能改變S的值*/

    returns.i*3;

    }

    c++相關(guān)文章:c++教程




    評論


    相關(guān)推薦

    技術(shù)專區(qū)

    關(guān)閉
    主站蜘蛛池模板: 綦江县| 泊头市| 明光市| 辉南县| 黑河市| 即墨市| 大港区| 新泰市| 当涂县| 富平县| 随州市| 揭东县| 米泉市| 翁源县| 奎屯市| 余庆县| 建昌县| 综艺| 沙坪坝区| 昭苏县| 揭西县| 门头沟区| 永顺县| 明光市| 晴隆县| 哈尔滨市| 民丰县| 兴仁县| 大同市| 尖扎县| 黑水县| 麻江县| 舞阳县| 永年县| 丰宁| 马尔康县| 嫩江县| 双牌县| 佛学| 蓬莱市| 红安县|