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
主站蜘蛛池模板: 久久久久久久蜜桃| 超清无码熟妇人妻AV在线绿巨人| 欧美精品另类| 亚洲国产天堂久久综合226114| 婷婷伊人久久| 亚洲有无码中文网| 中文字幕天无码久久精品视频免费 | 人妻夜夜爽天天爽| 国产剧情伊人| 91小视频在线播放| 米奇精品一区二区三区| 国产一级在线播放| 综合色区亚洲熟妇在线| 大陆国产精品视频| 成人综合久久综合| 伊人成人在线| 久久一本日韩精品中文字幕屁孩| 一区二区三区四区日韩| 黄色网站不卡无码| 亚洲综合中文字幕国产精品欧美| 国产欧美在线| 一级香蕉视频在线观看| 不卡午夜视频| 欧美午夜精品| 日韩第一页在线| 日本免费一级视频| 欧美黄色网站在线看| 婷婷色狠狠干| 91亚洲视频下载| 一本大道无码日韩精品影视| 伊人久久大香线蕉影院| 谁有在线观看日韩亚洲最新视频 | 亚洲日韩精品欧美中文字幕| 这里只有精品在线| 欧美成人精品一级在线观看| 99热这里只有成人精品国产| 亚洲成年网站在线观看| 国产青榴视频| 国产亚洲欧美日韩在线观看一区二区| 国产高潮流白浆视频| 亚洲美女一区二区三区| 国产一区二区网站| 国产96在线 | 久久精品日日躁夜夜躁欧美| 国产精品人成在线播放| 午夜无码一区二区三区| 一级毛片免费不卡在线视频| 91福利在线观看视频| 欧美有码在线| 国产91精品调教在线播放| 免费一级毛片完整版在线看| 国产成人无码综合亚洲日韩不卡| 不卡视频国产| 国产亚洲第一页| 999福利激情视频| 亚洲国产第一区二区香蕉| 亚洲不卡影院| 91国内视频在线观看| 国产九九精品视频| 亚洲欧美天堂网| 久久99久久无码毛片一区二区| 欧美国产日本高清不卡| 亚洲人精品亚洲人成在线| 波多野结衣一级毛片| 国产成人午夜福利免费无码r| 亚洲天堂视频网站| 五月婷婷丁香色| 综合色区亚洲熟妇在线| 欧美日韩资源| 色婷婷综合在线| 国产精品白浆在线播放| 99精品在线视频观看| 红杏AV在线无码| 国产国产人成免费视频77777| 久久久久夜色精品波多野结衣| 激情国产精品一区| 香蕉视频在线观看www| 久久久久中文字幕精品视频| 国产成人精品第一区二区| 99精品高清在线播放| 国产成人久久综合777777麻豆| 毛片免费视频|