<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 混合使用C、C++和匯編語(yǔ)之:內聯(lián)匯編和嵌入型匯編的使用

混合使用C、C++和匯編語(yǔ)之:內聯(lián)匯編和嵌入型匯編的使用

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

本文引用地址:http://dyxdggzs.com/article/257034.htm

例如,指令BLfoo{r0=expression1,r1=expression2,r2}生成以下偽代碼:

MOV(physical)r0,expression1

MOV(physical)r1,expression2

MOV(physical)r2,(virtual)r2

BLfoo

(3)輸出參數列表

輸出參數列表{output_value_list}列出了用來(lái)存放功能函數和SWI調用返回值的寄存器或表達式。列表中的值可以是物理寄存器、可修改長(cháng)值表達式或單個(gè)物理寄存器名稱(chēng)。

程序從特定的物理寄存器中取值并賦值到特定的表達式中。指定物理寄存器名稱(chēng)而并不賦值,導致相同名稱(chēng)虛擬寄存器被物理寄存器中的值更新。

例如,BLfoo{},{result1=r0,r1}生成以下偽碼:

BLfoo

MOVresult1,(physical)r0

MOV(virtual)r1,(physical)r1

(4)被破壞的寄存器列表(orruptedregisterlist)

此列表指定被函數調用破壞的物理寄存器。如果條件標志被調用的函數修改,必須在被破壞的寄存器列表中指定PSR。

BL和SWI指令總是破壞lr。

如果指令中缺少此列表項,則r0~r3、ip、lr和PSR被破壞。

注意

指令BL和B的區別在于,跳轉指令B只能使程序跳轉到++程序的一個(gè)地址標號,不能用于子程序調用。

9.內嵌匯編中的標號

代碼中定義的標號可被用作跳轉或C和“goto”語(yǔ)句的目標。在代碼中,C和中定義的標號可被用作跳轉指令的目標。

10.內嵌匯編器版本間的差異

不同版本的編譯器對內聯(lián)匯編程序的語(yǔ)法要求有顯著(zhù)差異。在具體使用時(shí)請參見(jiàn)相關(guān)文檔。

·如果使用的是ADSv1.2,請參閱ADS開(kāi)發(fā)者指南;

·如果使用的是RVCTv1.2,請參閱RealView編譯工具1.2版開(kāi)發(fā)者指南。

12.1.2嵌入式匯編

利用編譯器可將匯編代碼包括到一個(gè)或多個(gè)C或函數定義中去。嵌入式匯編器提供對目標處理器不受限制的低級別訪(fǎng)問(wèn),利用它可以使用C和C++預處理程序偽操作(preprocessordirective)并可以方便的使用偏移量訪(fǎng)問(wèn)結構成員。

本小節將介紹以下內容:

·嵌入式匯編程序語(yǔ)法;

·嵌入式匯編語(yǔ)句的限制;

·嵌入式匯編程序表達式和C或C++表達式之間的差異;

·嵌入式匯編函數的生成;

·__cpp關(guān)鍵字;

·手動(dòng)重復解決方案;

·相關(guān)基類(lèi)的關(guān)鍵字;

·成員函數類(lèi)的關(guān)鍵字;

·調用非靜態(tài)成員函數。

有關(guān)為處理器編寫(xiě)的詳細信息,請參閱ADS或RealView編譯工具的匯編程序指南。

1.嵌入式語(yǔ)法

嵌入式匯編函數定義由--asm(C和C++)或asm(C++)函數限定符標記,可用于:

·成員函數;

·非成員函數;

·模板函數;

·模板類(lèi)成員函數。

用__asm或asm聲明的函數可以有調用參數和返回類(lèi)型。它們從C和C++中調用的方式與普通C和C++函數調用方式相同。嵌入式匯編函數語(yǔ)法是:

__asmreturn-typefunction-name(parameter-list)

{

//ARM/Thumb/Thumb-2assemblercode

instruction[;instruction]

...

[instruction]

}

嵌入式匯編的初始執行狀態(tài)是在編譯程序時(shí)由編譯選項決定的。這些編譯選項如下所示:

·如果初始狀態(tài)為ARM狀態(tài),則內嵌匯編器使用--arm選項;

·如果初始狀態(tài)為T(mén)humb狀態(tài),則內嵌匯編器使用--thumb選項。

注意

嵌入式匯編的初始狀態(tài)由編譯器的編譯選項確定,與程序中的#pragmaarm和#pragmathumb偽操作無(wú)關(guān)。

c語(yǔ)言相關(guān)文章:c語(yǔ)言教程


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




評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>