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

ARM匯編語言與C/C++語言混合編程實現方法

2012-02-24 08:13:44
電大理工 2012年2期
關鍵詞:指令程序語言

王 茹

遼寧裝備制造職業技術學院(沈陽 110161)

在嵌入式應用程序的設計中,如果所有的編程任務都由匯編語言來完成,雖然目標代碼執行效率高,但其工作量會很大且不易維護;如果全部任務由C/C++語言來完成,雖然簡潔明了,但是目標代碼執行效率低,尤其在實時性較強的應用中更會突顯C/C++的不足。因此,一個嵌入式應用程序通常是由匯編語言和 C/C++語言混合編程來實現的,除了初始化部分用匯編語言編程外,其主要的編程任務一般都由C/C++來完成。主要介紹了ARM匯編語言與C/C++語言混合編程的兩種實現方法:內嵌匯編和ATPCS規則。

1 ATPCS過程調用標準(ARM/Thumb Procedure Call Standard)

ARM處理器核能通過相應的編譯器實現匯編語言與 C/C++等語言之間的調用/切換。為了這些調用能夠順利的實施,ARM規定了一套標準——ATPCS過程調用標準。

1.1 寄存器的使用規則

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

表1 ARM寄存器與ATPCS對照表

1.2 堆棧的使用規則

ATPCS規定堆棧采用滿遞減類型(FD,Full Descending),即堆棧通過減小存儲器地址而向下增長,堆棧指針指向內含有效數據的最低地址。

1.3 參數的傳遞規則

整數參數的前4個使用R0~R3傳遞,其他參數使用堆棧傳遞,所以要想參數傳遞簡單,最好函數的參數個數小于等于4。

子程序的返回結果為1個32位整數時,通過R0返回;返回結果為1個64位整數時,通過R0和R1返回;依此類推。結果為浮點數時,通過浮點運算部件的寄存器F0中。

2 ATPCS規則應用實例

2.1 匯編語言調用C語言

嵌入式應用程序開發一般由匯編語言完成初始化后,切換到C語言實現應用功能的開發。匯編語言中要用IMPORT偽操作聲明該C語言程序;匯編語言中通過BL實現程序的調用。

實例1 用匯編語言調用C語言方法實現字符串的復制。

2.2 C語言調用匯編語言

在C語言程序中,用EXTERN聲明匯編程序;在匯編程序中,用EXPORT 聲明可以被調用的程序。

2.3 C++程序調用C程序

C++程序調用C程序時,在C++程序中使用關鍵詞 extern "C"聲明被調用的 C程序。對于C++中的類(class)或者結構(struct),如果它沒有基類和虛函數,則相應的對象的存儲結構和ARM C相同。

2.4 匯編程序調用C++程序

匯編程序調用 C++程序時,在 C++程序中使用關鍵詞 extern "C"聲明被調用的 C++程序。對于C++中的類或者結構,如果它沒有基類和虛函數,則相應的對象的存儲結構和ARM C相同。在匯編程序中使用偽操作 IMPORT聲明被調用的C++程序。在匯編程序中將參數存放在數據棧中,而存放參數的數據棧的單元地址放在r0寄存器中,這樣被調用的 C++程序就能訪問相應的參數。

3 內嵌匯編

在 CC++語言中內嵌匯編語句可以實現一些高級語言不能實現或者不容易實現的功能。對于時間緊迫的功能也可以通過在 CC++語言中內嵌匯編語句來實現。內嵌的匯編器支持大部分ARM指令和Thumb指令,但是不支持諸如直接修改PC實現跳轉的底層功能,也不能直接引用C語言中的變量。

3.1 在 CC++語言中使用內嵌匯編指令的語法格式

在ARM C語言程序中使用關鍵詞_asm來標識一段匯編指令程序,其格式如下:

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

3.2 在 C\C++語言中使用內嵌的匯編指令注意事項

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

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

(2)如果在指令中使用的物理寄存器,應該保證該寄存器不會被編譯器在計算表達式值時破壞。

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

(4)對于內嵌匯編器可能會用到的寄存器,編譯器自己會保存和恢復這些寄存器,用戶不用保存和恢復這些寄存器。常量寄存器CPSR和寄存器SPSR外,別的寄存器必須先賦值然后再讀取,否則編譯器將會報錯。3.3 內嵌匯編指令的應用

實例3 C程序中內嵌匯編語句,實現字符串的復制。

4 結語

本文主要通過幾個簡單的例子演示了嵌入式開發中常用的C/C++和ARM匯編混合編程的一些方法和基本的思路,其中內嵌匯編的方法比較簡潔,而ATPCS規則中調用方法較多。以上只是拋磚引玉,更詳細和復雜的使用方法要結合實際應用并參考相關的資料。本文涉及的實例全部在ADS集成開發環境中運行實現。

[1]杜春雷.ARM 體系結構與編程.北京:清華大學出版社,2003.

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

[3]孫曄.ARM 嵌入式系統及應用.南京:江蘇教育出版社,2011.

猜你喜歡
指令程序語言
聽我指令:大催眠術
語言是刀
文苑(2020年4期)2020-05-30 12:35:30
試論我國未決羈押程序的立法完善
人大建設(2019年12期)2019-05-21 02:55:44
ARINC661顯控指令快速驗證方法
測控技術(2018年5期)2018-12-09 09:04:26
LED照明產品歐盟ErP指令要求解讀
電子測試(2018年18期)2018-11-14 02:30:34
讓語言描寫搖曳多姿
“程序猿”的生活什么樣
英國與歐盟正式啟動“離婚”程序程序
環球時報(2017-03-30)2017-03-30 06:44:45
累積動態分析下的同聲傳譯語言壓縮
創衛暗訪程序有待改進
中國衛生(2015年3期)2015-11-19 02:53:32
主站蜘蛛池模板: 亚洲人成成无码网WWW| 亚洲福利网址| 午夜福利网址| 欧美啪啪视频免码| 美女扒开下面流白浆在线试听| 免费日韩在线视频| 久久精品无码一区二区日韩免费| 日韩中文无码av超清| 精品自拍视频在线观看| 国产女人在线| 中文字幕无码电影| 国产精品欧美在线观看| 国产尤物jk自慰制服喷水| 亚洲无码高清免费视频亚洲 | 国产日韩久久久久无码精品| 国产精品永久免费嫩草研究院| 欧美成人综合在线| 成人午夜天| 成人午夜网址| 91亚瑟视频| 香蕉久人久人青草青草| 福利在线一区| 国产乱人伦精品一区二区| 欧美www在线观看| 亚洲成人免费看| 久久久亚洲色| 欧美在线视频不卡| A级毛片无码久久精品免费| 激情亚洲天堂| 福利在线不卡一区| 911亚洲精品| 国产麻豆福利av在线播放| 最新亚洲av女人的天堂| 国产精品专区第1页| 日韩视频免费| 国国产a国产片免费麻豆| 真人高潮娇喘嗯啊在线观看| 亚洲精品片911| 婷婷色一二三区波多野衣| 成人va亚洲va欧美天堂| 成人精品在线观看| 无码内射在线| 福利姬国产精品一区在线| 欧美另类图片视频无弹跳第一页| 超薄丝袜足j国产在线视频| 亚洲黄色视频在线观看一区| 久久综合五月| 国内精品视频在线| 国产喷水视频| 久久亚洲天堂| 国产丝袜第一页| 夜精品a一区二区三区| AV片亚洲国产男人的天堂| 欧美午夜视频在线| 亚洲综合在线最大成人| 婷婷亚洲视频| 中国丰满人妻无码束缚啪啪| 国产综合在线观看视频| 亚洲久悠悠色悠在线播放| 国产高清免费午夜在线视频| 国产主播福利在线观看| 亚洲精品动漫| 亚洲一区波多野结衣二区三区| 精品五夜婷香蕉国产线看观看| 中文字幕 欧美日韩| 欧美成人精品高清在线下载| 一本久道热中字伊人| 一级毛片在线播放免费| 免费毛片网站在线观看| 无码福利日韩神码福利片| 真实国产精品vr专区| 亚洲毛片网站| 高清久久精品亚洲日韩Av| 国产日韩精品欧美一区灰| 99久久人妻精品免费二区| 成人av手机在线观看| 性视频久久| 成年人国产网站| 国产91精品调教在线播放| 伊人精品成人久久综合| 成人综合网址| 青青国产视频|