


下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、ARM中 C和匯編混合編程及示例 參數(shù)的傳遞規(guī)則 .根據(jù)參數(shù)個數(shù)是否固定 , 可以將子程序分為參數(shù)個數(shù)固定的子 程序和參數(shù)個數(shù)可變的子程序 . 這兩種子程序的參數(shù)傳遞規(guī)則是不同的 .1. 參數(shù) 個數(shù)可變的子程序參數(shù)傳遞規(guī)則對于參數(shù)個數(shù)可變的子程序 , 當(dāng)參數(shù)不超過 4 個 時, 可以使用寄存器 R0R3來進行參數(shù)傳遞 ,當(dāng)參數(shù)超過 4 個時, 還可以使用數(shù)據(jù) 棧來傳遞參數(shù) . 在參數(shù)傳遞時 , 將所有參數(shù)看做是存放在連續(xù)的內(nèi)存單元中的字 數(shù)據(jù)。然后 , 依次將各名字?jǐn)?shù)據(jù)傳送到寄存器 R0,R1,R2,R3; 如果參數(shù)多 參數(shù)的傳遞規(guī)則 .根據(jù)參數(shù)個數(shù)是否固定 , 可以將子程序分為參數(shù)個數(shù)固定的
2、子程序和參數(shù)個數(shù)可 變的子程序 . 這兩種子程序的參數(shù)傳遞規(guī)則是不同的 .1. 參數(shù)個數(shù)可變的子程序參數(shù)傳遞規(guī)則 對于參數(shù)個數(shù)可變的子程序 , 當(dāng)參數(shù)不超過 4 個時, 可以使用寄存器 R0R3來進 行參數(shù)傳遞 , 當(dāng)參數(shù)超過 4 個時, 還可以使用數(shù)據(jù)棧來傳遞參數(shù) . 在參數(shù)傳遞時 , 將所有參數(shù)看做是存放在連續(xù)的 內(nèi)存單元中的字?jǐn)?shù)據(jù)。然后 , 依次將各名字?jǐn)?shù)據(jù) 傳送到寄存器 R0,R1,R2,R3; 如果參數(shù)多于 4 個, 將剩余的字?jǐn)?shù)據(jù)傳送到數(shù)據(jù)棧 中, 入棧的順序與參數(shù)順序相反 , 即最后一個字?jǐn)?shù)據(jù)先入棧 . 按照上面的規(guī)則 , 一 個浮點數(shù)參數(shù)可以通過寄存器傳遞 , 也可以通過數(shù)據(jù)棧
3、傳遞 , 也可能一半通過寄 存器傳遞,另一半通過數(shù)據(jù)棧傳遞 .2. 參數(shù)個數(shù)固定的子程序參數(shù)傳遞規(guī)則 對于參數(shù)個數(shù)固定的子程序 , 參數(shù)傳遞與參數(shù)個數(shù)可變的子程序參數(shù)傳遞規(guī)則不 同, 如果系統(tǒng)包含浮點運算的硬件部件 , 浮點參數(shù)將按照下面的規(guī)則傳遞 : 各個 浮點參數(shù)按順序處理 ; 為每個浮點參數(shù)分配 FP寄存器; 分配的方法是 , 滿足該浮 點參數(shù)需要的且編號最小的一組連續(xù)的 FP寄存器. 第一個整數(shù)參數(shù)通過寄存器 R0R3來傳遞 , 其他參數(shù)通過數(shù)據(jù)棧傳遞 .子程序結(jié)果返回規(guī)則1. 結(jié)果為一個 32 位的整數(shù)時 , 可以通過寄存器 R0返回.2. 結(jié)果為一個 64 位整數(shù)時 , 可以通過
4、R0和 R1返回,依此類推 .3. 結(jié)果為一個浮點數(shù)時 , 可以通過浮點運算部件的寄存器 f0,d0 或者 s0 來返回 .4. 結(jié)果為一個復(fù)合的浮點數(shù)時 , 可以通過寄存器 f0-fN 或者 d0dN來返回 .5. 對于位數(shù)更多的結(jié)果 , 需要通過調(diào)用內(nèi)存來傳遞 本文通過幾個簡單的例子演示了嵌入式開發(fā)中常用的 C 和匯編混合編程的一些 方法和基本的思路,其實最核心的問題就是如何在 C 和匯編之間傳值,剩下的 問題就是各自用自己的方式來進行處理。在嵌入式系統(tǒng)開發(fā)中,目前使用的主要編程語言是 C 和匯編, C+已經(jīng)有相應(yīng)的 編譯器,但是現(xiàn)在使用還是比較少的。在稍大規(guī)模的嵌入式軟件中,例如含有 O
5、S,大部分的代碼都是用 C 編寫的,主要是因為 C 語言的結(jié)構(gòu)比較好,便于人 的理解,而且有大量的支持庫。盡管如此,很多地方還是要用到匯編語言,例 如開機時硬件系統(tǒng)的初始化,包括 CPU狀態(tài)的設(shè)定,中斷的使能,主頻的設(shè) 定,以及 RAM的控制參數(shù)及初始化,一些中斷處理方面也可能涉及匯編。另外 一個使用匯編的地方就是一些對性能非常敏感的代碼塊,這是不能依靠C 編譯器的生成代碼,而要手工編寫匯編,達到優(yōu)化的目的。而且,匯編語言是和 CPU的指令集緊密相連的,作為涉及底層的嵌入式系統(tǒng)開發(fā),熟練對應(yīng)匯編語 言的使用也是必須的。單純的 C或者匯編編程請參考相關(guān)的書籍或者手冊,這里主要討論 C 和匯編的
6、混合編程,包括相互之間的函數(shù)調(diào)用。下面分四種情況來進行討論,暫不涉及 C+。1 在 C 語言中內(nèi)嵌匯編在 C 中內(nèi)嵌的匯編指令包含大部分的 ARM和 Thumb指令,不過其使用與匯編文 件中的指令有些不同,存在一些限制,主要有下面幾個方面:a. 不能直接向 PC寄存器賦值,程序跳轉(zhuǎn)要使用 B 或者 BL指令b. 在使用物理寄存器時,不要使用過于復(fù)雜的 C 表達式,避免物理寄存器沖突c. R 12和 R13可能被編譯器用來存放中間編譯結(jié)果,計算表達式值時可能將 R0 到 R3、R12及 R14用于子程序調(diào)用,因此要避免直接使用這些物理寄存器d. 一般不要直接指定物理寄存器,而讓編譯器進行分配 內(nèi)
7、嵌匯編使用的標(biāo)記是 _asm 或者 asm關(guān)鍵字,用法如下:_asminstructi on; instructioninstructionasm(“ instruction ; instruction”);下面通過一個例子來說明如何在 C 中內(nèi)嵌匯編語言, #includevoid my_strcpy(const char * src , char *dest)char ch;_asm loop:ldrb ch, src, #1 strb ch, dest, #1 cmp ch, #0 bne loopint main()char *a = forget it and move on!;ch
8、ar b64;my_strcpy(a, b); printf(original: %s, a); printf(copyed: %s, b); return 0;在這里 C和匯編之間的值傳遞是用 C 的指針來實現(xiàn)的,因為指針對應(yīng)的是地 址,所以匯編中也可以訪問。2 在匯編中使用 C 定義的全局變量 內(nèi)嵌匯編不用單獨編輯匯編語言文件,比較簡潔,但是有諸多限制,當(dāng)匯編的 代碼較多時一般放在單獨的匯編文件中。這時就需要在匯編和C 之間進行一些數(shù)據(jù)的傳遞,最簡便的辦法就是使用全局變量。/* cfile.c* 定義全局變量,并作為主調(diào)程序*/ #include int gVar_1 = 12;extern asmDouble(void);int
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 合作聯(lián)營協(xié)議合同范本
- 創(chuàng)建積極工作氛圍的年度計劃
- 腦梗死的護理目標(biāo)
- 完善水務(wù)責(zé)任追究機制計劃
- 塑造強大品牌形象的成功秘笈計劃
- 秘書職能的社會認知提升計劃
- 廣東省廉江市實驗學(xué)校高中政治 3.2 樹立正確的消費觀2教學(xué)實錄(必修1)
- 2025年荊州貨運從業(yè)資格證模擬考試題庫
- 2025年高中化學(xué)40個化學(xué)實驗反應(yīng)的動圖太神奇了
- 第3課+中古時期的歐洲高中歷史統(tǒng)編版(2019)必修中外歷史綱要下冊
- 戶外廣告制作安裝合同模板
- 廠房改公寓出租合同范例
- 2025年呼倫貝爾職業(yè)技術(shù)學(xué)院單招職業(yè)適應(yīng)性測試題庫及參考答案
- 污水處理廠SBR工藝的設(shè)計說明
- 城市軌道交通行車組織 課件 項目二任務(wù)六 車站行車組織作業(yè)
- 數(shù)字人直播代運營協(xié)議
- 2025年北方聯(lián)合電力有限責(zé)任公司招聘筆試參考題庫含答案解析
- 2025年八省聯(lián)考數(shù)學(xué)試題(原卷版)
- 基于教學(xué)評一體化理念的高中英語閱讀教學(xué)行動研究
- 高教社馬工程倫理學(xué)(第二版)教學(xué)課件02
- 《榜樣9》觀后感心得體會二
評論
0/150
提交評論