中文字幕 另类精品,亚洲欧美一区二区蜜桃,日本在线精品视频免费,孩交精品乱子片免费

<sup id="3hn2b"></sup>

    1. <sub id="3hn2b"><ol id="3hn2b"></ol></sub><legend id="3hn2b"></legend>

      1. <xmp id="3hn2b"></xmp>

      2. 新聞中心

        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.antipu.com.cn/article/257031.htm

        (6)從++程序

        下面的代碼顯示了如何從++程序。

        下面是被++程序。

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

        S(ints):i(s){}

        inti;

        };

        externCvoidcppfunc(S*p){

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

        //功能函數(shù)體

        p->i+=5;

        }

        語言中,聲明要調(diào)用的功能,使用帶連接的跳轉(zhuǎn)指令調(diào)用功能。

        AREAAsm,CODE

        IMPORTcppfunc ;聲明被調(diào)用的C++函數(shù)名

        EXPORTf

        f

        STMFDsp!,{lr}

        MOVr0,#2

        STRr0,[sp,#-4]! ;初始化結(jié)構(gòu)體

        MOVr0,sp ;調(diào)用參數(shù)為指向結(jié)構(gòu)體的指針

        BLcppfunc ;調(diào)用C++功能'cppfunc'

        LDRr0,[sp],#4

        ADDr0,r0,r0,LSL#1

        LDMFDsp!,{pc}

        END

        (7)在C和C++函數(shù)間傳遞參數(shù)

        下面的例子顯示了如何在C和C++函數(shù)間傳遞參數(shù)。

        下面的代碼為C++函數(shù)。

        externCintcfunc(constint);

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

        externCintcppfunc(constintr){

        //定義將被C調(diào)用的C++函數(shù)

        return7*r;

        }

        intf(){

        inti=3;

        returncfunc(i); //相C函數(shù)傳參

        }

        下面為C函數(shù)。

        externintcppfunc(constint*);

        /*聲明將被調(diào)用的C++函數(shù)*/

        intcfunc(constint*p){

        /*定義被C++調(diào)用的C函數(shù)*/

        intk=*p+4;

        returncppfunc(k);

        }

        (8)從C或匯編語言調(diào)用C++

        下面的例子綜合顯示了如何從C或匯編語言中調(diào)用非靜態(tài)、非虛的C++成員函數(shù)。可以使用編譯器編譯出的匯編程序查找已延伸的函數(shù)名。

        下面是被調(diào)用的C++成員函數(shù)。

        structT{

        T(inti):t(i){}

        intt;

        intf(inti);

        };

        intT::f(inti){returni+t;}

        //定義將被C調(diào)用的C++功能函數(shù)

        externCintcfunc(T*);

        //聲明將被C++調(diào)用的C函數(shù)

        intf(){

        Tt(5);//createanobjectoftypeT

        returncfunc(t);

        }

        下面為調(diào)用C++的C語言函數(shù)。

        structT;

        externint_ZN1T1fEi(structT*,int);

        /*被調(diào)用的C++函數(shù)名*/

        intcfunc(structT*t){

        /*定義被C++調(diào)用的C函數(shù)*/

        return3*_ZN1T1fEi(t,2);/*實現(xiàn)3乘以t->f(2)功能*/

        }

        下面為調(diào)用C++的匯編函數(shù)。

        EXPORTcfunc

        AREAfoo,CODE

        IMPORT_ZN1T1fEi

        cfunc

        STMFDsp!,{lr} ;此時r0已經(jīng)包含了指向?qū)ο蟮闹羔?/p>

        MOVr1,#2

        BL_ZN1T1fEi

        ADDr0,r0,r0,LSL#1 ;r0乘以3

        LDMFDsp!,{pc}

        END

        下面的例子顯示了如何用嵌入式匯編語言實現(xiàn)上面的例子。在此例中,使用__cpp關(guān)鍵字引用該函數(shù)。因此,用戶不必了解已延伸的函數(shù)名。

        structT{

        T(inti):t(i){}

        intt;

        intf(inti);

        };

        intT::f(inti){returni+t;}

        //定義被C++調(diào)用的匯編功能

        __asmintasm_func(T*){

        STMFDsp!,{lr}

        MOVr1,#2;

        BL__cpp(T::f);

        ADDr0,r0,r0,LSL#1;r0乘以3

        LDMFDsp!,{pc}

        }

        intf(){

        Tt(5);//創(chuàng)建T類型的對象

        returnasm_func(t);

        }

        聯(lián)系方

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



        上一頁 1 2 3 下一頁

        評論


        相關(guān)推薦

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

        關(guān)閉