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

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

ARM處理器核能通過相應(yīng)的編譯器實(shí)現(xiàn)匯編語(yǔ)言與 C/C++等語(yǔ)言之間的調(diào)用/切換。為了這些調(diào)用能夠順利的實(shí)施,ARM規(guī)定了一套標(biāo)準(zhǔn)——ATPCS過程調(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),即堆棧通過減小存儲(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í),通過R0返回;返回結(jié)果為1個(gè)64位整數(shù)時(shí),通過R0和R1返回;依此類推。結(jié)果為浮點(diǎn)數(shù)時(shí),通過浮點(diǎn)運(yùn)算部件的寄存器F0中。

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

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

嵌入式應(yīng)用程序開發(fā)一般由匯編語(yǔ)言完成初始化后,切換到C語(yǔ)言實(shí)現(xiàn)應(yīng)用功能的開發(fā)。匯編語(yǔ)言中要用IMPORT偽操作聲明該C語(yǔ)言程序;匯編語(yǔ)言中通過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),如果它沒有基類和虛函數(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),如果它沒有基類和虛函數(shù),則相應(yīng)的對(duì)象的存儲(chǔ)結(jié)構(gòu)和ARM C相同。在匯編程序中使用偽操作 IMPORT聲明被調(diào)用的C++程序。在匯編程序中將參數(shù)存放在數(shù)據(jù)棧中,而存放參數(shù)的數(shù)據(jù)棧的單元地址放在r0寄存器中,這樣被調(diào)用的 C++程序就能訪問相應(yīng)的參數(shù)。

3 內(nèi)嵌匯編

在 CC++語(yǔ)言中內(nèi)嵌匯編語(yǔ)句可以實(shí)現(xiàn)一些高級(jí)語(yǔ)言不能實(shí)現(xiàn)或者不容易實(shí)現(xiàn)的功能。對(duì)于時(shí)間緊迫的功能也可以通過在 CC++語(yǔ)言中內(nèi)嵌匯編語(yǔ)句來實(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來標(biāo)識(shí)一段匯編指令程序,其格式如下:

在 ARM C++程序中除了可以使用關(guān)鍵詞_asm來標(biāo)識(shí)一段匯編指令程序外,還可以使用關(guān)鍵詞 asm來標(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ǔ)

本文主要通過幾個(gè)簡(jiǎn)單的例子演示了嵌入式開發(fā)中常用的C/C++和ARM匯編混合編程的一些方法和基本的思路,其中內(nèi)嵌匯編的方法比較簡(jiǎn)潔,而ATPCS規(guī)則中調(diào)用方法較多。以上只是拋磚引玉,更詳細(xì)和復(fù)雜的使用方法要結(jié)合實(shí)際應(yīng)用并參考相關(guān)的資料。本文涉及的實(shí)例全部在ADS集成開發(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ǔ)言
聽我指令:大催眠術(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)
主站蜘蛛池模板: 伊人久久青草青青综合| 亚洲热线99精品视频| 亚洲成年人片| 一级爱做片免费观看久久| 欧美一区福利| 国产福利免费观看| 国产精品极品美女自在线| 在线高清亚洲精品二区| 色偷偷综合网| 亚洲黄网视频| 国产真实乱子伦精品视手机观看 | 91日本在线观看亚洲精品| 免费播放毛片| 久久99精品国产麻豆宅宅| 99久久国产综合精品2020| 欧美影院久久| 日韩人妻无码制服丝袜视频| 久久免费成人| 国产国产人成免费视频77777| 国产精品白浆在线播放| 台湾AV国片精品女同性| 92精品国产自产在线观看| 欧美一道本| 国产美女视频黄a视频全免费网站| 亚洲精品卡2卡3卡4卡5卡区| 尤物特级无码毛片免费| 亚洲AV成人一区二区三区AV| 99re热精品视频中文字幕不卡| 亚洲AV无码不卡无码| 亚洲第一极品精品无码| 亚洲无码高清一区二区| 青青国产视频| 国产欧美精品一区二区| 国产黄网永久免费| 久久亚洲欧美综合| 午夜精品久久久久久久无码软件| 国产欧美在线观看精品一区污| 国产粉嫩粉嫩的18在线播放91| 久久毛片基地| 一本一道波多野结衣av黑人在线 | 欧美成人精品在线| 亚洲久悠悠色悠在线播放| 欧美中文字幕一区二区三区| 欧美黑人欧美精品刺激| 四虎永久在线| 国产成人精品视频一区二区电影| 99re免费视频| 欧美亚洲欧美区| 在线日韩一区二区| 五月婷婷导航| 国产精品久久久久久久久久久久| 草草线在成年免费视频2| 国产精品视频久| 波多野结衣的av一区二区三区| 无码啪啪精品天堂浪潮av| 国产精品黄色片| 免费毛片网站在线观看| 国产97公开成人免费视频| 88av在线| 鲁鲁鲁爽爽爽在线视频观看| 国产成人无码综合亚洲日韩不卡| 国产亚洲精品自在线| 亚洲无限乱码| 日本免费一级视频| 极品私人尤物在线精品首页| 在线国产91| 欧美第九页| 狠狠躁天天躁夜夜躁婷婷| 超碰精品无码一区二区| 不卡无码h在线观看| 国产黑丝视频在线观看| 国产精品女熟高潮视频| 国产精品亚欧美一区二区| 极品国产一区二区三区| 国产成人91精品| 国产偷国产偷在线高清| 五月天久久综合国产一区二区| 国产欧美在线视频免费| 欧美一区二区丝袜高跟鞋| 无码日韩视频| 99青青青精品视频在线| aaa国产一级毛片|