999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

ARM匯編語(yǔ)言與C/C++語(yǔ)言混合編程實(shí)現(xiàn)方法

2012-02-24 08:13:44
電大理工 2012年2期
關(guān)鍵詞:指令程序語(yǔ)言

王 茹

遼寧裝備制造職業(yè)技術(shù)學(xué)院(沈陽(yáng) 110161)

在嵌入式應(yīng)用程序的設(shè)計(jì)中,如果所有的編程任務(wù)都由匯編語(yǔ)言來(lái)完成,雖然目標(biāo)代碼執(zhí)行效率高,但其工作量會(huì)很大且不易維護(hù);如果全部任務(wù)由C/C++語(yǔ)言來(lái)完成,雖然簡(jiǎn)潔明了,但是目標(biāo)代碼執(zhí)行效率低,尤其在實(shí)時(shí)性較強(qiáng)的應(yīng)用中更會(huì)突顯C/C++的不足。因此,一個(gè)嵌入式應(yīng)用程序通常是由匯編語(yǔ)言和 C/C++語(yǔ)言混合編程來(lái)實(shí)現(xiàn)的,除了初始化部分用匯編語(yǔ)言編程外,其主要的編程任務(wù)一般都由C/C++來(lái)完成。主要介紹了ARM匯編語(yǔ)言與C/C++語(yǔ)言混合編程的兩種實(shí)現(xiàn)方法:內(nèi)嵌匯編和ATPCS規(guī)則。

1 ATPCS過(guò)程調(diào)用標(biāo)準(zhǔn)(ARM/Thumb Procedure Call Standard)

ARM處理器核能通過(guò)相應(yīng)的編譯器實(shí)現(xiàn)匯編語(yǔ)言與 C/C++等語(yǔ)言之間的調(diào)用/切換。為了這些調(diào)用能夠順利的實(shí)施,ARM規(guī)定了一套標(biāo)準(zhǔn)——ATPCS過(guò)程調(diào)用標(biāo)準(zhǔn)。

1.1 寄存器的使用規(guī)則

ATPCS對(duì) ARM 通用寄存器給以了不同的命名,在進(jìn)行編程時(shí)一般使用ATPCS命名寄存器。ARM寄存器與ATPCS對(duì)照表如表1所示。

表1 ARM寄存器與ATPCS對(duì)照表

1.2 堆棧的使用規(guī)則

ATPCS規(guī)定堆棧采用滿遞減類型(FD,Full Descending),即堆棧通過(guò)減小存儲(chǔ)器地址而向下增長(zhǎng),堆棧指針指向內(nèi)含有效數(shù)據(jù)的最低地址。

1.3 參數(shù)的傳遞規(guī)則

整數(shù)參數(shù)的前4個(gè)使用R0~R3傳遞,其他參數(shù)使用堆棧傳遞,所以要想?yún)?shù)傳遞簡(jiǎn)單,最好函數(shù)的參數(shù)個(gè)數(shù)小于等于4。

子程序的返回結(jié)果為1個(gè)32位整數(shù)時(shí),通過(guò)R0返回;返回結(jié)果為1個(gè)64位整數(shù)時(shí),通過(guò)R0和R1返回;依此類推。結(jié)果為浮點(diǎn)數(shù)時(shí),通過(guò)浮點(diǎn)運(yùn)算部件的寄存器F0中。

2 ATPCS規(guī)則應(yīng)用實(shí)例

2.1 匯編語(yǔ)言調(diào)用C語(yǔ)言

嵌入式應(yīng)用程序開(kāi)發(fā)一般由匯編語(yǔ)言完成初始化后,切換到C語(yǔ)言實(shí)現(xiàn)應(yīng)用功能的開(kāi)發(fā)。匯編語(yǔ)言中要用IMPORT偽操作聲明該C語(yǔ)言程序;匯編語(yǔ)言中通過(guò)BL實(shí)現(xiàn)程序的調(diào)用。

實(shí)例1 用匯編語(yǔ)言調(diào)用C語(yǔ)言方法實(shí)現(xiàn)字符串的復(fù)制。

2.2 C語(yǔ)言調(diào)用匯編語(yǔ)言

在C語(yǔ)言程序中,用EXTERN聲明匯編程序;在匯編程序中,用EXPORT 聲明可以被調(diào)用的程序。

2.3 C++程序調(diào)用C程序

C++程序調(diào)用C程序時(shí),在C++程序中使用關(guān)鍵詞 extern "C"聲明被調(diào)用的 C程序。對(duì)于C++中的類(class)或者結(jié)構(gòu)(struct),如果它沒(méi)有基類和虛函數(shù),則相應(yīng)的對(duì)象的存儲(chǔ)結(jié)構(gòu)和ARM C相同。

2.4 匯編程序調(diào)用C++程序

匯編程序調(diào)用 C++程序時(shí),在 C++程序中使用關(guān)鍵詞 extern "C"聲明被調(diào)用的 C++程序。對(duì)于C++中的類或者結(jié)構(gòu),如果它沒(méi)有基類和虛函數(shù),則相應(yīng)的對(duì)象的存儲(chǔ)結(jié)構(gòu)和ARM C相同。在匯編程序中使用偽操作 IMPORT聲明被調(diào)用的C++程序。在匯編程序中將參數(shù)存放在數(shù)據(jù)棧中,而存放參數(shù)的數(shù)據(jù)棧的單元地址放在r0寄存器中,這樣被調(diào)用的 C++程序就能訪問(wèn)相應(yīng)的參數(shù)。

3 內(nèi)嵌匯編

在 CC++語(yǔ)言中內(nèi)嵌匯編語(yǔ)句可以實(shí)現(xiàn)一些高級(jí)語(yǔ)言不能實(shí)現(xiàn)或者不容易實(shí)現(xiàn)的功能。對(duì)于時(shí)間緊迫的功能也可以通過(guò)在 CC++語(yǔ)言中內(nèi)嵌匯編語(yǔ)句來(lái)實(shí)現(xiàn)。內(nèi)嵌的匯編器支持大部分ARM指令和Thumb指令,但是不支持諸如直接修改PC實(shí)現(xiàn)跳轉(zhuǎn)的底層功能,也不能直接引用C語(yǔ)言中的變量。

3.1 在 CC++語(yǔ)言中使用內(nèi)嵌匯編指令的語(yǔ)法格式

在ARM C語(yǔ)言程序中使用關(guān)鍵詞_asm來(lái)標(biāo)識(shí)一段匯編指令程序,其格式如下:

在 ARM C++程序中除了可以使用關(guān)鍵詞_asm來(lái)標(biāo)識(shí)一段匯編指令程序外,還可以使用關(guān)鍵詞 asm來(lái)標(biāo)識(shí)一段匯編指令程序,其格式如下: asm("instruction[; instruction]");

3.2 在 C\C++語(yǔ)言中使用內(nèi)嵌的匯編指令注意事項(xiàng)

(1)在匯編指令中,逗號(hào)(,)用作分隔符。因此如果指令中的 C\C++表達(dá)式中包含有逗號(hào)(,),則該表達(dá)式應(yīng)該被包含在括號(hào)中。例如:

asm {ADD x, y, (f(), z)}其中,(f(), z)為C\C++表達(dá)式

(2)如果在指令中使用的物理寄存器,應(yīng)該保證該寄存器不會(huì)被編譯器在計(jì)算表達(dá)式值時(shí)破壞。

(3)不要使用物理寄存器去引用一個(gè) C變量。

(4)對(duì)于內(nèi)嵌匯編器可能會(huì)用到的寄存器,編譯器自己會(huì)保存和恢復(fù)這些寄存器,用戶不用保存和恢復(fù)這些寄存器。常量寄存器CPSR和寄存器SPSR外,別的寄存器必須先賦值然后再讀取,否則編譯器將會(huì)報(bào)錯(cuò)。3.3 內(nèi)嵌匯編指令的應(yīng)用

實(shí)例3 C程序中內(nèi)嵌匯編語(yǔ)句,實(shí)現(xiàn)字符串的復(fù)制。

4 結(jié)語(yǔ)

本文主要通過(guò)幾個(gè)簡(jiǎn)單的例子演示了嵌入式開(kāi)發(fā)中常用的C/C++和ARM匯編混合編程的一些方法和基本的思路,其中內(nèi)嵌匯編的方法比較簡(jiǎn)潔,而ATPCS規(guī)則中調(diào)用方法較多。以上只是拋磚引玉,更詳細(xì)和復(fù)雜的使用方法要結(jié)合實(shí)際應(yīng)用并參考相關(guān)的資料。本文涉及的實(shí)例全部在ADS集成開(kāi)發(fā)環(huán)境中運(yùn)行實(shí)現(xiàn)。

[1]杜春雷.ARM 體系結(jié)構(gòu)與編程.北京:清華大學(xué)出版社,2003.

[2]史斌.ARM匯編語(yǔ)言與C/C++混合編程方法,電子測(cè)量技術(shù).2006(6).

[3]孫曄.ARM 嵌入式系統(tǒng)及應(yīng)用.南京:江蘇教育出版社,2011.

猜你喜歡
指令程序語(yǔ)言
聽(tīng)我指令:大催眠術(shù)
語(yǔ)言是刀
文苑(2020年4期)2020-05-30 12:35:30
試論我國(guó)未決羈押程序的立法完善
ARINC661顯控指令快速驗(yàn)證方法
LED照明產(chǎn)品歐盟ErP指令要求解讀
讓語(yǔ)言描寫搖曳多姿
“程序猿”的生活什么樣
英國(guó)與歐盟正式啟動(dòng)“離婚”程序程序
累積動(dòng)態(tài)分析下的同聲傳譯語(yǔ)言壓縮
創(chuàng)衛(wèi)暗訪程序有待改進(jìn)
主站蜘蛛池模板: 久久精品电影| 成人在线观看一区| 一区二区三区毛片无码| 91一级片| 狠狠做深爱婷婷久久一区| 福利视频99| 成·人免费午夜无码视频在线观看 | 乱系列中文字幕在线视频| 人妻无码AⅤ中文字| 色悠久久久| 四虎AV麻豆| 九九热视频精品在线| 99伊人精品| 国产精品久久久久鬼色| 手机在线国产精品| 国产成人精品2021欧美日韩| 91精品视频播放| 国产成人精品第一区二区| 日本久久免费| www亚洲精品| 99一级毛片| 91原创视频在线| 2020国产精品视频| 九九视频免费在线观看| 91人妻在线视频| 亚洲成人黄色在线观看| 国产一区二区免费播放| 一本一道波多野结衣一区二区| 在线视频亚洲色图| 丁香婷婷激情综合激情| 亚洲天堂网视频| 精品久久国产综合精麻豆| 国产女人18毛片水真多1| 超级碰免费视频91| 国产三级国产精品国产普男人| 欧美激情,国产精品| 久久午夜夜伦鲁鲁片无码免费 | 国产精品流白浆在线观看| 国产成人喷潮在线观看| 尤物成AV人片在线观看| 99精品在线视频观看| 永久在线精品免费视频观看| 亚洲91在线精品| 精品夜恋影院亚洲欧洲| 一区二区三区在线不卡免费 | 色一情一乱一伦一区二区三区小说| 无码一区中文字幕| 久久永久精品免费视频| 国产成人a毛片在线| 日韩第一页在线| 国产97视频在线观看| 在线观看免费AV网| 久久精品人人做人人爽| 国产成人免费手机在线观看视频| 亚洲不卡无码av中文字幕| 国产在线欧美| 亚洲中文字幕日产无码2021| 色老头综合网| 亚洲一级毛片| 激情在线网| 欧美成人精品一级在线观看| 国产成人区在线观看视频| 久热中文字幕在线观看| 日韩精品无码免费一区二区三区| 日本久久网站| 久草青青在线视频| 91精品免费久久久| 久久亚洲黄色视频| 午夜无码一区二区三区在线app| 精品少妇人妻一区二区| 欧美精品色视频| 一级在线毛片| 原味小视频在线www国产| 亚洲国产成人综合精品2020 | 婷婷六月综合网| 国产黑丝视频在线观看| 国产打屁股免费区网站| 一区二区三区精品视频在线观看| 欧美精品亚洲精品日韩专| 国产91九色在线播放| 国产精品欧美激情| 欧洲一区二区三区无码|