




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、3.4 ATPCS介紹1n完全使用匯編語言來編寫程序會非常的繁瑣,因此通常情況下,只是使用匯編程序來完成少量必須由匯編程序才能完成的工作,而其它工作則由C語言程序來完成。這樣一來,我們實際上就是在進行匯編和C的混合編程,甚至同一個程序的匯編源文件和C源文件是由不同的程序員編寫的。在這種情況下,要想使不同程序員編寫的匯編代碼和C代碼能耦合的很好,則必須有一個雙方都必須遵守的規(guī)則,這就是ATPCS規(guī)則。n為了使單獨編譯的C語言程序和匯編程序之間能夠相互調用,必須為子程序間的調用規(guī)定一定的規(guī)則。ATPCS就是ARM程序和Thumb程序中子程序調用的基本規(guī)則。什么是什么是ATPCS規(guī)則規(guī)則231 AT
2、PCS概述nATPCS規(guī)定了一些子程序間調用的基本規(guī)則。這些基本規(guī)則包括子程序調用過程中寄存器、數(shù)據(jù)棧的使用規(guī)則以及參數(shù)的傳遞規(guī)則。 n這些特定的調用規(guī)則包括:q支持數(shù)據(jù)棧限制檢查的ATPCS。q支持只讀段位置無關位置無關(ROPI)的ATPCS。q支持可讀寫段位置無關(RWPI)的ATPCS。q支持ARM程序和Thumb程序混合使用的ATPCS。q處理浮點運算的ATPCS。41.1 ATPCS概述n使用ADS的C語言編譯器編譯的C語言子程序滿足用戶指定的ATPCS類型。n對于匯編語言程序來說,完全要依賴用戶來保證各子程序滿足選定的ATPCS類型。具體來說,匯編語言子程序必須滿足下面3個條件:
3、q在子程序編寫時必須遵守相應的ATPCS規(guī)則。q數(shù)據(jù)棧的使用要遵守相應的ATPCS規(guī)則。q在匯編編譯器中使用apcs選項。51.2 基本ATPCSn基本ATPCS規(guī)定了在子程序調用時的一些基本規(guī)則,包括下面3方面的內容:q各寄存器的使用規(guī)則及其相應的名稱。q數(shù)據(jù)棧的使用規(guī)則。q參數(shù)傳遞的規(guī)則。61.2.1 寄存器的使用規(guī)則n寄存器的使用必須滿足下面的規(guī)則。q子程序間通過寄存器R0R3來傳遞參數(shù)傳遞參數(shù)。 q在子程序中,使用寄存器R4R11來保存局部變量保存局部變量。 q寄存器R12用作子程序調用中臨時寄存器,記作ip。在子程序之間的連接代碼段中常常有這種使用規(guī)則。q寄存器R13用作數(shù)據(jù)棧指針,
4、記作sp。在子程序中寄存器R13不能用作其他用途。寄存器sp在進入子程序時的值和退出子程序時的值必須相等。q寄存器R14稱為鏈接寄存器,記作lr。 q寄存器R15是程序計數(shù)器,記作pc。它不能用作其他用途。71.2.2 數(shù)據(jù)棧使用規(guī)則n棧指針通??梢灾赶虿煌奈恢?。當棧指針指向棧頂元素(即最后一個入棧的數(shù)據(jù)元素)時,稱為FULL棧;當棧指針指向與棧頂元素(即最后一個入棧的數(shù)據(jù)元素)相鄰的一個可用數(shù)據(jù)單元時,稱為EMPTY棧。n綜合這兩種特點可以有以下4種數(shù)據(jù)棧。qFD Full DescendingqED Empty DescendingqFA Full AscendingqEA Empty
5、Ascending81.2.2 數(shù)據(jù)棧使用規(guī)則n下面是一個數(shù)據(jù)棧的示例(如圖6.1所示)及其相關的名詞。 ?;刂?棧指針 棧的上限地址 已使用的 棧空間 未使用的 ??臻g 棧中數(shù)據(jù) 91.2.2 數(shù)據(jù)棧使用規(guī)則q數(shù)據(jù)棧棧指針(stack pointer) 是指最后一個寫入棧的數(shù)據(jù)的內存地址。q數(shù)據(jù)棧的基地址(stack base) 指數(shù)據(jù)棧的最高地址。由于ATPCS中數(shù)據(jù)棧是FD類型的,實際上數(shù)據(jù)棧中最早入棧的數(shù)據(jù)占據(jù)的內存單元是基地址的下一個內存單元。q數(shù)據(jù)棧界限(stack limit) 是指數(shù)據(jù)棧中可以使用的最低的內存單元的地址。101.2.2 數(shù)據(jù)棧使用規(guī)則(續(xù))q已占用的數(shù)據(jù)棧(u
6、sed stack) 是指數(shù)據(jù)棧的基地址和數(shù)據(jù)棧棧指針之間的區(qū)域。其中包括數(shù)據(jù)棧棧指針對應的內存單元,但不包括數(shù)據(jù)棧的基地址對應的內存單元。q未占用的數(shù)據(jù)棧(unused stack) 是指數(shù)據(jù)棧棧指針和數(shù)據(jù)棧界限之間的區(qū)域。其中包括數(shù)據(jù)棧界限對應的內存單元,但不包括數(shù)據(jù)棧棧指針對應的內存單元。q數(shù)據(jù)棧中的數(shù)據(jù)幀數(shù)據(jù)幀(stack frames) 是指在數(shù)據(jù)棧中,為子程序分配的用來保存寄存器和局部變量的區(qū)域。1.2.3 參數(shù)傳遞規(guī)則n根據(jù)參數(shù)個數(shù)是否固定,可以將子程序分為參數(shù)個數(shù)固定的子程序和參數(shù)個數(shù)可變化的子程序。n這兩種子程序的參數(shù)傳遞規(guī)則是不一樣的。參數(shù)個數(shù)可變子程序參數(shù)傳遞規(guī)則 n對于
7、參數(shù)個數(shù)可變的子程序,當參數(shù)個數(shù)不超過4個時,可以使用寄存器R0R3來傳遞參數(shù);當參數(shù)超過4個時,還可以使用堆棧來傳遞參數(shù)。n在傳遞參數(shù)時,將所有參數(shù)看作是存放在連續(xù)的內存字單元的字數(shù)據(jù)。然后,依次將各字數(shù)據(jù)傳遞到寄存器R0,R1,R2和R3中。如果參數(shù)多于如果參數(shù)多于4個,則將剩余的字數(shù)據(jù)傳遞到堆棧中。個,則將剩余的字數(shù)據(jù)傳遞到堆棧中。入棧的順序與參數(shù)傳遞順序相反,即最后一個字數(shù)據(jù)先入棧。參數(shù)個數(shù)固定子程序參數(shù)傳遞規(guī)則n如果系統(tǒng)不包含浮點運算的硬件部件,浮點參數(shù)會通過相應的規(guī)則轉換成整數(shù)參數(shù)(若沒有浮點參數(shù),此步省略),然后依次將各字數(shù)據(jù)傳送到寄存器R0R3中。如果參數(shù)多于4個,將剩余的字數(shù)
8、據(jù)傳送堆棧中,入棧的順序與參數(shù)順序相反,即最后一個字數(shù)據(jù)先入棧。在參數(shù)傳遞時,將所有參數(shù)看作是存放在連續(xù)的內存字單元的字數(shù)據(jù)。子程序結果返回規(guī)則n子程序中結果返回的規(guī)則如下:q結果為一個32位整數(shù)時,可以通過寄存器R0返回;q結果為一個64位整數(shù)時,可以通過寄存器R0和R1返回;q結果為一個浮點數(shù)時,可以通過浮點運算部件的寄存器f0、d0或s0來返回;q結果為復合型浮點數(shù)(如復數(shù))時,可以通過寄存器f0fn或d0dn來返回;q對于位數(shù)更多的結果,需要通過內存來傳遞。 調用ARM匯編語言子程序n在ARM匯編語言中,子程序調用是通過BL指令完成的BL指令的語法格式如下:qBL subnameq其中
9、,subname是調用的子程序的名稱。nBL指令完成兩個操作:將子程序的返回地址放在LR寄存器中,同時將PC寄存器值設置成目標子程序的第一條指令地址。n在子程序返回時可以通過將LR寄存器的值傳送到PC寄存器中來實現(xiàn)。n子程序調用時通常使用寄存器R0R3來傳遞參數(shù)和返回結果。調用匯編子程序舉例n子程序DOADD完成加法運算,操作數(shù)放在R0和R1寄存器中,結果放在R0中。AREA EXAMPLE2, CODE, READONLYENTRYstartMOV r0, #10 ;R0設置輸入?yún)?shù)MOV r1, #3 ;R1設置輸入?yún)?shù)BLdoadd;調用子程序doadd.doaddADD r0, r0,
10、 r1 ;子程序實體MOVpc,lr ;從子程序中返回ENDint func1(int a, int b, int c, int d) return a+b+c+d;int caller1(void) return func1(1,2,3,4); func1 0 x000000 : ADD r0,r0,r1 0 x000004 : ADD r0,r0,r2 0 x000008 : ADD r0,r0,r3 0 x00000c : MOV pc,lr caller1 0 x000014 : MOV r3,#4 0 x000018 : MOV r2,#3 0 x00001c : MOV r1,#2
11、 0 x000020 : MOV r0,#1 0 x000024 : BL func1參數(shù)傳遞舉例參數(shù)傳遞舉例 (4 parameters)181.3 幾種特定的ATPCSn幾種特定的ATPCS是在遵守基本的ATPCS同時,增加一些規(guī)則以支持一些特定的功能:q支持數(shù)據(jù)棧限制檢查的ATPCS。q支持只讀段位置無關(ROPI)的ATPCS。q支持可讀寫段位置無關(RWPI)的ATPCS。q支持ARM程序和Thumb程序混合使用的ATPCS。q處理浮點運算的ATPCS。191.3.1 支持數(shù)據(jù)棧限制檢查的ATPCS1. 支持數(shù)據(jù)棧限制檢查的ATPCSn基本原理q在進行數(shù)據(jù)棧的檢查時,使用寄存器r10
12、作為數(shù)據(jù)棧限制指針,這是寄存器r10記作sl,用戶在程序中不能控制該寄存器。2. 編寫遵守支持數(shù)據(jù)棧限制檢查的ATPCS的匯編語言程序q對于C/C+,在編譯時指定選項/swst,生產的目標代碼將遵守支持數(shù)據(jù)棧限制檢查的ATPCS。q對于匯編程序,用戶在編寫程序時必須滿足支持數(shù)據(jù)棧限制檢查的ATPCS所要求的規(guī)則,然后在匯編時指定選項/swst。201.3.2 支持只讀段位置無關(ROPI)的ATPCS1. 支持只讀段(代碼或數(shù)據(jù))位置無關(ROPI)的ATPCS的應用場合q程序在運行期間動態(tài)加載到內存中;q在不同的場合,與不同的程序組合后加載到內存中;q在運行期間映射到不同的地址;2. 遵守支
13、持只讀段位置無關(ROPI)的ATPCS的程序設計(ADR/ADRL偽指令)q引用同一個ROPI段中的符號時必須是基于pc的;qROPI段對其它段的引用必須是絕對地址,或基于sb的可寫數(shù)據(jù);211.3.3 支持可讀寫段位置無關(RWPI)的ATPCSn如果一個程序中所有的可讀寫段都是位置無關,則稱該程序遵守支持可讀寫段位置無關(RWPI)的ATPCS。使用支持可讀寫段位置無關(RWPI)的ATPCS可以避免必須將程序存放到特定的位置。這時寄存器R9通常用作靜態(tài)基址寄存器,記作sb。可重入的子程序可以在內存中同時有多個實例,各個實例擁有獨立的可讀寫段。在生成一個新的實例時,sb指向該實例的可讀寫
14、段。RWPI段中的符號的計算方法為:連接器首先計算出該符號相對于RWPI段中某一特定位置的偏移量,通常該特定位置選為RWPI段的第一個字節(jié)出;在程序運行時,將該偏移量加到sb上即可生成該符號的地址。221.3.4 支持ARM程序和Thumb程序混合使用的ATPCSn在編譯或者匯編時,使用/interwork告訴編譯器(或匯編器)生成的目標代碼遵守支持ARM程序和Thumb程序混合使用的ATPCS。它用在以下場合:q程序中存在ARM程序調用Thumb程序的情況。q程序中存在Thumb程序調用ARM程序的情況。q需要連接器來進行ARM狀態(tài)和Thumb狀態(tài)切換的情況。n在下述情況下,使用選項/nointerwork。q程序中不包含Thumb程序。q用戶自己進行ARM狀態(tài)和Thumb狀態(tài)切換。q其中,選項/nointerwork是默認的選項。231.3.5 處理浮點運算的ATPCSnATPCS支持VFP體系和FPA體系兩種不同的浮點硬件體系和指令集。兩種體系對應的代碼不兼容n相應地,ADS的編譯器和匯編器有下面6種與浮點數(shù)相關的選項:qfpu VFPqfpu FPAqfpu softVFPqfpu softVFP+VFPqfpu softFPAqfpu none241.3.5 處理浮點運算的ATPCSn當系統(tǒng)中包含有
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 教研論文 發(fā)表期刊
- 橫向研究課題
- 腫瘤患者四季養(yǎng)生指南
- 新生兒黃疸的護理診斷
- 小學教育答辯課件
- 腫瘤病人整體護理
- 長期透析并發(fā)癥及其管理
- 語文業(yè)務培訓
- 電梯操作人員培訓資料
- 硬化劑護理講座
- 企業(yè)財務內控管理制度
- 2025以色列與伊朗沖突全面解析課件
- (完整版)金融企業(yè)會計練習題
- 新教育 考試試題及答案
- 2025至2030中國心理保健行業(yè)發(fā)展趨勢分析與未來投資戰(zhàn)略咨詢研究報告
- 兒童活動抓魚活動方案
- 天津2025年中國醫(yī)學科學院放射醫(yī)學研究所第一批招聘筆試歷年參考題庫附帶答案詳解
- 安保安全考試試題及答案
- 偉大的《紅樓夢》智慧樹知到期末考試答案章節(jié)答案2024年北京大學
- 安全責任制考核制度及考核表
- 南開中學小卷數(shù)學模擬試卷(共3頁)
評論
0/150
提交評論