熟女俱乐部五十路二区av,又爽又黄禁片视频1000免费,国产卡一卡二卡三无线乱码新区,中文无码一区二区不卡αv,中文在线中文a

新聞中心

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

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

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

本文引用地址:http://www.bjwjmy.cn/article/257031.htm

(6)從++程序

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

下面是被++程序。

structS{//本結構沒有基類和虛擬函數(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]! ;初始化結構體

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

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關鍵字引用該函數(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++相關文章:c++教程



上一頁 1 2 3 下一頁

評論


相關推薦

技術專區(qū)

關閉