《嵌入式系統(tǒng)原理與開發(fā)》課件-第2章_第1頁
《嵌入式系統(tǒng)原理與開發(fā)》課件-第2章_第2頁
《嵌入式系統(tǒng)原理與開發(fā)》課件-第2章_第3頁
《嵌入式系統(tǒng)原理與開發(fā)》課件-第2章_第4頁
《嵌入式系統(tǒng)原理與開發(fā)》課件-第2章_第5頁
已閱讀5頁,還剩166頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第2章嵌入式處理器2.1引言

2.2嵌入式處理器概述

2.3ARM處理器基礎(chǔ)

2.4ARM指令系統(tǒng)

2.5ARM程序設(shè)計基礎(chǔ)思考與練習(xí)題

2.1引言

嵌入式處理器是嵌入式系統(tǒng)最核心的部件?,F(xiàn)在幾乎所有的嵌入式系統(tǒng)設(shè)計都是基于處理器的設(shè)計。嵌入式處理器的發(fā)展歷程是多樣的,而SOC將成為嵌入式處理器的發(fā)展方向。現(xiàn)在世界上嵌入式處理器的流行體系結(jié)構(gòu)有30多種,它們根據(jù)各自獨到的設(shè)計分別適應(yīng)于相關(guān)應(yīng)用。RISC結(jié)構(gòu)已經(jīng)被證明是嵌入式處理器最適合的結(jié)構(gòu)。ARM處理器是真正意義上的RISC結(jié)構(gòu)的處理器,同時由于ARM處理器具有處理速度快、功耗低、價格便宜等方面的優(yōu)點,因而得到了廣泛使用。

2.2嵌入式處理器概述

2.2.1嵌入式處理器的分類

根據(jù)功能特點,一般可以將嵌入式處理器分為4類:嵌入式微控制器(MicroControllerUnit)、嵌入式微處理器(MicroProcessorUnit)、嵌入式DSP(DigitalSignalProcessor)和嵌入式片上系統(tǒng)(SystemOnChip)。

1.嵌入式微控制器

嵌入式微控制器又稱單片機,就是將整個計算機系統(tǒng)集成到一塊芯片中。從20世紀70年代末單片機出現(xiàn)到今天,這種8位的芯片在嵌入式系統(tǒng)設(shè)備中仍然有著極其廣泛的應(yīng)用,常見的有8051。嵌入式微控制器將CPU、存儲器(少量的RAM、ROM或兩者都有)和其他外設(shè)封裝在同一片集成電路里,因為其片上外設(shè)資源一般比較豐富,適合于控制,所以稱其為微控制器。

與嵌入式微處理器相比,微控制器的最大特點是單片化,體積大大減小,從而使功耗和成本降低,可靠性提高。

2.嵌入式微處理器

嵌入式微處理器是由通用計算機中的CPU演變而來的。但與計算機處理器不同的是,在實際應(yīng)用中,嵌入式系統(tǒng)是將微處理器裝配在專門設(shè)計的電路板上,只保留與嵌入式應(yīng)用緊密相關(guān)的功能硬件,這樣可以滿足嵌入式系統(tǒng)體積小、功耗低的特殊要求。

與工業(yè)控制計算機相比,嵌入式微處理器具有體積小、重量輕、成本低和可靠性高的優(yōu)點。目前的嵌入式微處理器主要有Am186/88、386EX、PowerPC、ARM、MIPS、Motorola68K等。

3.嵌入式DSP

嵌入式DSP是專門用于信號處理的嵌入式芯片。DSP處理器在系統(tǒng)結(jié)構(gòu)和指令算法方面進行了特殊設(shè)計,使其適合于執(zhí)行DSP算法,因而能夠?qū)﹄x散時間信號進行極快的處理計算,提高了編譯效率和執(zhí)行速度。

4.嵌入式片上系統(tǒng)

片上系統(tǒng)SOC(SystemOnChip)是20世紀90年代后出現(xiàn)的一種新的嵌入式集成器件。在嵌入式系統(tǒng)設(shè)計從以嵌入式微處理器/DSP為核心的“集成電路”級設(shè)計不斷轉(zhuǎn)向“集成系統(tǒng)”級設(shè)計的過程中,人們提出了SOC的概念。SOC追求產(chǎn)品系統(tǒng)的最大包容,已成為提高移動通信、網(wǎng)絡(luò)、信息家電、高速計算、多媒體應(yīng)用以及軍用電子系統(tǒng)性能的核心器件。目前嵌入式系統(tǒng)已進入單片SOC的設(shè)計階段,并開始逐步進入實用化、規(guī)范化階段,集成電路已進入SOC的設(shè)計流程。2.2.2典型的嵌入式處理器

1.ARM處理器

英國先進RISC機器公司(AdvancedRISCMachines,ARM)是全球領(lǐng)先的16/32位RISC微處理器知識產(chǎn)權(quán)(IntellectualProperty,IP)供應(yīng)商。ARM公司是專門從事基于RISC技術(shù)芯片設(shè)計開發(fā)的公司,作為知識產(chǎn)權(quán)供應(yīng)商,本身不直接從事芯片生產(chǎn),而是依靠轉(zhuǎn)讓微處理器、外圍和系統(tǒng)芯片的設(shè)計技術(shù)給合作公司,由合作公司使用這些技術(shù)來生產(chǎn)各具特色的芯片。目前,ARM已成為移動通信、手持設(shè)備、多媒體數(shù)字消費等嵌入式解決方案事實上的標準。ARM公司被半導(dǎo)體及電子業(yè)界評為過去30年全球最有影響力的10家公司之一?;贏RM核嵌入式芯片的典型應(yīng)用主要有:

●汽車產(chǎn)品,如車載娛樂系統(tǒng)、車載安全裝置、自主導(dǎo)航系統(tǒng)等。

●消費娛樂產(chǎn)品,如數(shù)字視頻、Internet終端、交互電視、機頂盒、數(shù)字音頻播放器、數(shù)字音樂板、游戲機等。

●數(shù)字影像產(chǎn)品,如信息家電、數(shù)碼相機、數(shù)字系統(tǒng)打印機等。

●工業(yè)控制產(chǎn)品,如機器人控制、工程機械、冶金控制、化工生產(chǎn)控制等?!窬W(wǎng)絡(luò)產(chǎn)品,如網(wǎng)絡(luò)計算機、PCI網(wǎng)絡(luò)接口卡、ADSL調(diào)制解調(diào)器、路由器等。

●安全產(chǎn)品,如電子付費終端、銀行系統(tǒng)付費終端、智能卡、SIM卡等。

●存儲產(chǎn)品,如PCI到Ultra2SCSI64位RAID控制器、硬盤控制器等。

●無線產(chǎn)品,如手機、PDA,目前85%以上的手機都基于ARM核。

2.PowerPC處理器

PowerPC處理器品種很多,既有通用的處理器,又有嵌入式控制器和內(nèi)核。PowerPC的特點是可伸縮性好、方便靈活,從高端的工作站、服務(wù)器到桌面計算機系統(tǒng),從消費電子到大型通信設(shè)備等各個方面,其應(yīng)用范圍非常廣泛。

目前PowerPC處理器的主頻范圍為25~700MHz,它們的能量消耗、大小、整合程度、價格等差別懸殊,主要產(chǎn)品的芯片型號有PowerPC750、PowerPC405和PowerPC440。

3.MIPS處理器

MIPS是MicroprocessorwithoutInterlockedPipelineStages的縮寫,即“無內(nèi)部互鎖流水級的微處理器”,它是由MIPS技術(shù)公司開發(fā)的。MIPS技術(shù)公司是一家設(shè)計制造高性能、高檔次的嵌入式32位和64位處理器的廠商,在RISC處理器方面占有重要地位。MIPS計算機公司成立于1984年。1992年該公司被SGI收購。到了1998年,MIPS脫離SGI,成為MIPS技術(shù)公司。

4.Sparc處理器

Sparc處理器是由著名的Sun公司自行研發(fā)的微處理器芯片。根據(jù)Sun公司的發(fā)展規(guī)劃,在64位UltraSparc處理器方面,主要有3個系列。首先是可擴展的s系列,主要用于高性能、易擴展的多處理器系統(tǒng)。其次是集成式i系列,它將多種系統(tǒng)功能集成在一個處理器上,為單處理器系統(tǒng)提供了更高的效益。已經(jīng)推出的UltraSparcⅢi系列的頻率達到700MHz,未來的UltraSparcⅣi的頻率將達到1GHz。最后是嵌入式e系列,它為用戶提供理想的性能價格比,其嵌入式應(yīng)用包括瘦客戶機、電纜調(diào)制解調(diào)器和網(wǎng)絡(luò)接口等。Sun公司還將推出主頻分別為300MHz、400MHz、500MHz等版本的處理器。

5.龍芯處理器

龍芯是中科院計算所研發(fā)的具有自主知識產(chǎn)權(quán)的中央處理器(CPU)。從2001年起,龍芯課題組在處理器的研制上取得重大成果,先后研制出龍芯1號、龍芯2號和龍芯2號增強型處理器,目前正進行多核龍芯3號的研制?!褒埿尽钡恼Q生被業(yè)內(nèi)人士譽為民族科技產(chǎn)業(yè)化道路上的一個里程碑。商品化的“龍芯”CPU的研制成功標志著我國已打破國外公司對CPU的壟斷。

2.3ARM處理器基礎(chǔ)

2.3.1ARM簡介

ARM處理器核因其卓越的性能和顯著優(yōu)點,已成為高性能、低功耗、低成本嵌入式處理器核的代名詞,得到了眾多半導(dǎo)體廠家和整機廠商的大力支持。世界上幾乎所有的半導(dǎo)體公司都獲得了ARM公司的授權(quán),并結(jié)合自身的產(chǎn)品發(fā)展,開發(fā)出具有自己特色的、基于ARM核的嵌入式SOC系統(tǒng)芯片。

1985年4月26日,第一個ARM原型在英國劍橋的Acorn計算機有限公司誕生,并成功地運行了測試程序。

20世紀80年代后期,ARM很快開發(fā)成Acorn的臺式機產(chǎn)品,奠定了英國教育界計算機技術(shù)的基礎(chǔ)。

1990年,為廣泛推廣ARM技術(shù)而成立了AdvancedRISCMachinesLimited(簡稱ARMLimited,即ARM公司),新公司由蘋果電腦、Acorn電腦集團和VLSIThechnology合資組建。

20世紀90年代,在ARM公司的精心經(jīng)營下,優(yōu)秀的體系結(jié)構(gòu)設(shè)計以及VLSI器件實現(xiàn)的技術(shù)上的特點使得ARM處理器可與一些復(fù)雜得多的微處理器相抗衡,從而使其應(yīng)用擴展到世界范圍,特別是占據(jù)了低功耗、低成本和高性能的嵌入式系統(tǒng)應(yīng)用領(lǐng)域的領(lǐng)先地位。采用RISC架構(gòu)的ARM微處理器一般具有如下特點:

(1)體積小、低功耗、低成本、高性能。

(2)支持Thumb(16位)/ARM(32位)雙指令集,能很好地兼容8位/16位器件。

(3)大量使用寄存器,指令執(zhí)行速度更快。

(4)大多數(shù)數(shù)據(jù)操作都在寄存器中完成,通過Load/Store結(jié)構(gòu)在內(nèi)存和寄存器之間傳遞數(shù)據(jù)。

(5)尋址方式靈活簡單,執(zhí)行效率高。

(6)指令長度固定。除此之外,ARM系列還采用了一些特別的技術(shù),在保證高性能的同時盡量減小芯片體積、降低芯片功耗。這些技術(shù)包括:

(1)在同一條數(shù)據(jù)處理指令中包含算術(shù)邏輯處理單元,以進行算術(shù)處理和移位處理。

(2)使用地址自動增加(減少)來優(yōu)化程序中的循環(huán)處理。

(3)?使用Load/Store指令批量傳輸數(shù)據(jù),從而提高數(shù)據(jù)傳輸?shù)男省?/p>

(4)所有指令都可以根據(jù)前面的指令執(zhí)行結(jié)果決定是否執(zhí)行,以提高指令執(zhí)行的效率。在過去的10年中,ARM技術(shù)的突出成果表現(xiàn)在以下方面:

(1)引入新穎的“Thumb”壓縮指令格式,降低了小型系統(tǒng)的成本和電源消耗。

(2)?ARM9、ARM10、StrongARM和ARM11等系列處理器的開發(fā),顯著提高了ARM的性能,使得ARM技術(shù)在高端數(shù)字音頻、視頻處理等多媒體產(chǎn)品中的應(yīng)用更加廣泛。

(3)先進的軟件開發(fā)和調(diào)試環(huán)境加快了用戶產(chǎn)品的開發(fā)進程。

(4)廣泛的產(chǎn)業(yè)聯(lián)盟使得基于ARM的嵌入式應(yīng)用領(lǐng)域更加廣闊。

(5)嵌入在復(fù)雜SOC中、基于ARM核的調(diào)試系統(tǒng)代表著當(dāng)今片上調(diào)試技術(shù)的前沿。2.3.2ARM處理器系列

ARM微處理器目前包括下面幾個系列:

●?ARM7系列。

●?ARM9系列。

●?ARM9E系列。

●?ARM10系列。

●?SecurCore系列。

●?Intel的StrongARM。

●?Intel的Xscale。

●?ARM11處理器。

1.ARM7微處理器系列

ARM7微處理器系列具有如下特點:

(1)具有嵌入式ICE-RT邏輯,調(diào)試開發(fā)方便。

(2)極低的功耗,適合對功耗要求較高的應(yīng)用,如便攜式產(chǎn)品。

(3)能夠提供0.9MIPS/MHz的三級流水線結(jié)構(gòu)。

(4)代碼密度高并兼容16位的Thumb指令集。

(5)對操作系統(tǒng)的支持廣泛,包括WindowsCE、Linux、PalmOS等。

(6)指令系統(tǒng)與ARM9系列、ARM9E系列和ARM10系列兼容,便于用戶的產(chǎn)品升級換代。

(7)主頻最高可達130MHz,高速的運算處理能力能勝任絕大多數(shù)的復(fù)雜應(yīng)用。

ARM7系列微處理器的主要應(yīng)用領(lǐng)域為工業(yè)控制、Internet設(shè)備、網(wǎng)絡(luò)和調(diào)制解調(diào)器設(shè)備、移動電話等多種多媒體和嵌入式應(yīng)用。

ARM7系列微處理器的組成如圖2-1所示。圖2-1ARM7系列微處理器的組成

2.ARM9微處理器系列

ARM9系列微處理器是在高性能和低功耗特性方面最佳的硬件宏單元。ARM9將流水線級數(shù)從ARM7的3級增加到5級,并使用了指令與數(shù)據(jù)存儲器分開的哈佛(Harvard)體系結(jié)構(gòu)。在相同工藝條件下,ARM9TDMI的性能近似為ARM7TDMI的2倍。

ARM9主要具有以下特點:

(1)?5級整數(shù)流水線,指令執(zhí)行效率更高。

(2)提供1.1MIPS/MHz的哈佛結(jié)構(gòu)。

(3)支持32位ARM指令集和16位Thumb指令集。

(4)支持32位的高速AMBA總線接口。

(5)全性能的MMU,支持WindowsCE、Linux、PalmOS等多種主流嵌入式操作系統(tǒng)。

(6)?MPU支持實時操作系統(tǒng)。

(7)支持數(shù)據(jù)Cache和指令Cache,具有更高的指令和數(shù)據(jù)處理能力。

ARM9系列微處理器主要應(yīng)用于引擎管理、無線設(shè)備、儀器儀表、安全系統(tǒng)、機頂盒、高端打印機、PDA、網(wǎng)絡(luò)電腦、數(shù)字照相機和數(shù)字攝像機等。

ARM9系列微處理器的組成如圖2-2所示。圖2-2ARM9系列微處理器的組成

3.ARM9E微處理器系列

ARM9E系列微處理器為可綜合處理器,?使用單一的處理器內(nèi)核,提供了微控制器、DSP、Java應(yīng)用系統(tǒng)的解決方案,極大地減少了芯片的面積和系統(tǒng)的復(fù)雜程度。ARM9E系列微處理器提供了增強的DSP處理能力,很適合于那些需要同時使用DSP和微控制器的應(yīng)用場合。

ARM9E系列微處理器的主要特點如下:

(1)支持DSP指令集,適合于需要高速數(shù)字信號處理的場合。

(2)提供1.1MIPS/MHz的5級整數(shù)流水線和哈佛結(jié)構(gòu),指令執(zhí)行效率更高。

(3)支持32位ARM指令集和16位Thumb指令集。

(4)支持32位的高速AMBA總線接口。

(5)支持VFP9浮點運算協(xié)處理器。

(6)全性能的MMU,支持WindowsCE、Linux、PalmOS等多種主流嵌入式操作系統(tǒng)。

(7)?MPU支持實時操作系統(tǒng)。

(8)支持數(shù)據(jù)Cache和指令Cache,具有更高的指令和數(shù)據(jù)處理能力。

(9)主頻最高可達300MHz。

ARM9E系列微處理器的組成如圖2-3所示。圖2-3ARM9E系列微處理器的組成

4.ARM10微處理器系列

ARM10系列微處理器屬于ARM處理器核中的高端處理器核,?具有高性能、低功耗的特點。由于采用了新的體系結(jié)構(gòu),與同等的ARM9器件相比較,在同樣的時鐘頻率下,ARM10的性能提高了近50%。同時,ARM10系列微處理器采用了兩種先進的節(jié)能方式,使其功耗極低。

ARM10系列微處理器的主要特點如下:

(1)支持DSP指令集,適合于需要高速數(shù)字信號處理的場合。

(2)?6級整數(shù)流水線,指令執(zhí)行效率更高。

(3)支持32位ARM指令集和16位Thumb指令集。

(4)支持32位的高速AMBA總線接口。

(5)支持VFP10浮點運算協(xié)處理器。

(6)全性能的MMU,支持WindowsCE、Linux、PalmOS等多種主流嵌入式操作系統(tǒng)。

(7)支持數(shù)據(jù)Cache和指令Cache,具有更高的指令和數(shù)據(jù)處理能力。

(8)主頻最高可達400MHz。

(9)內(nèi)嵌并行讀/寫操作部件。

ARM10系列微處理器的組成如圖2-4所示。圖2-4ARM10系列微處理器的組成

5.SecurCore微處理器系列

SecurCore系列微處理器專為安全需要而設(shè)計,提供了完善的32位RISC技術(shù)的安全解決方案,具有特定的抗篡改(resisttampering)和反工程(reverseengineering)特性。

SecurCore系列微處理器除了具有ARM體系結(jié)構(gòu)的各種主要特點外,在系統(tǒng)安全方面還具有如下特點:

(1)帶有靈活的保護單元,以確保操作系統(tǒng)和應(yīng)用數(shù)據(jù)的安全。

(2)采用軟內(nèi)核技術(shù),防止外部對其進行掃描探測。

(3)可集成用戶自己的安全特性和其他協(xié)處理器。

6.StrongARM微處理器系列

1995年,ARM、Apple和DEC公司聯(lián)合聲明將開發(fā)一種應(yīng)用于PDA的高性能、低功耗、基于ARM體系結(jié)構(gòu)的StrongARM微處理器。當(dāng)時Digital公司的Alpha微處理器是一個工作頻率非常高的64位RISC微處理器。1998年Intel公司接管Digital半導(dǎo)體公司到現(xiàn)在,采用了同樣的技術(shù),并且進一步考慮了功耗效率,設(shè)計了StrongARMSA-110,使其成為高性能嵌入式微處理器設(shè)計的一個里程碑。StrongARMSA-110處理器是采用ARM體系結(jié)構(gòu)、高度集成的32位RISC微處理器,它融合了Intel公司的設(shè)計和處理技術(shù)以及ARM體系結(jié)構(gòu)的電源效率,在軟件上兼容ARMv4體系結(jié)構(gòu),同時又具有Intel的技術(shù)優(yōu)點。

StrongARM的主要特點有:

(1)具有寄存器前推的5級流水線。

(2)除了64位乘法、多寄存器傳送和存儲器/寄存器交換指令外,其他所有普通指令均是單周期指令。

(3)低功耗的偽靜態(tài)操作。

(4)不論處理器的時鐘頻率有多高,乘法器每個周期均計算12位,用1~3個時鐘周期計算兩個3位操作數(shù)的乘法。對于數(shù)字信號處理性能要求很高的應(yīng)用來說,StrongARM的高速乘法器有很大的潛力。

(5)使用系統(tǒng)控制協(xié)處理器來管理片上MMU和Cache資源,并且集成了JTAG邊界掃描測試電路以支持印制板連接測試。

7.Xscale處理器

IntelXscale處理器基于ARMv5TE體系結(jié)構(gòu),是一款全性能、高性價比、低功耗的處理器。它提供了從手持互聯(lián)網(wǎng)設(shè)備到互聯(lián)網(wǎng)基礎(chǔ)設(shè)施產(chǎn)品的全面解決方案,支持16位的Thumb指令和DSP指令集?;赬scale技術(shù)開發(fā)的系列微處理器,由于超低功率與高性能的組合使其適用于廣泛的互聯(lián)網(wǎng)接入設(shè)備,在因特網(wǎng)的各個應(yīng)用環(huán)節(jié)中表現(xiàn)出了令人滿意的處理性能。

Xscale的主要特點有:

(1)數(shù)據(jù)Cache的容量從8KB增加到32KB。

(2)指令Cache的容量從16KB增加到32KB。

(3)微小數(shù)據(jù)Cache的容量從512B增加到2KB。

(4)為了提高指令的執(zhí)行速度,超級流水線結(jié)構(gòu)由5級增至7級。

(5)新增乘法/加法器MAC和特定的DSP型協(xié)處理器CP0,以提高對多媒體技術(shù)的支持。

(6)動態(tài)電源管理,使時鐘頻率可達1GHz,功耗低至1.6W,并能達到1200MIPS。

8.ARM11處理器

ARM11系列微處理器是ARM公司近年推出的新一代RISC處理器,它是ARM新指令架構(gòu)——ARMv6的第一代設(shè)計實現(xiàn)。該系列主要有ARM1136J、ARM1156T2和ARM1176JZ三個內(nèi)核型號,分別針對不同應(yīng)用領(lǐng)域。

ARM11處理器系列可以在使用130nm代工廠技術(shù)、小至2.2mm?×?2mm的芯片面積和低至0.24mW/MHz的前提下達到高達500MHz的性能表現(xiàn)。主要的ARM11處理器有ARM1136JF-S、ARM1156T2F-S、ARM1176JZF-S、ARM11MCORE等多種。2.3.3ARM處理器體系結(jié)構(gòu)

1.ARM體系結(jié)構(gòu)的基本版本

為了精確表述在每個ARM實現(xiàn)中所使用的指令集,迄今為止,人們定義了6種主要版本,分別用版本號1~6表示。這6種版本的ARM指令集體系結(jié)構(gòu)如下。

1)版本v1

版本v1包括下列指令:

(1)基本的數(shù)據(jù)處理指令(不包括乘法指令)。

(2)基于字節(jié)、字和半字的加載/存儲(Load/Store)指令。

(3)分支(Branch)指令,包括設(shè)計用于子程序調(diào)用的分支與鏈接指令。

(4)軟件中斷指令(SWI),用于進行操作系統(tǒng)調(diào)用。

版本v1現(xiàn)已廢棄不用。

2)版本v2

以ARMv2為核的Acorn公司的Archimedes(阿基米德)和A3000批量銷售,它使用了ARM公司現(xiàn)在稱為ARM體系結(jié)構(gòu)版本v2的體系結(jié)構(gòu)。版本v2仍然只支持26位的地址空間,但包含了對32位結(jié)果的乘法指令和協(xié)處理器的支持。

版本v2(2a)在v1的基礎(chǔ)上進行了以下擴展:

(1)增加了乘法和乘加指令。

(2)增加了支持協(xié)處理器的指令。

(3)對于快速中斷(FIQ)模式,提供了兩個以上的影子寄存器。

(4)增加了SWP指令和SWPB指令。

版本v2現(xiàn)已廢棄不用。

3)版本v3

版本v3較以前的版本發(fā)生了如下變化:

(1)地址空間擴展到32位,除了3G外的其他版本均向前兼容,支持26位的地址空間。

(2)分開的當(dāng)前程序狀態(tài)寄存器和程序狀態(tài)保存寄存器。

(3)增加了兩種異常模式,使操作系統(tǒng)代碼可以方便地使用數(shù)據(jù)來訪問中止異常、指令預(yù)取中止異常和未定義指令異常。

(4)增加了兩個指令(MRS和MSR),以允許對新增的CPSR和SPSR寄存器進行讀/寫。

(5)修改了用于從異常(exception)返回的指令的功能。

4)版本v4

與版本v3相比,版本v4作了以下擴展:

(1)增加了有符號、無符號半字和有符號字節(jié)的Load和Store指令。

(2)增加了T變種,處理器可以工作于Thumb狀態(tài),在該狀態(tài)下的指令集是16位的Thumb指令集。

(3)增加了處理器的特權(quán)模式。在該模式下,使用的是用戶模式寄存器。

版本v4不再強制要求與26位地址空間兼容,而且還清楚地指明了哪些指令將會引起未定義指令異常。

5)版本v5

版本v5主要有如下擴展:

(1)提高了T變種中ARM/Thumb之間切換的效率。

(2)讓非T變種和T變種一樣,使用相同的代碼生成技術(shù)。

(3)增加了一個計數(shù)前導(dǎo)零(CountLeadingZeroes,CLZ)指令,該指令允許更有效的整數(shù)除法和中斷優(yōu)先程序。

(4)增加了軟件斷點(BKPT)指令。

(5)為協(xié)處理器設(shè)計提供了更多的可選擇的指令。

(6)對由乘法指令如何設(shè)置條件碼標志位進行了嚴密的定義。

6)版本v6

ARM體系結(jié)構(gòu)版本v6是2001年發(fā)布的。新架構(gòu)版本v6在降低耗電量的同時,強化了圖形處理性能,并通過追加能夠有效進行多媒體處理的SIMD功能,將其對語音及圖像的處理功能提高到了原機型的4倍。版本v6首先在2002年春季發(fā)布的ARM11處理器中使用。除此之外,版本v6還支持多種微處理器內(nèi)核。

表2-1總結(jié)了每個核使用的ARM體系結(jié)構(gòu)的版本。表2-1ARM體系結(jié)構(gòu)的版本

2.ARM體系結(jié)構(gòu)的演變

1)?Thumb指令集(T變種)

Thumb指令集是ARM指令集的重編碼子集。Thumb指令(16位)的長度是ARM指令(32位)長度的一半,因此使用Thumb指令集可得到比ARM指令集更高的代碼密度,這對于降低產(chǎn)品成本是非常有意義的。

與ARM指令集相比,Thumb指令集具有以下兩個限制:

(1)對同樣的工作來說,Thumb代碼通常使用更多的指令。因此,為了充分發(fā)揮時間關(guān)鍵的代碼的性能,最好采用ARM代碼。

(2)?Thumb指令集不包括異常處理所需的指令。因此,至少頂級異常處理需要使用ARM代碼。與Thumb版本v1相比,版本v2具有如下特點:

(1)通過增加新的指令和對已有指令的修改,提高了ARM指令和Thumb指令混合使用時的效率。

(2)增加了軟件中斷指令,更嚴格地定義了Thumb乘法指令對條件碼標志位的影響。

2)長乘法指令(M變種)

ARM指令集的長乘法指令是一種生成64位相乘結(jié)果的乘法指令。與乘法指令相比,M變種增加了以下兩條指令:一條指令完成32位整數(shù)乘以32位整數(shù),生成64位整數(shù)的長乘操作(即32?×?32→64);另一條指令完成32位整數(shù)乘以32位整數(shù),然后再加上一個32位整數(shù),生成64位整數(shù)的長乘加操作(即32?×?32?+?32→64)。

3)增強型DSP指令(E變種)

它們包括:

(1)幾條新的完成16位數(shù)據(jù)乘法和乘加操作的指令。

(2)實現(xiàn)飽和的帶符號算術(shù)運算的加法和減法指令。飽和的帶符號算術(shù)運算的加法和減法是整數(shù)算法的一種形式。這種算法在加減法操作溢出時,結(jié)果并不進行卷繞(WrappingAround),而是使用最大的整數(shù)或最小的負數(shù)來表示。

(3)進行雙字數(shù)據(jù)操作的指令,包括加載寄存器指令LDRD、存儲寄存器指令STRD和協(xié)處理器寄存器傳送指令MCRR與MRRC。

(4)?Cache預(yù)加載指令PLD。

4)?Java加速器Jazelle(J變種)

ARM的Jazelle技術(shù)將Java語言的優(yōu)勢和先進的32位RISC芯片完美地結(jié)合在了一起。Jazelle技術(shù)提供了Java加速功能,使得Java代碼的運行速度比普通Java虛擬機提高了8倍,而功耗卻降低了80%。

Jazelle技術(shù)允許Java應(yīng)用程序、已經(jīng)建立好的操作系統(tǒng)和中間件以及其他應(yīng)用程序在一個單獨的處理器上同時運行。這樣使得一些必須用到協(xié)處理器和雙處理器的場合可以使用單處理器來代替,在提供高性能的同時保證低功耗和低成本。

J變種首先在ARM體系版本vTEJ中使用,用字符J表示J變種。

5)?ARM媒體功能擴展(SIMD變種)

其主要特點包括:

(1)將處理器的音頻和視頻處理性能提高了2~4倍。

(2)可同時進行2個16位操作數(shù)或4個8位操作數(shù)的運算。

(3)提供了小數(shù)算術(shù)運算。

(4)用戶可自定義飽和運算的模式。

(5)可以進行2個16位操作數(shù)的乘加/乘減運算。

(6)?32位乘以32位的小數(shù)乘加運算。

(7)同時8位/16位選擇操作。

ARM的SIMD變種主要應(yīng)用在以下領(lǐng)域:

●?Internet應(yīng)用系統(tǒng)。

●?流式媒體應(yīng)用系統(tǒng)。

●?MPEG4編碼/解碼系統(tǒng)。

●?語音和手寫輸入識別。

●?FFT處理。

●?復(fù)雜的算術(shù)運算。

●?Viterbi處理。

3.ARM/Thumb體系結(jié)構(gòu)版本命名

為了精確命名版本和ARM/Thumb體系版本的變種,將下面的字符串連接起來使用:

(1)基本字符串ARMv。

(2)?ARM指令集的版本號,目前是1~6的數(shù)字字符。

(3)表示變種的字符(除了M變種)。在ARM體系版本v4及以后的版本中,M變種是系統(tǒng)的標準配置,因而字符M通常不單獨列出。

(4)使用字符x表示排除某種功能。

ARM/Thumb體系版本的名稱及其含義是不斷發(fā)展變化的,最新含義可查閱相關(guān)的ARM資料。表2-2列出了目前ARM/Thumb體系版本的標準名稱,這些名稱提供了描述由ARM處理器實現(xiàn)精確指令集的最簡短的方法。表2-2目前有效的ARM/Thumb體系版本2.3.4ARM處理器應(yīng)用選型

1.ARM微處理器內(nèi)核的選擇

ARM微處理器包含一系列的內(nèi)核結(jié)構(gòu),以適應(yīng)不同的應(yīng)用領(lǐng)域,用戶如果希望使用WinCE或標準Linux等操作系統(tǒng)來減少軟件開發(fā)時間,就需要選擇ARM7?20T以上帶有MMU(MemoryManagementUnit)功能的ARM芯片。ARM7?20T、ARM9?20T、ARM9?22T、ARM9?46T、StrongARM都帶有MMU功能,而ARM7?TDMI則沒有MMU,不支持WindowsCE和標準Linux,但目前有μC/OS等不需要MMU支持的操作系統(tǒng)可運行于ARM7?TDMI硬件平臺之上。事實上,μC/OS已經(jīng)成功移植到多種不帶MMU的微處理器平臺上,并在穩(wěn)定性和其他方面都表現(xiàn)尚佳。

2.系統(tǒng)的工作頻率

系統(tǒng)的工作頻率在很大程度上決定了ARM微處理器的處理能力。ARM7系列微處理器的典型處理速度為0.9MIPS/MHz,常見的ARM7芯片系統(tǒng)主時鐘為20~133MHz,ARM9系列微處理器的典型處理速度為1.1MIPS/MHz,常見的ARM9的系統(tǒng)主時鐘頻率為100~233MHz,ARM10最高可以達到700?MHz。不同芯片對時鐘的處理不同,有的芯片只需要一個主時鐘頻率,有的芯片內(nèi)部的時鐘控制器可以分別為ARM核和USB、UART、DSP、音頻等功能部件提供不同頻率的時鐘。

3.芯片內(nèi)存儲器的容量

大多數(shù)ARM微處理器的片內(nèi)存儲器的容量都不太大,需要用戶在設(shè)計系統(tǒng)時外擴存儲器,但也有部分芯片具有相對較大的片內(nèi)存儲空間,如ATMEL的AT91F40162就具有高達2MB的片內(nèi)程序存儲空間。用戶在設(shè)計時可考慮選用這種類型,以簡化系統(tǒng)的設(shè)計。

4.片內(nèi)外圍電路的選擇

除ARM微處理器核以外,幾乎所有的ARM芯片均根據(jù)各自不同的應(yīng)用領(lǐng)域,擴展了相關(guān)的功能模塊,并集成在芯片之中,我們稱之為片內(nèi)外圍電路,如USB接口、IIS接口、LCD控制器、鍵盤接口、RTC、ADC和DAC、DSP協(xié)處理器等。設(shè)計者應(yīng)分析系統(tǒng)的需求,盡可能采用片內(nèi)外圍電路完成所需的功能,這樣既可簡化系統(tǒng)的設(shè)計,又可提高系統(tǒng)的可靠性。 2.4ARM指令系統(tǒng)

2.4.1ARM編程模型

1.流水線

流水線技術(shù)是現(xiàn)代微處理器普遍采用的一種技術(shù),它可以使得幾條指令并行執(zhí)行,因此可以大大提高處理器的運行效率。下面對ARM7的三級流水線作簡要介紹。

三級流水線分為以下三級:

(1)取指:從程序存儲器中讀取指令,放入流水線中。

(2)譯碼:操作碼和操作數(shù)被譯碼,決定執(zhí)行什么功能,為下一個時鐘周期準備數(shù)據(jù)路徑所需要的控制信號。

(3)執(zhí)行:執(zhí)行已譯碼的指令。具體過程是,指令進入數(shù)據(jù)路徑,寄存器堆被讀取,操作數(shù)被移位,ALU進行相應(yīng)的運算,將結(jié)果寫到目的寄存器,同時ALU運算的結(jié)果還會根據(jù)指令的要求改變寄存器的條件位。

在正常情況下,每條指令都被劃分成3個時鐘周期來完成,即取指、譯碼和執(zhí)行。但對于流水線來講,可以使得每個時鐘周期完成一條指令,即每個周期流水線都有一條指令的吞吐量(Throughput)。通常將這種情況稱為單周期指令的三級流水線操作,如圖2-5所示。圖2-5ARM單周期指令的多級流水線操作然而并不是在所有情況下都能保持一個周期一條指令的完成率。首先遇到的一種情況就是多周期指令進入流水線,這將造成流水線間斷。

下面以圖2-6所示的例子來說明。圖2-6ARM多周期指令的多級流水線操作分支指令是造成流水線延時的另一種情況。下面以圖2-7所示的例子來說明。圖2-7ARM分支指令的流水線操作

2.?dāng)?shù)據(jù)類型

ARM處理器支持以下數(shù)據(jù)類型:

●?Byte:字節(jié),8位。

●?Halfword:半字,16位(半字必須與2字節(jié)邊界對準)。

●?Word:字,32位(字必須與4字節(jié)邊界對準)。

這些類型的數(shù)據(jù)在存儲器中的組織如圖2-8所示。圖2-8數(shù)據(jù)存儲圖

3.處理器模式

ARM體系結(jié)構(gòu)支持7種處理器模式,如表2-3所示。表2-3ARM處理器模式

4.處理器工作狀態(tài)

ARM處理器具有兩種特殊的工作狀態(tài):

(1)?ARM狀態(tài):32位,執(zhí)行字對準的ARM指令。

(2)?Thumb狀態(tài):16位,執(zhí)行半字對準的Thumb指令。

ARM處理器可以在兩種工作狀態(tài)之間切換:

Thumb狀態(tài):當(dāng)操作數(shù)寄存器的狀態(tài)位?[0]?為1時,執(zhí)行BX指令將進入Thumb狀態(tài)。如果ARM處理器在Thumb狀態(tài)進入異常,則異常處理返回時,自動切換到Thumb狀態(tài)。

ARM狀態(tài):當(dāng)操作數(shù)寄存器的狀態(tài)位?[0]?為0時,執(zhí)行BX指令將進入ARM狀態(tài)。當(dāng)ARM處理器進行異常處理時,如果把PC指針放入異常模式鏈接寄存器中,則程序從異常向量地址開始執(zhí)行,也可以使處理器進入ARM狀態(tài)。

5.寄存器組織

ARM處理器共有37個寄存器:31個通用寄存器,32位,含程序計數(shù)器PC;6個狀態(tài)寄存器,32位,只使用了其中的12位。

雖然這些寄存器都參與指令的執(zhí)行,但在指令執(zhí)行前后只有可見寄存器的值才具有意義。因此,我們僅關(guān)注ARM處理器的可見寄存器,如圖2-9所示。圖2-9ARM狀態(tài)下的寄存器組織當(dāng)編寫用戶程序時,37個寄存器中只有通用寄存器r0~r14、程序計數(shù)器PC(r15)和當(dāng)前程序狀態(tài)寄存器(CPSR)需要考慮,其余寄存器僅用于系統(tǒng)級編程和異常處理(如中斷)。

(1)不分組寄存器r0~r7。不分組意味著在所有處理器模式下,r0~r7都可被同樣訪問,沒有體系結(jié)構(gòu)所隱含的特殊用途。

(2)分組寄存器r8~r14。分組意味著r8~r14的訪問與當(dāng)前處理器的模式相關(guān)。如果要訪問r8~r14,而不依賴于當(dāng)前處理器的模式,就必須使用規(guī)定的寄存器名稱。名稱的形式為:r8_<mode>~r14_<mode>。從ARM寄存器組織的圖中可以看出r8~r12各有兩組物理寄存器:一組為FIQ模式,另一組為FIQ以外的模式。寄存器r8~r12沒有指定特殊用途,而使用r8_fiq~r12_fiq則允許快速中斷。

寄存器r13和r14的用途比較特殊:

①r13通常用作堆棧指針SP,被初始化成指向異常模式分配的堆棧。處理異常時,在程序入口處將異常處理程序用到的其他寄存器的值壓入堆棧,返回時重新將這些值加載到寄存器中。這樣就可以保證出現(xiàn)異常時程序狀態(tài)仍可靠。

②r14通常用作子程序鏈接寄存器LR。當(dāng)執(zhí)行分支指令BL時,r15的內(nèi)容拷貝到r14中,從而成為子程序調(diào)用后的返回地址。采用這種方式可以類似地用來處理異常的返回。

(3)程序計數(shù)器r15。寄存器r15通常被用作程序計數(shù)器PC。在ARM狀態(tài)下,由于ARM指令始終是字對準的,因此PC的值保存在位[31:2],而位[1:0]為0;在Thumb狀態(tài)下,由于Thumb指令是半字對準的,因此PC的值保存在位[31:1],而位[0]為0。

①讀程序計數(shù)器PC:用指令讀出的r15的值為指令地址加8個字節(jié)。讀PC主要用于快速對臨近的指令和數(shù)據(jù)進行位置無關(guān)的尋址。

②寫程序計數(shù)器PC:寫r15的結(jié)果是將寫到r15的值作為指令地址,并根據(jù)這個地址跳轉(zhuǎn)。

(4)當(dāng)前程序狀態(tài)寄存器(CPSR)。當(dāng)前程序狀態(tài)寄存器在用戶級編程時用于存儲條件碼。例如,使用CPSR的相應(yīng)位來記錄比較操作的結(jié)果和控制轉(zhuǎn)移的條件。此外,CPSR

還包含了中斷禁止位、當(dāng)前處理器模式以及其他的一些狀態(tài)和控制信息。同時,為了在異常出現(xiàn)時能夠保存CPSR的狀態(tài),每種異常模式都設(shè)置了一個程序狀態(tài)保存寄存器(SPSR)。

顯然,CPSR和SPSR具有相同的格式,如圖2-10所示。圖2-10PSR的格式

(5)?Thumb狀態(tài)的寄存器集。?Thumb狀態(tài)下的寄存器集是ARM狀態(tài)下寄存器集的子集。具體情況如圖2-11所示。圖2-11Thumb狀態(tài)下的寄存器組織

Thumb狀態(tài)寄存器與ARM狀態(tài)寄存器的映射關(guān)系如圖2-12所示。圖2-12Thumb狀態(tài)寄存器到ARM寄存器的映射

6.異常

異常(exception)是指由內(nèi)部或外部源產(chǎn)生、需要處理器處理的一個事件。

ARM支持7種類型的異常。對于每種異常,處理器將強制從異常對應(yīng)的某個固定地址開始執(zhí)行程序。這些固定地址稱為異常向量。

異常出現(xiàn)時,相應(yīng)異常模式下的r14和SPSR用來保存當(dāng)前狀態(tài),其過程可描述如下:r14_<exception_mode>=returnlink

SPSR_<exception_mode>=CPSR

CPSR[4:0]=exceptionmodenumber

CPSR[5]=0 /*使處理器在ARM狀態(tài)下執(zhí)行*/

CPSR[7]=1 /*禁止新的IRQ中斷*/

If<exception_mode>==ResetorFIQthen

CPSR[6]=1 /*禁止新的FIQ中斷*/

PC=exceptionvectoraddress

7.存儲器和存儲器映射I/O

1)地址空間

ARM體系結(jié)構(gòu)使用232個8位字節(jié)的單一、線性地址空間,字節(jié)地址的范圍為0~232-1;也可以將地址空間看做由230個32位的字組成,字地址可被4整除,且按字對準,例如以A為字對準地址的字地址由A、A+1、A+2、A+3共4個字節(jié)組成。在ARM體系結(jié)構(gòu)v4以上版本中,也可以將地址空間看做由231個16位的半字組成,半字地址可被2整除,且按半字對準,例如以A為字對準地址的半字地址由A、A+1共2個字節(jié)組成。在程序中,通常使用普通的整數(shù)指令來計算地址。在指令按照正常順序執(zhí)行的情況下,下一條指令的地址?=?當(dāng)前指令的地址?+?4。對于分支指令,目的地址?=?當(dāng)前指令的地址?+?8+偏移量。如果計算結(jié)果在地址空間中向上或向下溢出,則指令會出現(xiàn)環(huán)繞,其后果無法預(yù)知,因此地址轉(zhuǎn)移不應(yīng)超出0x00000000~0xFFFFFFFF的范圍。

2)存儲器格式

存儲器格式是指字、半字、字節(jié)在存儲器中存放的方式,也反映了存儲器中字、半字、字節(jié)之間的映射關(guān)系。

存儲器格式包括小端和大端兩種格式,如圖2-13所示。圖2-13大、小端存儲格式在小端存儲格式下,字或半字地址的低字節(jié)(對準字節(jié))存放在低地址;在大端存儲格式下,字或半字地址的低字節(jié)(對準字節(jié))存放在高地址。下面舉例說明大、小端存儲格式對程序的影響,如圖2-14所示。圖2-14端配置

3)存儲器訪問對準

對于非對準的數(shù)據(jù)訪問,體系結(jié)構(gòu)可能定義成以下行為之一:

(1)不可預(yù)知。

(2)忽略使訪問非對準的低地址位。

(3)忽略使訪問非對準的低地址位,但使用這些位控制加載數(shù)據(jù)的循環(huán)移位(適用于LDR和SWP指令)。

4)存儲器映射I/O

ARM系統(tǒng)實現(xiàn)I/O功能的標準方法是使用存儲器映射I/O。這種方法使用特定的存儲器地址,對這些地址進行加載和存儲,即可完成I/O操作。通常,對存儲器映射I/O地址加載對應(yīng)輸入,對存儲器映射I/O地址存儲對應(yīng)輸出。另外,加載和存儲也可執(zhí)行控制功能,替代或附加到正常的I/O操作上。

由于需要映射I/O行為,因此這些特定的存儲地址與正常的存儲地址的使用方式有所差異。通常需要將存儲器映射I/O的位置標識為非高速緩存的(uncachable)和非緩存的(unbufferable),目的是避免改變訪問模式的數(shù)目、類型、順序或定時。2.4.2ARM尋址方式

尋址方式是指根據(jù)指令給出的地址碼尋找真實操作數(shù)地址的方式。

1.寄存器尋址

指令地址碼給出寄存器的編號,寄存器中的內(nèi)容為操作數(shù)。例:

ADDR0,R1,R2 ;?R0←R1+R2

這條指令的含義是將寄存器R1和R2的內(nèi)容相加,結(jié)果放入寄存器R0中。注意寫操作數(shù)的順序為:第1個寄存器R0為結(jié)果寄存器,第2個寄存器R1為第一操作數(shù)寄存器,第3個寄存器R2為第二操作數(shù)寄存器。

2.立即尋址

指令操作碼后的地址碼是立即數(shù),即操作數(shù)本身。例:

ADDR3,R3,#1 ;?R3←R3+1

ANDR8,R7,#&FF ;?R8←R7[7:0]

立即數(shù)的表示以“#”為前綴,十六進制的立即數(shù)在“#”后面加“&”符號。

第1條指令將R3的內(nèi)容加1,結(jié)果放入R3中;第2條指令將R7的32位值與立即數(shù)0FFH邏輯與,結(jié)果是將R7的低8位放入R8中。

3.寄存器移位尋址

寄存器移位尋址是ARM指令集特有的尋址方式。?第2個操作數(shù)與第1個操作數(shù)結(jié)合之前,選擇進行移位操作。例:

ADDR3,R2,R1,LSL#3 ;?R3←R2+8×R1

寄存器R1的內(nèi)容邏輯左移3位,再與寄存器R2的內(nèi)容相加,結(jié)果放入R3中。

可采取的移位操作包括:

LSL:邏輯左移(LogicalShiftLeft)。寄存器中字的低端空出的位補0。

LSR:邏輯右移(LogicalShiftRight)。寄存器中字的高端空出的位補0。

ASR:算術(shù)右移(ArithmeticShiftRight)。算術(shù)移位的對象是帶符號數(shù)。在移位過程中必須保持操作數(shù)的符號不變。若源操作數(shù)為正數(shù),則字的高端空出的位補0;若源操作數(shù)為負數(shù),則字的高端空出的位補1。

ROR:循環(huán)右移(ROtateRight)。從字的最低端移出的位填入字的高端空出的位。

RRX:擴展為1的循環(huán)右移(RotateRighteXtendedby1place)。操作數(shù)右移1位,空位(位[31])用“C”標志填充。

移位操作過程如圖2-15所示。圖2-15移位操作過程

4.寄存器間接尋址

指令地址碼給出寄存器的編號,寄存器為地址指針,存放操作數(shù)的有效地址。例:

LDRR0,[R1] ;?R0←[R1]

STRR0,[R1] ;?R0→[R1]

第1條指令將寄存器R1所指向的地址單元的內(nèi)容加載到寄存器R0中。第2條指令將寄存器R0的內(nèi)容存入寄存器R1指向的地址單元。

5.基址尋址

基址尋址是將基址寄存器的內(nèi)容與指令中給出的位移量相加,形成操作數(shù)有效地址。基址尋址用于訪問基址附近的存儲單元,包括基址加偏移量尋址和基址加索引尋址,可以將寄存器間接尋址看作是位移量為0的基址加偏移量尋址。

1)基址加偏移量尋址

基址加偏移量尋址中的偏移量最大為4KB,可分為前索引尋址和后索引尋址。

2)基址加索引尋址

基址加索引尋址是指先指定一個基址寄存器,再指定另一個寄存器(稱為索引),其值作為位移加到基址上形成存儲器地址。例:

LDRR0,[R1,R2] ;?R0←[R1+R2]

這條指令是將R1和R2的內(nèi)容相加得到操作數(shù)的地址,再將此地址單元的內(nèi)容加載到R0。

6.多寄存器尋址

多寄存器尋址是指一次可以傳送多個寄存器的值,允許一條指令一次傳送16個寄存器的任何子集,包括16個寄存器。例:

LDMIAR1,{R0,R2,R5} ;?R0←[R1]

;?R2←[R1+4]

;?R5←[R1+8]

由于傳送的數(shù)據(jù)總是32位的字,因此基址寄存器R1應(yīng)當(dāng)字對準。這條指令是將R1指向的連續(xù)存儲單元的內(nèi)容送到寄存器R0、R2和R5。

7.堆棧尋址

堆棧是一種按照特定順序進行存取的存儲區(qū)。這種特定的順序是指“后進先出(LIFO)”或“先進后出(FILO)”。使用堆棧時需要使用一個專門的寄存器作為堆棧指針,堆棧指針所指定的存儲單元就是堆棧的棧頂。如果堆棧指針指向最后壓入堆棧的有效數(shù)據(jù)項,就稱為滿堆棧(fullstack);如果堆棧指針指向下一個數(shù)據(jù)項放入的空位置,就稱為空堆棧(emptystack)。另外,根據(jù)堆棧存儲區(qū)地址增長的方向,可將堆棧分為遞增堆棧(ascendingstack)和遞減堆棧(descendingstack)。

以上表示遞增、遞減、滿、空的堆棧的各種組合就產(chǎn)生了4種堆棧類型。ARM支持所有這4種類型的堆棧,即滿遞增、空遞增、滿遞減、空遞減。

8.塊拷貝尋址

從堆棧的角度來看,多寄存器傳送指令是把一塊數(shù)據(jù)從存儲器的某一個位置拷貝到另一位置。從塊拷貝的角度來看,具體使用哪條指令還要基于數(shù)據(jù)存儲在基址寄存器地址之上還是之下,地址在存儲第一個值之前或之后增加或減少。這兩種角度的映射均取決于執(zhí)行加載操作還是存儲操作。表2-4列出了多寄存器加載和存儲指令映射。表2-4多寄存器加載和存儲指令映射

9.相對尋址

可以將相對尋址看做是以程序計數(shù)器PC為基址的一種基址尋址方式。指令的地址碼作為位移量,與PC相加得到操作數(shù)的有效地址。位移量指出了操作數(shù)與當(dāng)前指令之間的相對位置。2.4.3ARM指令集

1.ARM指令集編碼

ARM指令集采用32位二進制編碼方式,其大部分指令編碼中定義了第一操作數(shù)、第二操作數(shù)、目的操作數(shù)、條件標志影響位以及每條指令所對應(yīng)的不同功能實現(xiàn)的二進制位。每條ARM指令都具有不同的編碼方式,與不同的指令功能相對應(yīng),如圖2-16所示。圖2-16ARM指令集編碼

2.條件執(zhí)行

條件執(zhí)行是指只有在當(dāng)前程序狀態(tài)寄存器CPSR中的條件碼標志滿足指定的條件時,帶條件碼的指令才能執(zhí)行。條件轉(zhuǎn)移是絕大多數(shù)指令集的標準特征,但ARM指令集將條件執(zhí)行擴展到所有指令,包括監(jiān)控調(diào)用和協(xié)處理器指令。條件域占據(jù)32個指令域的高4位,如圖2-17所示。圖2-17ARM的條件代碼域條件域共有16個值,即16個條件碼,如表2-5所示,其中AL(Always)條件是缺省條件。表2-5條件碼

3.ARM指令格式

ARM指令集是Load/Store型的,只能通過Load/Store指令實現(xiàn)對存儲器的訪問,其他類型的指令都基于寄存器完成。

ARM指令使用的基本格式如下:

<opcode>{<cond>}{S} <Rd>,<Rn>{,<operand2>}

4.ARM存儲器訪問指令

1)?LDR、STR

LDR和STR為單一數(shù)據(jù)傳送指令,可傳送字和無符號字節(jié)、半字和帶符號字節(jié)以及雙字。

(1)字和無符號字節(jié)。

句法:

op{cond}{B}{T}Rd,[Rn] ;?零偏移

op{cond}{B}Rd,[Rn,Flexoffset]{!} ;?前索引偏移

op{cond}{B}Rd,label ;?程序相對偏移

op{cond}{B}{T}Rd,[Rn],Flexoffset ;?后索引偏移

(2)半字和帶符號字節(jié)。

句法:

op{cond}typeRd,[Rn] ;?零偏移

op{cond}typeRd,[Rn,offset]{!} ;?前索引偏移

op{cond}typeRd,label ;?程序相對偏移

op{cond}typeRd,[Rn],offset ;?后索引偏移

(3)雙字。

句法:

op{cond}DRd,[Rn] ;?零偏移

op{cond}DRd,[Rn,offset]{!} ;?前索引偏移

op{cond}DRd,label ;?程序相對偏移

op{cond}DRd,[Rn],offset ;?后索引偏移

2)?LDM、STM

句法:

op{cond}modeRn{!},reglist{^}

3)?PLD

句法:

PLD[Rn{Flexoffset}]

4)?SWP

句法:

SWP{cond}{B}Rd,Rm,[Rn]

5.ARM數(shù)據(jù)處理指令

ARM數(shù)據(jù)處理指令的特點包括:

(1)操作數(shù)為32位,是來自于寄存器或定義的立即數(shù)。對于操作數(shù)可進行符號擴展和零擴展。

(2)處理結(jié)果除了長乘法指令為64位之外,其余均為32位,存放在寄存器中。

(3)大多數(shù)ARM通用數(shù)據(jù)處理指令都有一個靈活的第二操作數(shù)(flexiblesecondoperand)。第二操作數(shù)operand2可以是立即數(shù)形式或寄存器形式。移位操作包括:

ASR:算術(shù)右移,即將寄存器內(nèi)容除以2n,寄存器內(nèi)容看做帶符號的補碼整數(shù)。

LSR:邏輯右移,即將寄存器內(nèi)容除以2n,寄存器內(nèi)容看做無符號整數(shù)。

LSL:邏輯左移,即將寄存器內(nèi)容乘以2n,寄存器內(nèi)容看做無符號整數(shù)。

ROR:循環(huán)右移。

RRX:帶擴展的循環(huán)右移。將寄存器內(nèi)容循環(huán)右移1位,進位標志拷貝到位[31]。

移位操作過程如圖2-18所示。圖2-18移位操作過程

ARM數(shù)據(jù)處理指令可以完成的功能包括算術(shù)運算、邏輯運算、數(shù)據(jù)傳送、比較、測試、乘法、CLZ等。

1)算術(shù)運算指令——ADD、SUB、RSB、ADC、SBC、RSC

句法:

op{cond}{S}Rd,Rn,Operand2

2)邏輯運算指令——AND、ORR、EOR、BIC

句法:

op{cond}{S}Rd,Rn,Operand2

3)數(shù)據(jù)傳送指令——MOV、MVN

句法:

op{cond}{S}Rd,Operand2

4)比較指令——CMP、CMN

句法:

op{cond}{S}Rd,Operand2

5)測試指令——TST、TEQ

句法:

op{cond}{S}Rd,Operand2

6)乘法指令——MUL、MLA

句法:

MUL{cond}{S}Rd,Rm,Rs

MLA{cond}{S}Rd,Rm,Rs,Rn

7)?CLZ

句法:

CLZ{cond}Rd,Rm

6.ARM分支指令

1)?B、BL

句法:

B {cond} label

BL {cond} label

2)?BX

句法:

BX {cond} Rm

3)?BLX

句法:

BLX?{cond}?Rm

7.ARM協(xié)處理器指令

ARM支持16個協(xié)處理器,如用于控制片上功能(如cache、MMU)的系統(tǒng)協(xié)處理器、浮點協(xié)處理器以及其他一些專用的協(xié)處理器。每個協(xié)處理器均忽略ARM處理器和其他協(xié)處理器的指令。如果協(xié)處理器沒有接受ARM的協(xié)處理器指令,則ARM將產(chǎn)生未定義指令中止的陷阱,用來實現(xiàn)“協(xié)處理器丟失”的軟件仿真。

ARM用于支持協(xié)處理器的指令主要用于:初始化協(xié)處理器的數(shù)據(jù)操作;在ARM寄存器和協(xié)處理器之間傳送數(shù)據(jù);在協(xié)處理器的寄存器和內(nèi)存單元之間傳送數(shù)據(jù)。

1)協(xié)處理器的數(shù)據(jù)操作指令——CDP

句法:

CDP {cond} coproc,opcode1,CRd,CRn,CRm{,opcode2}

2)協(xié)處理器的數(shù)據(jù)傳送指令——LDC

句法:

LDC?{cond}{L}coproc,CRd,[Rn] ;?零偏移

LDC?{cond}{L}coproc,CRd,[Rn,#{-}offset]{!} ;?前索引偏移

LDC?{cond}{L}coproc,CRd,[Rn],#{-}offset ;?后索引偏移

3)協(xié)處理器的寄存器傳送指令——MCR、MRC

句法:

MCR?{cond}coproc,opcode1,Rd,CRn,CRm,{,opcode2}

MRC?{cond}coproc,opcode1,Rd,CRn,CRm,{,opcode2}

8.ARM雜項指令

為方便起見,本書將軟件中斷、斷點以及PSR(程序狀態(tài)寄存器)操作的指令歸納為ARM雜項指令。

1)軟件中斷指令——SWI

句法:

SWI {cond}immed_24

2)斷點指令——BKPT

句法:

BKPT?immed_16

3)?PSR操作指令——MRS、MSR

句法:

MRS {cond}Rd,psr

MSR {cond}psr_fields,#immed_8r

MSR {cond}psr_fields,Rm

9.ARM偽指令

顧名思義,偽指令并不是真正的指令。偽指令在編譯器對程序進行匯編處理時被替換成相應(yīng)的指令序列。使用偽指令的目的在于簡化程序編寫。

ARM偽指令包括ADR、ADRL、LDR和NOP。

1)?ADR、ADRL、LDR

句法:

ADR{cond}register,expr

ADRL{cond}register,expr

LDR{cond}register,=[expr|label-expr]2.4.4Thumb指令集

1.Thumb指令集概述

Thumb指令集是ARM指令集壓縮形式的子集。由于Thumb指令是16位的,因此使用Thumb指令可以提高代碼密度。但是Thumb指令集不是一個完整的體系結(jié)構(gòu),只能支持通用功能,因此必要時還需借助于完善的ARM指令集。

所有的Thumb指令都有相對應(yīng)的ARM指令,Thumb編程模型也對應(yīng)ARM編程模型。在ARM指令流水線中要實現(xiàn)Thumb指令,必須先對其進行動態(tài)解壓縮,然后再將其作為標準ARM指令執(zhí)行。

ARM開發(fā)工具完全支持Thumb指令,應(yīng)用程序可以靈活地將ARM和Thumb子程序混合編程,有利于在例程基礎(chǔ)上提高性能或代碼密度。

1)?Thumb指令集編碼

Thumb指令集編碼如圖2-19所示。圖2-19Thumb指令集編碼

2)?Thumb編程模型

Thumb指令集只能對限定的ARM寄存器進行操作。Thumb編程模型如圖2-20所示。圖2-20Thumb編程模型

3)?Thumb狀態(tài)切換

CPSR的T位決定ARM處理器執(zhí)行的是ARM指令流還是Thumb指令流。若T置1,則認為是Thumb指令流;若T置0,則認為是ARM指令流。

(1)進入Thumb狀態(tài)。系統(tǒng)復(fù)位后,處理器處于ARM狀態(tài)。執(zhí)行BX指令,將轉(zhuǎn)移地址寄存器的位[0]置1,其他位放入PC,即可進入Thumb狀態(tài)。由于BX指令會引起轉(zhuǎn)移,因此流水線被刷新,已在流水線上的指令將被丟棄。

(2)退出Thumb狀態(tài)。退出Thumb狀態(tài)的方法與進入Thumb狀態(tài)的方法相對應(yīng),即使用BX指令,將轉(zhuǎn)移地址寄存器的位[1:0]置為b00,即可退出Thumb狀態(tài)。如果發(fā)生異常,無論處理器當(dāng)前的工作狀態(tài)如何,處理器都會返回到ARM狀態(tài)。

4)?Thumb指令集與ARM指令集的區(qū)別

(1)?Thumb指令除了分支B指令外大多是無條件執(zhí)行的。

(2)大多數(shù)Thumb指令采用2地址格式,即目的寄存器和源寄存器。

(3)?Thumb指令集沒有協(xié)處理器指令、信號量(semaphore)指令和訪問PSR的指令。

(4)?Thumb分支指令與ARM分支指令相比,在尋址范圍上有更多限制。

(5)?Thumb數(shù)據(jù)處理指令訪問R8~R15時受限。除MOV和ADD指令訪問R8~R15外,數(shù)據(jù)處理指令總是更新CPSR的ALU狀態(tài)標志。訪問R8~R15的Thumb數(shù)據(jù)處理指令不能更新標志。

(6)?Thumb的寄存器指令LOAD/STORE只能訪問R0~R7。PUSH和POP指令使用堆棧指針R13(SP)作為基址,來實現(xiàn)滿遞減堆棧。除傳送R0~R7外,PUSH還可用于存儲鏈接寄存器R14(LR),POP還可用于加載程序計數(shù)器指針PC。

(7)?Thumb偽指令不支持ADRL。

2.Thumb存儲器訪問指令

1)?LDR、STR——立即數(shù)偏移

句法:

op Rd,[Rn,#immed_5×4]

opH Rd,[Rn,#immed_5×2]

opB Rd,[Rn,#immed_5×1]

2)?LDR、STR——寄存器偏移

句法:

op Rd,[Rn,Rm]

3)?LDR、STR——PC或SP相對偏移

句法:

LDR Rd,[PC,#immed_8×4]

LDR Rd,label

LDR Rd,[SP,#immed_8×4]

LDR Rd,[SP,#immed_8×4]

4)?PUSH、POP

句法:

PUSH {reglist}

POP {reglist}

PUSH {reglist,LR}

POP {reglist,PC}

5)?LDMIA、STMIA

句法:

opRn!,{reglist}

3.Thumb數(shù)據(jù)處理指令

1)算術(shù)運算指令——ADD、SUB、ADC、SBC、MUL

句法:

op Rd,Rn,Rm ;?對低寄存器操作,Rd←Rn+Rm或Rd←Rn-Rm

op Rd,Rn,#expr3 ;?對低寄存器操作,Rd←Rn+expr3或Rd←Rn-expr3

op Rd,#expr8 ;?對低寄存器操作,Rd←Rd+expr8或Rd←Rd-expr8

op SP,#expr ;?SP←SP+expr或SP←SP-expr

opp Rd,Rm ;?對低寄存器進行操作,ADC帶進位加、SBC帶進位減、MUL乘法

ADD Rd,Rp,#expr ;?Rd必須為低寄存器,Rd←Rp+expr

ADD Rd,Rm ;?對高/低寄存器進行操作,Rd←Rd+Rm

2)?邏輯運算指令——AND、ORR、EOR、BIC

句法:

op Rd,Rm

3)移位指令——ASR、LSL、LSR、ROR

句法:

op Rd,Rs ;?寄存器控制移位

op Rd,Rm,#expr ;?立即數(shù)移位

4)?比較指令——CMP、CMN

句法:

CMPRn,#expr

CMPRn,Rm

CMNRn,Rm

5)數(shù)據(jù)傳送指令——MOV、MVN、NEG

句法:

op Rd,Rm

MOV Rd,#expr

6)測試指令——TST

句法:

TST Rn,Rm

4.Thumb分支指令

1)?B

句法:

B{cond} label

2)?BL

句法:

BL label

3)?BX

句法:

BX Rm

4)?BLX

句法:

BLX Rm

BLX label

5.Thumb中斷和斷點指令

1)?SWI

句法:

SWIimmed_8

2)?BKPT

句法:

BKPT immed_8

6.Thumb偽指令

1)?ADR

句法:

ADR register,expr

2)?LDR

句法:

LDR

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論