在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

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

            混合使用C、C++和匯編語之: C、C++ 和 ARM 匯編語言之間的調用

            作者: 時間:2013-09-30 來源:網絡 收藏

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

            (6)從++程序

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

            下面是被++程序。

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

            S(ints):i(s){}

            inti;

            };

            externCvoidcppfunc(S*p){

            //定義被調用的功能

            //功能函數(shù)體

            p->i+=5;

            }

            語言中,聲明要調用的功能,使用帶連接的跳轉指令調用功能。

            AREAAsm,CODE

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

            EXPORTf

            f

            STMFDsp!,{lr}

            MOVr0,#2

            STRr0,[sp,#-4]! ;初始化結構體

            MOVr0,sp ;調用參數(shù)為指向結構體的指針

            BLcppfunc ;調用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);

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

            externCintcppfunc(constintr){

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

            return7*r;

            }

            intf(){

            inti=3;

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

            }

            下面為C函數(shù)。

            externintcppfunc(constint*);

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

            intcfunc(constint*p){

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

            intk=*p+4;

            returncppfunc(k);

            }

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

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

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

            structT{

            T(inti):t(i){}

            intt;

            intf(inti);

            };

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

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

            externCintcfunc(T*);

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

            intf(){

            Tt(5);//createanobjectoftypeT

            returncfunc(t);

            }

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

            structT;

            externint_ZN1T1fEi(structT*,int);

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

            intcfunc(structT*t){

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

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

            }

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

            EXPORTcfunc

            AREAfoo,CODE

            IMPORT_ZN1T1fEi

            cfunc

            STMFDsp!,{lr} ;此時r0已經包含了指向對象的指針

            MOVr1,#2

            BL_ZN1T1fEi

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

            LDMFDsp!,{pc}

            END

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

            structT{

            T(inti):t(i){}

            intt;

            intf(inti);

            };

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

            //定義被C++調用的匯編功能

            __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++相關文章:c++教程



            上一頁 1 2 3 下一頁

            評論


            相關推薦

            技術專區(qū)

            關閉