<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

從編譯的代碼可以看出,編譯器將“addtotal,j,i+j”分為兩步來(lái)完成,用戶(hù)在編寫(xiě)自己的應用程序時(shí)要特別注意這一點(diǎn)。

包含多個(gè)表達式操作數的指令,沒(méi)有指定表達式操作數求值的順序。

++表達式用作程序操作數,如果表達式的值不能滿(mǎn)足指令中所要求的指令操作數約束條件,一條指令將被擴展為多條指令。

如果用作操作數的表達式創(chuàng )建需要析構的臨時(shí)函數,析構將發(fā)生在執行指令之后,這與++析構臨時(shí)函數的規則相類(lèi)似。

簡(jiǎn)單表達式操作數包含以下幾種類(lèi)型。

·變量值

·變量地址

·指針變量的反引用(thedereferencingofapointvarable)

·偽操作指定的程序常量

非簡(jiǎn)單表達式操作數包含以下幾種類(lèi)型。

·隱式函數調用,如除法,或顯式函數調用

·臨時(shí)函數的構造

·算術(shù)或邏輯操作

(3)寄存器列表

寄存器列表最多可包含16個(gè)操作數。這些操作數可以是虛擬寄存器或表達式操作數。在寄存器列表中指定虛擬寄存器和表達式操作數的順序非常重要。寄存器列表中操作數的讀寫(xiě)順序是從左到右。第一個(gè)操作數使用最低地址,隨后的操作數的地址依次在前一地址基礎上增加4。這一點(diǎn)與LDM或STM指令的普通操作(編號最低的物理寄存器總是存入最低的存儲器地址)是不同的。之所以存在這種區別是因為在內聯(lián)匯編中使用的寄存器被編譯器虛擬化了。

同一個(gè)表達式操作數或虛擬寄存器可以在寄存器列表中出現多次,重復使用。

如果表達式操作數或虛擬寄存器被指定為指令中的基址寄存器,表達式或虛擬寄存器的值按照指令尋址方式進(jìn)行更新。更新將覆蓋原表達式或虛擬寄存器的值。

(4)中間操作數(Intermediateoperands)

在內聯(lián)匯編指令中,可能將C或整型常量表達式用作立即數處理。用于指定直接移位的常量表達式的值必須在指令規定的移位操作數的范圍內;用于為存儲器或協(xié)處理器數據傳送指令指定直接偏移量的常量表達式,必須符合ARM體系結構中的內存對齊標準。

8.函數調用和分支跳轉

利用內聯(lián)匯編程序的BL和SWI指令可在常規指令字段后指定3個(gè)可選列表。這些指令格式有以下幾種。

SWI{cond}swi_num,{input_param_list},{output_value_list},{corrupt_reg_list}

BL{cond}function,{input_param_list},{output_value_list},{corrupt_reg_list}

其中,swi_num為SWI調用的中斷號;function為被調用函數名;{input_param_list}為輸入參數列表;{output_value_list}為輸出參數列表;{corrupt_reg_list}為被破壞寄存器列表。

注意

內聯(lián)匯編程序不支持BX、BLX和BXJ指令。不能在任何輸入、輸出或“被破壞的寄存器列表(corruptedregisterlist)”中指定lr、sp或pc寄存器;任何SWI指令或函數調用不能更改sp寄存器。

下面分別詳細介紹語(yǔ)法格式中各參數的使用。

(1)未指定任何列表

如果在SWI和BL指令后沒(méi)指定任何列表,則有下面規則。

·r0~r3用作輸入參數;

·r0用于輸出值;

·r12和r14的值將會(huì )被修改。

(2)輸入參數列表

指令中的輸入參數列表{input_param_list}列出了傳遞給被調用函數function和SWI的參數。被傳遞的參數可以是表達式、變量或包含表達式或變量的物理寄存器。

內聯(lián)匯編編譯器在編譯時(shí)增加一小段編譯程序負責在函數和SWI調用前

將傳遞的參數載入特定的物理寄存器中。為確保與現有內聯(lián)匯編代碼的向后兼容性,程序中指定物理寄存器名稱(chēng)而并不對其賦值,使相同名稱(chēng)虛擬寄存器中的值出現在物理寄存器中。

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>