ARM體系結(jié)構(gòu)與編程(第2版)第7章_第1頁
ARM體系結(jié)構(gòu)與編程(第2版)第7章_第2頁
ARM體系結(jié)構(gòu)與編程(第2版)第7章_第3頁
ARM體系結(jié)構(gòu)與編程(第2版)第7章_第4頁
ARM體系結(jié)構(gòu)與編程(第2版)第7章_第5頁
已閱讀5頁,還剩8頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、第7章 ARM程序和Thumb程序混合使用ARM體系結(jié)構(gòu)支持體系結(jié)構(gòu)支持ARM程序和程序和Thumb程序混合程序混合使用。本章介紹使用。本章介紹ARM程序和程序和Thumb程序混合使程序混合使用時需要的相關(guān)技術(shù)。用時需要的相關(guān)技術(shù)。27.1 概概 述述1. ARM程序和程序和Thumb程序混合使用的場合程序混合使用的場合強調(diào)速度的場合有一些功能只有ARM程序能夠完成當(dāng)處理器進(jìn)入異常中斷處理程序時,程序狀態(tài)自動切換到ARM狀態(tài)ARM處理器總是從ARM狀態(tài)開始執(zhí)行2. 在編譯或者匯編時使用選項在編譯或者匯編時使用選項apcs/interwork37.2 在匯編語言程序中通過用戶代碼支持在匯編語言程

2、序中通過用戶代碼支持interwork對于對于C/C+源程序而言,只要在編譯時指定源程序而言,只要在編譯時指定-apcs /interwork選項,連接器生成的代碼就遵守支持選項,連接器生成的代碼就遵守支持ARM程序和程序和Thumb程序混合使用的程序混合使用的ATPCS。而對于匯編源程序而言,。而對于匯編源程序而言,用戶必須保證編寫的代碼遵守支持用戶必須保證編寫的代碼遵守支持ARM程序和程序和Thumb程序程序混合使用的混合使用的ATPCS。對于匯編程序來說,可以有兩種方法來實現(xiàn)程序狀態(tài)的切對于匯編程序來說,可以有兩種方法來實現(xiàn)程序狀態(tài)的切換。第一種方法是利用連接器提供的小程序換。第一種方法

3、是利用連接器提供的小程序(veneers)來實來實現(xiàn)程序狀態(tài)的切換,這時用戶可以使用指令現(xiàn)程序狀態(tài)的切換,這時用戶可以使用指令BL來調(diào)用子程來調(diào)用子程序;另一種方法是用戶自己編寫狀態(tài)切換的程序,這種方法序;另一種方法是用戶自己編寫狀態(tài)切換的程序,這種方法編寫的程序需要的代碼更少,運行的速度更快。本節(jié)主要介編寫的程序需要的代碼更少,運行的速度更快。本節(jié)主要介紹第二種方法。紹第二種方法。這里介紹這里介紹ARM中與這個問題相關(guān)的指令、偽操作以及程序中與這個問題相關(guān)的指令、偽操作以及程序設(shè)計。設(shè)計。47.2.1 可以實現(xiàn)程序狀態(tài)切換的指令可以實現(xiàn)程序狀態(tài)切換的指令1. BX指令指令2. 第第1種格式的

4、種格式的BLX指令指令BLX(1)3. 第第2種格式的種格式的BLX指令指令BLX(2)4. LDR、LDM及及POP指令用于程序狀態(tài)的切換指令用于程序狀態(tài)的切換57.2.2 與程序狀態(tài)切換相關(guān)的偽操作與程序狀態(tài)切換相關(guān)的偽操作ARM匯編器既可以處理匯編器既可以處理ARM指令,也可以處理指令,也可以處理Thumb指指令。這時,通過下面兩個偽操作告訴令。這時,通過下面兩個偽操作告訴ARM匯編器將要處理匯編器將要處理的是哪一種指令。的是哪一種指令。CODE16偽操作:告訴匯編編譯器后面的指令序列為16位的Thumb指令。CODE32偽操作:告訴匯編編譯器后面的指令序列為32位的ARM指令。語法格式

5、語法格式CODE16CODE32使用說明使用說明當(dāng)匯編源程序中同時包含ARM指令和Thumb指令時,使用CODE16偽操作告訴匯編編譯器后面的指令序列為16位的Thumb指令;使用CODE32偽操作告訴匯編編譯器后面的指令序列為32位的ARM指令。但是,CODE16偽操作和CODE32偽操作只是告訴編譯器后面指令的類型,該偽操作本身并不進(jìn)行程序狀態(tài)的切換。67.2.3 進(jìn)行狀態(tài)切換的匯編程序?qū)嵗M(jìn)行狀態(tài)切換的匯編程序?qū)嵗旅娼o出一個狀態(tài)切換匯編程序的例子:下面給出一個狀態(tài)切換匯編程序的例子:參見教材P255可以通過下面的步驟來編譯和運行上面的例子??梢酝ㄟ^下面的步驟來編譯和運行上面的例子。(1

6、)用文本編輯器將上述代碼輸入,并保存成文件addreg.s。(2)用asm -g addreg.s命令行匯編該程序。(3)用armlink addreg.o -o addreg命令行連接生成映像文件。(4)用armsd addreg加載該映像文件。(5)通過step單步跟蹤該程序。787.3 在在C/C+程序中實現(xiàn)程序中實現(xiàn)interwork1. 需要考慮需要考慮interwork的場合的場合如果C/C+程序中包含需要返回到另一種程序狀態(tài)的子程序,需要在編譯該C/C+程序時指定選項-apcs /interwork。如果C/C+程序間接地調(diào)用另一種指令系統(tǒng)的子程序,或者C/C+程序中地虛函數(shù)調(diào)用

7、另一種指令系統(tǒng)的子程序時,需要在編譯該C/C+程序時指定-apcs /interwork選項。如果調(diào)用者程序和被調(diào)用的程序是不同指令集的,而被調(diào)用者是non-interwork代碼,這時,不要使用函數(shù)指針來調(diào)用該被調(diào)用程序??偟貋碚f,當(dāng)程序中包含了Thumb指令和ARM指令時,使用函數(shù)指針時,要特別注意。如果在連接時目標(biāo)文件中包含了Thumb程序,這時,連接器會選擇Thumb C/C+庫進(jìn)行連接。通常情況下,如果不能肯定程序中不進(jìn)行程序狀態(tài)切換,使用編譯選項-apcs /interwork來編譯程序。97.3 在在C/C+程序中實現(xiàn)程序中實現(xiàn)interwork2. 編譯選項編譯選項-apcs

8、/interwork的作用的作用當(dāng)C/C+程序中包含了程序狀態(tài)切換時,可以在編譯時指定編譯選項-apcs /interwork,格式如下:tcc -apcs /interworkarmcc -apcs /interworktcpp -apcs /interworkarmcpp -apcs /interwork3. C語言的語言的interwork實例實例參見教材P258107.4 在匯編語言程序中通過連接器支持在匯編語言程序中通過連接器支持interwork7.2節(jié)中,介紹了用戶在匯編程序中如何編寫實現(xiàn)節(jié)中,介紹了用戶在匯編程序中如何編寫實現(xiàn)程序狀態(tài)切換的代碼。本節(jié)介紹利用連接器生成的程序狀態(tài)

9、切換的代碼。本節(jié)介紹利用連接器生成的代碼段實現(xiàn)在匯編程序之間以及匯編程序和代碼段實現(xiàn)在匯編程序之間以及匯編程序和C/C+程序之間實現(xiàn)程序狀態(tài)的切換。程序之間實現(xiàn)程序狀態(tài)的切換。通常,將連接器生成的用于程序狀態(tài)切換的代碼段通常,將連接器生成的用于程序狀態(tài)切換的代碼段稱為稱為veneers。117.4.1 利用利用veneers實現(xiàn)匯編程序間的程序狀態(tài)切實現(xiàn)匯編程序間的程序狀態(tài)切換換利用利用veneers實現(xiàn)匯編程序間的程序狀態(tài)切換時,實現(xiàn)匯編程序間的程序狀態(tài)切換時,可以按照下面的方式來編寫匯編程序。由于利用了可以按照下面的方式來編寫匯編程序。由于利用了連接器生成的連接器生成的veneers,匯編

10、程序的編寫方法與,匯編程序的編寫方法與7.2節(jié)中有所不同。節(jié)中有所不同。調(diào)用者程序(Caller)可以不考慮程序狀態(tài)切換的問題。它使用BL指令來調(diào)用子程序,在編譯時可以指定編譯選項-apcs /interwork,也可以指定編譯選項-apcs /nointerwork。被調(diào)用的子程序(Callee)使用BX指令返回,在編譯時,要指定編譯選項-apcs /interwork。127.4.2 利用利用veneers實現(xiàn)匯編程序與實現(xiàn)匯編程序與C/C+程序間的程序狀態(tài)切換程序間的程序狀態(tài)切換處于一種程序狀態(tài)處于一種程序狀態(tài)(ARM狀態(tài)或者狀態(tài)或者Thumb狀態(tài)狀態(tài))的的C/C+程程序可以調(diào)用處于另一

11、種程序狀態(tài)序可以調(diào)用處于另一種程序狀態(tài)(Thumb狀態(tài)或者狀態(tài)或者ARM狀狀態(tài)態(tài))的匯編語言程序。這時,程序的編寫應(yīng)符合下面的規(guī)的匯編語言程序。這時,程序的編寫應(yīng)符合下面的規(guī)則:則:C/C+程序可以不必關(guān)心程序狀態(tài)的切換,編譯時可以指定編譯選項-apcs /interwork,也可以指定編譯選項-apcs /nointerwork。被調(diào)用的匯編程序使用BX指令返回,并且編譯時必須指定編譯選項-apcs /interwork。處于一種程序狀態(tài)處于一種程序狀態(tài)(ARM狀態(tài)或者狀態(tài)或者Thumb狀態(tài)狀態(tài))的匯編語言的匯編語言程序可以調(diào)用處于另一種程序狀態(tài)程序可以調(diào)用處于另一種程序狀態(tài)(Thumb狀態(tài)或者狀態(tài)或者ARM狀

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論