ARM體系結構及編程模型
Download
Report
Transcript ARM體系結構及編程模型
嵌入式系统教案
武汉创维特信息技术有限公司
2020/4/30
提綱
第二章 ARM體系結構及編程模型
1
ARM技術的應用領域及特點
2 ARM微處理器系列
3 ARM處理器的工作狀態
4 ARM處理器的工作模式
5 ARM處理器的記憶體格式
6 ARM 處理器的暫存器組織
7
ARM 例外處理
2
ARM技術的應用領域及特點
ARM-Advanced RISC Machines
ARM(Advanced RISC Machines),既可以認爲是
一個公司的名字,也可以認爲是對一類微處理器的通稱,
還可以認爲是一種技術的名字。
1991年ARM公司成立於英國康橋,主要出售晶片設
計技術的授權。
3
ARM技術的應用領域及特點
ARM 公司的Chip less模式
世界各大半導體生産商從ARM公司購買其設計的ARM微處
理器核,根據各自不同的應用領域,加入適當的週邊電路,
從而形成自己的ARM微處理器晶片進入市場。
基於ARM技術的微處理器應用約佔據了32位RISC微處
理器75%以上的市場份額,ARM技術正在逐步滲入到我們
生活的各個方面。
我國的中興積體電路、大唐電訊、中芯國際和上海華虹,
以及國外的一些公司如德州儀器、意法半導體、Philips、
Intel、Samsung等都推出了自己設計的基於ARM核的處理器。
4
ARM技術的應用領域及特點
ARM微處理器的應用領域
到目前爲止,ARM微處理器及技術的應用已經廣泛深
入到國民經濟的各個領域
工業控制領域:作爲32的RISC架構,基於ARM核的
微控制器晶片不但佔據了高階微控制器市場的大部
分市場份額,同時也逐漸向低階微控制器應用領域
擴展,ARM微控制器的低功耗、高性價比,向傳統
的8位/16位微控制器提出了挑戰。
5
ARM技術的應用領域及特點
ARM微處理器的應用領域
網路應用:隨著寬頻技術的推廣,採用ARM技術的
ADSL晶片正逐步獲得競爭優勢。此外,ARM在語音及視頻
處理上作最佳化,並獲得廣泛支援,也對DSP的應用領域提
出了挑戰。
消費類電子産品:ARM技術在目前流行的數位音頻播
放器、數位機上盒(Set-Top Box)和遊戲機中得到廣泛採用。
影像和安全産品:現在流行的數位相機和印表機中絕大
部分採用ARM技術。手機中的32位SIM智慧卡也採用了
ARM技術。
……
6
ARM技術的應用領域及特點
ARM微處理器的特點—低功耗、低成本、高性能
低功耗、低成本、高性能
採用RISC指令集
全靜態操作,省電
使用大量的暫存器
ARM(32 Bits)/THUMB(16 Bits)指令支持
三(ARM7, Fetch->Decode->Execute,沒MMU)/五級管線
(ARM9, Fetch->Decode->Execute->Memory Access->Write
Register, 有MMU)
7
ARM技術的應用領域及特點
ARM微處理器的特點—採用RISC體系結構
採用RISC架構的ARM處理器一般具有如下特點:
固定長度的指令格式,指令歸整、簡單、基 本定
址方式有2~3種;
使用單周期指令(理想值,平均為1.5 CLK),便
於管線操作執行;
大量使用暫存器,資料處理指令只對暫存器進行
操作,只有載入/儲存指令可以存取記憶體,以提高指
令的執行效率。
8
ARM技術的應用領域及特點
ARM微處理器的特點—大量使用暫存器
ARM 處理器共有37個暫存器,被分爲若干個組,這些
暫存器包括:
31個通用暫存器,包括程式計數器(PC 指標),
均爲32位的暫存器;
6個狀態暫存器,用以標識CPU的工作狀態及程
式的操作狀態,均爲32位元。
9
ARM技術的應用領域及特點
ARM微處理器的特點—高效能的指令系統
ARM微處理器支援兩種指令集:ARM指令集和Thumb
指令集。
ARM指令爲32位元的長度,Thumb指令爲16位元長度。
Thumb指令集爲ARM指令集的功能子集,但與等價的ARM
代碼相比較,可節省30%~40%以上的記憶體空間,同時具
備32位代碼的所有優點,用於BIOS(省錢)。
10
ARM技術的應用領域及特點
ARM微處理器的特點—其他技術
除此以外,ARM體系結構還採用了一些特別的技術,
在保證高性能的前提下儘量縮小晶片的面積,並降低功耗:
所有的指令都可根據前面的執行結果決定是否被執行,
從而提高指令的執行效率。
可用載入/儲存指令(為Memory MAP 特性)做批次傳輸資
料,以提高資料的傳輸效率。
可在一條資料處理指令中同時完成邏輯處理和移位元處
理。
在迴圈處理中使用地址的自動增減來提高操作效率。
11
ARM微處理器系列
ARM微處理器系列
ARM7系列
ARM9系列
ARM9E系列
ARM10E系列
SecurCore系列
Intel的Xscale
其中,ARM7、ARM9、ARM9E和ARM10爲4個通用處
理器系列,每一個系列提供一套相對獨特的性能來滿足不同
應用領域的需求。SecurCore系列專門爲安全要求較高的應
用而設計,用於IC Card, Smart Card等,有防潙功能)。
12
ARM微處理器系列
ARM7微處理器系列
ARM7系列是爲低功耗的32位RISC處理器,最適合用
於對價位和功耗要求較高的消費性應用。ARM7系列有如下
特點:
具有嵌入式ICE-RT邏輯,除錯開發方便;
極低的功耗,適合對功耗要求較高的應用,如攜帶型産品;
能夠提供0.9MIPS/MHz的三級管線結構;
代碼密度高,並相容16位元的Thumb指令集;
對作業系統的支援廣泛,如Windows CE、Linux、Palm OS等;
指令系統與ARM9系列、ARM9E系列和ARM10E系列相容,便
於用戶的産品升級換代;
主頻最高可達130M,高速的運算處理能力能勝任絕大多數的複
雜應用。
13
ARM微處理器系列
ARM7微處理器系列
主要應用領域:工業控制、Internet設備、網路和數據
機設備、行動電話等多種多媒體和嵌入式應用。
ARM7系列微處理器包括如下幾種類型的核心:
ARM7TDMI、ARM7TDMI-S、ARM720T、ARM7EJ。其
中,ARM7TMDI是目前使用最廣泛的32位嵌入式RISC處理
器,屬低階ARM處理器核心。TDMI的基本含義爲:
T:支援16爲壓縮指令集Thumb;
D:支援晶片上Debug;
M:內嵌硬體乘法器(Multiplier, 32X32=64Bits)
I:嵌入式ICE,支援晶片上中斷點和除錯點;
14
ARM微處理器系列
ARM9微處理器系列
ARM9系列微處理器在高性能和低功耗特性方面提供最
佳的表現。具有以下特點:
5級整數管線,指令執行效率更高。
提供1.1MIPS/MHz的哈佛結構。
支持32位ARM指令集和16位Thumb指令集。
支援32位元的高速AMBA匯流排界面。
全性能的MMU,支援Windows CE、Linux、Palm OS等多種
主流嵌入式作業系統。
MPU支援即時作業系統。
內含16K資料Cache和16K指令Cache,具有更高的指令和資料
處理能力 。
15
ARM微處理器系列
ARM9微處理器系列
ARM9系列微處理器主要應用於無線設備、儀器儀錶、
安全系統、機上盒、高階印表機、數位照相機和數位攝
影機等。
ARM9系列微處理器包含ARM920T、ARM922T和ARM940T三
種類型,以適用于不同的應用場合。
16
ARM微處理器系列
ARM9E微處理器系列
ARM9E系列微處理器的主要特點如下:
支援DSP指令集,適合於需要高速數位信號處理的場合。
5級整數管線,指令執行效率更高。
支援32位元ARM指令集和16位元Thumb指令集。
支援32位元的高速AMBA匯流排界面(AMBA=AHB[高速元
件]+APB [高速元件])。
支援VFP9浮點處理輔助運算器。
全性能的MMU,支援衆多主流嵌入式作業系統。
支援資料Cache和指令Cache,具有更高的處理能力。
主頻最高可達300M。
17
ARM微處理器系列
ARM9E微處理器系列
ARM9E系列微處理器主要應用於下一代無線設備、數位
消費品、影像設備、工業控制、儲存設備和網路設備等
領域。
ARM9E系列微處理器包含ARM926EJ-S、ARM946E-S和
ARM966E-S三種類型,以適用于不同的應用場合。
18
ARM微處理器系列
ARM10E微處理器系列
ARM10E系列微處理器的主要特點如下:
支援DSP指令集,適合於需要高速數位信號處理的場合。
6級整數管線,指令執行效率更高。
支持32位ARM指令集和16位Thumb指令集。
支援32位元的高速AMBA匯流排界面。
支援VFP10浮點處理輔助運算器。
全性能的MMU,支援衆多主流嵌入式作業系統。
內含資料Cache和指令Cache,具有更高的處理能力
主頻最高可達400M。
內嵌並行讀/寫操作物件。
19
ARM微處理器系列
ARM10E微處理器系列
ARM10E系列微處理器主要應用於下一代無線設備、數
位消費品、影像設備、工業控制、通信和資訊系統等領
域。
ARM10E系列微處理器包含ARM1020E、ARM1022E和
ARM1026EJ-S三種類型,以適用于不同的應用場合。
20
ARM微處理器系列
SecurCore微處理器系列
SecurCore系列微處理器除了具有ARM體系結構各種主
要特點外,還在系統安全方面具有如下的特點:
帶有靈活的保護單元,確保作業系統和應用資料的安全。
採用軟內核技術,防止外部對其進行掃描探測。
可整合用戶自己的安全特性和其他輔助運算器。
21
ARM微處理器系列
SecurCore微處理器系列
SecurCore系列微處理器主要應用於一些對安全性要求
較高的應用産品及應用系統,如電子商務、電子政務、
電子銀行業務、網路和認證系統等領域。
SecurCore系列微處理器包含SecurCore SC100、
SecurCore SC110、SecurCore SC200和SecurCore
SC210四種類型,以適用于不同的應用場合。
22
ARM微處理器系列
StrongARM微處理器系列
Intel StrongARM SA-1100處理器是採用ARM體系結構高
度整合的32位元RISC微處理器。它融合了Intel公司的設
計和處理技術以及ARM體系結構的電源效率,採用在軟體
上相容ARMv4體系結構、同時採用具有Intel技術優點的
體系結構。
Intel StrongARM處理器是攜帶型通訊産品和消費類電子
産品的理想選擇,已成功應用於多家公司的掌上電腦系
列產品。
23
ARM微處理器系列
Xscale處理器
Xscale 處理器是基於ARMv5TE體系結構的解決方案,是
一款全功能、高性能價格比、低功耗的處理器。它支援
16位元的Thumb指令和DSP指令集,已使用在數位行動電
話、個人數位助理和網路産品等場合。
Xscale 處理器是Intel目前主要推廣的一款ARM微處理器。
24
ARM微處理器的工作狀態
ARM微處理器的工作狀態
從程式執行的角度看,ARM微處理器的工作狀態一般有兩
種,並可在兩種狀態之間切換:
ARM狀態,此時處理器執行32位的字對齊的ARM指
令;
Thumb狀態,此時處理器執行16位的、半字對齊的
Thumb指令。
25
ARM微處理器的工作狀態
ARM與THUMB
THUMB指令是ARM指令的子集
可以相互調用,只要遵循一定的調用規則
Thumb指令與ARM指令的時間效率和空間效率關係爲:
記憶體空間約爲ARM代碼的60%~70%
指令數比ARM代碼多約30%~40%
記憶體爲32位時ARM代碼比Thumb代碼快約40%
記憶體爲16位時Thumb比ARM代碼快約40~50%
使用Thumb代碼,記憶體的功耗會降低約30%
26
ARM微處理器的工作狀態
狀態切換方法
ARM指令集和Thumb指令集均有切換處理器狀態的指令,
並可在兩種工作狀態之間切換
在開始執行代碼時,應該處於ARM狀態。
27
ARM微處理器的工作狀態
進入Thumb狀態
當運算元暫存器的狀態位元(位元0)爲1時,可以採
用執行BX指令的方法,使微處理器從ARM狀態切換到
Thumb狀態 。如下
LDR
R0,=label+1
BX
R0
當處理器處於Thumb狀態時發生例外(如IRQ、FIQ、
Undef、Abort、SWI等),則例外處理返回時,自動切
換到Thumb狀態 。
28
ARM微處理器的工作狀態
切換到ARM狀態
當運算元暫存器的狀態位元爲0時,執行BX指令時可以
使微處理器從Thumb狀態切換到ARM狀態。如下
LDR
R0,=label
BX
R0
在處理器進行例外處理時,把PC指標放入例外模式鏈
結暫存器中,並從例外向量位址開始執行程式,也可
以使處理器切換到ARM狀態。
29
ARM微處理器的工作模式
處理器模式
usr:ARM處理器正常的程式執行狀態
fiq:於高速資料傳輸或通道處理
irq:用於通用的中斷處理
svc:作業系統使用的保護模式
abt:用於虛擬儲存及儲存保護
und:當出現未定義指令終止時進入該模式
sys:執行具有特權的作業系統任務
30
ARM微處理器的工作模式
用戶模式和特權模式
除了用戶模式之外的其他6種處理器模式稱爲特權模式
特權模式下,程式可以存取所有的系統資源,也可以
任意地進行處理器模式的切換。
特權模式中,除系統模式外,其他5種模式又稱爲例外模式
大多數的用戶程式操作在用戶模式下,此時,應用程
式不能夠存取一些受作業系統保護的系統資源,應用
程式也不能直接進行處理器模式的切換。
用戶模式下,當需要進行處理器模式切換時,應用程
式可以産生例外處理,在例外處理中進行處理器模式
的切換。
31
ARM微處理器的工作模式
模式切换
處理器模式可以通過軟體進行切換,也可以通過外部
中斷或者例外處理過程進行切換。
當應用程式發生例外中斷時,處理器進入相應的例外
模式。在每一種例外模式下都有一組暫存器,供相應
的例外處理程式使用,這樣就可以保證在進入例外模
式時,用戶模式下的暫存器不被破壞。
系統模式並不是通過例外進入的,它和用戶模式具有
完全一樣的暫存器。但是系統模式屬於特權模式,可
以存取所有的系統資源,也可以直接進行處理器模式
切換。它主要供作業系統任務使用。通常作業系統的
任務需要存取所有的系統資源,同時該任務仍然使用
用戶模式的暫存器組,而不是使用例外模式下相應的
暫存器組,這樣可以保證當例外中斷發生時任務狀態
不被破壞。
32
ARM微處理器的記憶體格式
ARM微處理器的記憶體格式
ARM體系結構所支援的最大定址空間爲4GB(232位元組)
ARM體系結構將記憶體看作是從零位址開始的位元組的
線性組合。從零位元組到三位元組放置第一個儲存的字
資料,從第四個位元組到第七個位元組放置第二個儲存
的字資料,依次排列。
ARM體系結構可以用兩種方法儲存字資料,稱之爲大端格
式(Big-Endian, Intel)和小端格式(little-Endian,Motorola)
33
ARM微處理器的記憶體格式
ARM體系結構的記憶體格式—大端格式
在這種格式中,字資料的高位元組儲存在低位址中,而
字資料的低位元組則存放在高位址中
34
ARM微處理器的記憶體格式
ARM體系結構的記憶體格式—小端格式
與大端儲存格式相反,在小端儲存格式中,低位址中存放
的是字資料的低位元組,高位址存放的是字資料的高位元
組
35
ARM微處理器的記憶體格式
指令長度及資料類型
ARM微處理器的指令長度可以是32位元(在ARM狀態
下),也可以爲16位元(在Thumb狀態下)。
ARM微處理器中支援位元組(8位元)、半字(16位)、
字(32位)三種資料類型,其中,字需要4位元組對齊
(位址的低兩位爲0)、半字需要2位元組對齊(位址
的最低位爲0)
36
ARM微處理器的記憶體格式
非對齊的儲存存取操作
在ARM種,如果儲存單元的位址沒有遵守對齊規則,則
稱爲非對齊的儲存存取操作。
非對齊的指令預取操作
非對齊的資料存取操作
37
ARM微處理器的記憶體格式
非對齊的指令預取操作
當處理器處於ARM狀態期間,如果寫入到暫存器PC中的
值是非字對齊的,則指令執行的結果不可預知,該位
址值中最低兩位被忽略。
當處理器處於THUMB狀態期間,如果寫入到暫存器PC中
的值是非半字對齊的,則指令執行的結果不可預知,該
位址值中最低位被忽略。
38
ARM微處理器的記憶體格式
非對齊的資料存取操作
對於Load/Store操作,如果是非對齊的資料存取操作,
系統定義了三種可能的結果:
執行的結果不可預知
忽略字單元地址的低兩位元的值,即存取地址爲
(address AND 0XFFFFFFFC)的字單元;忽略半字單元
地址的最低位元的值,即存取地址爲(address AND
0XFFFFFFFE)的半字單元。
忽略字單元地址的低兩位元的值;忽略半字單元地址
的最低位元的值;由儲存系統實現這種忽略。也就是
說,這時該位址值原封不動地送到儲存系統。
當發生非對齊地資料存取時,到底採用上述三種方法
中的哪一種,是由各指令指定的。
39
ARM微處理器的記憶體格式
暫存器組織
ARM微處理器共有37個32位元暫存器,其中31個爲通用暫
存器,6個爲狀態暫存器。但是這些暫存器不能被同時存
取,具體哪些暫存器是可被程式存取的,取決微處理器的
工作狀態及具體的操作模式。但在任何時候,通用暫存器
R14~R0、程式計數器PC、一個或兩個狀態暫存器都是可
存取的。
40
ARM微處理器的記憶體格式
ARM狀態下的暫存器組織
通用暫存器:通用暫存器包括R0~R15,可以分爲三類:
未分組暫存器 R0~R7
分組暫存器R8~R14
程式計數器 PC(R15)
41
ARM微處理器的記憶體格式
ARM狀態下的暫存器組織
42
ARM微處理器的記憶體格式
未分組暫存器 R0~R7
在所有的操作模式下,未分組暫存器都指向同一個真正
(物理)暫存器,他們未被系統用作特殊的用途。因此,在
中斷或例外處理進行操作模式轉換時,由於不同的處理器
操作模式均使用相同的物理暫存器,可能會造成暫存器中
資料的破壞,這一點在進行程式設計時應注意。
43
ARM微處理器的記憶體格式
分組暫存器 R8~R12
每次所存取的物理暫存器與處理器當前的操作模式有關
R8~R12:每個暫存器對應兩個不同的物理暫存器
當使用fiq模式時,存取暫存器R8_fiq~R12_fiq;
當使用除fiq模式以外的其他模式時,存取暫存器R8_usr
~R12_usr。
44
ARM微處理器的記憶體格式
分組暫存器 R13~R14
R13、R14:每個暫存器對應6個不同的物理暫存器
其中的一個是用戶模式與系統模式共用,另外5個物理暫
存器對應於其他5種不同的操作模式
採用以下的記號來區分不同的物理暫存器:
R13_<mode>
R14_<mode>
mode爲以下幾種之一 :usr、fiq、irq、svc、abt、und。
45
ARM微處理器的記憶體格式
堆疊指標—R13
R13在ARM指令中常用作堆疊指標,但這只是一種習慣用
法,用戶也可使用其他的暫存器作爲堆疊指標。
在Thumb指令集中,某些指令強制性的要求使用R13作爲
堆疊指標。
由於處理器的每種操作模式均有自己獨立的物理暫存器
R13,在初始化部分,都要初始化每種模式下的R13,這
樣,當程式的操作進入例外模式時,可以將需要保護的暫
存器放入R13所指向的堆疊,而當程式從例外模式返回時,
則從對應的堆疊中恢復。
46
ARM微處理器的記憶體格式
副程式連接暫存器—R14
R14也稱作副程式連接暫存器或連接暫存器LR。當執行
BL指令時,可以從R14中得到R15(程式計數器PC)的
備份。其他情況下,R14用作通用暫存器。
在每一種操作模式下,都可用R14保存副程式的返回位址,
當使用BL或BLX指令時,將PC的當前值拷貝給R14,執
行完副程式後,又將R14的值拷貝回PC,即可完成副程
式的返回。
BL SUB1
……
SUB1:
STMFD SP!, {<regs>, LR} /*將R14存入堆疊 */
……
LDMFD
SP!,{<regs>,PC} 47
/*完成副程式返回 */
ARM微處理器的記憶體格式
程式計數器 PC(R15)
ARM狀態下,位元[1:0]爲0,位[31:2]用於保存PC;
Thumb狀態下,位元[0]爲0,位[31:1]用於保存PC;
R15雖然也可用作通用暫存器,但一般不這麽使用,因爲
對R15的使用有一些特殊的限制,當違反了這些限制時,
程式的執行結果是未知的。
由於ARM體系結構採用了多級管線技術,對於ARM指令
集而言,PC總是指向當前指令的下兩條指令的位址,即
PC的值爲當前指令的位址值加8個位元組。
48
ARM微處理器的記憶體格式
程式狀態暫存器 (CPSR/SPSR)
暫存器R16用作CPSR(當前程式狀態暫存器),CPSR可在任
何操作模式下被存取,它包括條件標誌位元、中斷禁止位
元、當前處理器模式標誌位元,以及其他一些相關的控制
和狀態位元。
每一種操作模式下又都有一個專用的物理狀態暫存器,
稱爲SPSR(備份的程式狀態暫存器),例外發生時,
SPSR用於保存CPSR的值,從例外返回時則可由SPSR
來恢復CPSR。
由於用戶模式和系統模式不屬於例外模式,他們沒有SPSR,
當在這兩種模式下存取SPSR,結果是未知的。
49
ARM微處理器的記憶體格式
Thumb狀態下的暫存器組織
Thumb狀態下的暫存器集是ARM狀態下暫存器集的一個子集
程式可以直接存取8個通用暫存器(R7~R0)、程式計數
器(PC)、堆疊指標(SP)、連接暫存器(LR)和CPSR。
同樣,每一種特權模式下都有一組SP、LR和SPSR。
50
ARM微處理器的記憶體格式
Thumb狀態下的暫存器組織圖
51
ARM微處理器的記憶體格式
Thumb狀態下的暫存器與ARM狀態下的暫存器關係
Thumb狀態下和ARM狀態下的R0~R7是相同的 。
Thumb狀態下和ARM狀態下的CPSR和所有的SPSR是相同的。
Thumb狀態下的SP對應於ARM狀態下的R13。
Thumb狀態下的LR對應於ARM狀態下的R14。
Thumb狀態下的程式計數器對應於ARM狀態下R15。
52
ARM微處理器的記憶體格式
Thumb狀態下的暫存器與ARM狀態下的暫存器關係圖
53
ARM微處理器的記憶體格式
存取THUMB狀態下的高位暫存器(Hi-registers )
在Thumb狀態下,高位暫存器R8~R15並不是標準暫存器集
的一部分,但可使用組合語言程式受限制的存取這些暫存
器,將其用做快速的暫存器。
使用帶有特殊變數的MOV指令,資料可以在低位元暫存器
和高位暫存器之間進行傳送;高位暫存器的值可以使用
CMP和ADD指令進行比較或加上低位暫存器中的值。
54
ARM微處理器的記憶體格式
程式狀態暫存器
ARM體系結構包含一個當前程式狀態暫存器(CPSR)和五
個備份的程式狀態暫存器(SPSRs)。備份的程式狀態暫
存器用來進行例外處理,其功能包括:
保存ALU中的當前操作資訊
控制允許和禁止中斷
設置處理器的操作模式
55
ARM微處理器的記憶體格式
程式狀態暫存器的每一位元的安排
56
ARM微處理器的記憶體格式
程式狀態暫存器的條件碼標誌
N、Z、C、V均爲條件碼標誌位元。它們的內容可被算術或
邏輯運算的結果所改變,並且可以決定某條指令是否被執
行
在ARM狀態下,絕大多數的指令都是有條件執行的。
在Thumb狀態下,僅有分支指令是有條件執行的。
57
ARM微處理器的記憶體格式
影響標誌位元的指令
標誌
位元
N
Z
含
義
當帶符號的兩個補數進行運算時,N=1 表示運算的結果
爲負數;N=0 表示運算的結果爲正數或零;
Z=1表示運算的結果爲零;Z=0表示運算的結果爲非零;
C
加法運算結果進位時,C=1,減法運算借位時,C=0;
移位元操作的非加/減運算指令,C爲移出的最後一位;
其他的非加/減運算指令,C的值通常不改變。
V
加/減法運算指令,V=1表示符號位元溢出。
對於其他的非加/減運算指令,C的值通常不改變。
Q
在ARM v5及以上版本的E系列處理器中,Q標誌指示DSP
運算指令是否溢出。在其他版本中,Q標誌位元無定義 。
58
ARM微處理器的記憶體格式
程式狀態暫存器的控制位元
狀態暫存器的低8位元(I、F、T和M[4:0])稱爲控制位
元,發生例外時,這些位元可以被改變。如果處理器操作於
特權模式,這些位元也可以由程式修改 。
中斷禁止位 I、F:
I=1
禁止IRQ中斷 ;
F=1
禁止FIQ中斷 。
T標誌位元 :該位元反映處理器的操作狀態
ARM體系結構v5及以上的版本的T系列處理器,當該位
元爲1時,程式操作於Thumb狀態,否則操作於ARM狀
態 。
ARM體系結構v5及以上的版本的非T系列處理器,當該
位爲1時,執行下一條指令以引起爲定義的指令例外;
當該位元爲0時,表示操作於ARM狀態 。
操作模式位元M[4:0]是模式位元,決定處理器的操作模
59
式
ARM微處理器的記憶體格式
處理器操作模式及可以存取的暫存器
M[4:0]
處理器模式
可存取的暫存器
0b10000
用户模式
PC,CPSR,R0-R14
0b10001
FIQ模式
0b10010
IRQ模式
0b10011
管理模式
0b10111
中止模式
0b11011
未定義模式
0b11111
系统模式
PC,CPSR, SPSR_fiq,R14_fiq-R8_fiq,
R7~R0
PC,CPSR, SPSR_irq,R14_irq, R13_irq,
R12~R0
PC,CPSR, SPSR_svc,R14_svc, R13_svc,
R12~R0,
PC,CPSR, SPSR_abt,R14_abt,R13_abt,
R12~R0,
PC,CPSR, SPSR_und,R14_und,
R13_und, R12~R0,
PC,CPSR(ARM v4及以上版本),
R14~R0
60
ARM例外處理
例外 (Exceptions)
當正常的程式執行流程發生暫時的停止時,稱之爲例外,
例如處理一個外部的中斷請求。在處理例外之前,當前處
理器的狀態必須保留,這樣當例外處理完成之後,當前程
式可以繼續執行。處理器允許多個例外同時發生,它們將
會按固定的優先順序進行處理。
ARM體系結構中的例外,與8位元/16位元體系結構的中斷
有很大的相似之處,但例外與中斷的概念並不完全等同。
61
ARM例外處理
ARM體系結構所支援的例外類型
例外類型
Reset
未定義指令
軟體中斷
指令預取中
止
資料中止
IRQ
FIQ
具體含義
Reset有效時,産生Reset例外,程式跳到
Reset處理程式處執行 。
遇到不能處理的指令時,産生未定義指令例
外 。
執行SWI指令産生,用於用戶模式下的程式調
用特權操作指令 。
處理器預取指令的位址不存在,或該位址不允
許當前指令存取,産生指令預取中止例外。
處理器資料存取指令的位址不存在,或該位址
不允許當前指令存取時,産生資料中止例外。
外部中斷請求有效,且CPSR中的I位爲0時,産
生IRQ例外 。
快速中斷請求引腳有效,且CPSR中的F位爲0
時,産生FIQ例外。
62
ARM例外處理
對例外的回應
當一個例外出現以後,ARM微處理器會執行以下幾個步驟
將下一條指令的位址存入相應連接暫存器LR,以便程式
在處理例外返回時能從正確的位置重新開始執行 。
將CPSR複製到相應的SPSR中。
根據例外類型,強制設置CPSR的操作模式位元。
強制PC從相關的例外向量位址取下一條指令執行,從而
跳躍到相應的例外處理程式處 。
63
ARM例外處理
例外回應虛擬碼 (Pseudo Code)
處理器處於Thumb狀態,則當例外向量位址載入入PC時,
處理器自動切換到ARM狀態。ARM微處理器對例外的回應過
程用虛擬碼可以描述爲 :
R14_<Exception_Mode> = Return Link
SPSR_<Exception_Mode> = CPSR
在ARM狀態下執行
CPSR[4:0] = Exception Mode Number
CPSR[5] = 0
禁止快速中断
If <Exception_Mode>
== Reset or FIQ then
禁止正常中断
CPSR[6] = 1
轉入例外入口地址
CPSR[7] = 1
PC = Exception Vector Address
64
ARM例外處理
從例外返回
例外處理完畢之後,ARM微處理器會執行以下幾步驟,從
例外返回 :
將連接暫存器LR的值減去相應的偏移量後送到PC中 。
將SPSR複製回CPSR中 。
若在進入例外處理時設置了中斷禁止位元,要在此清除 。
可以認爲應用程式總是從Reset例外處理程式開始執行的,
因此Reset例外處理程式不需要返回 。
65
ARM例外處理
FIQ(Fast Interrupt Request)
FIQ例外是爲了支援資料傳輸或者通道處理而設計的 。
若將CPSR的F位置爲1,則會禁止FIQ中斷,若將CPSR的F位
元清為零,處理器會在指令執行時檢查FIQ的輸入。注意
只有在特權模式下才能改變F位元的狀態 。
可由外部通過對處理器上的nFIQ接腳輸入低電位産生FIQ。
不管是在ARM狀態還是在Thumb狀態下進入FIQ模式,FIQ處
理程式均可以執行以下指令從FIQ模式返回 :
SUBS
PC,R14_fiq ,#4
66
ARM例外處理
IRQ(Interrupt Request)
IRQ例外屬於正常的中斷請求,可通過對處理器的nIRQ引
腳輸入低電位産生,IRQ的優先順序低於FIQ,當程式執行
進入FIQ例外時,IRQ可能被遮罩 。
若將CPSR的I位置爲1,則會禁止IRQ中斷,若將CPSR的I位
清零,處理器會在指令執行完之前檢查IRQ的輸入。注意
只有在特權模式下才能改變I位元的狀態 。
不管是在ARM狀態還是在Thumb狀態下進入IRQ模式,IRQ處
理程式均可以執行以下指令從IRQ模式返回 :
SUBS PC , R14_irq , #4
67
ARM例外處理
ABORT(中止)
産生中止例外意味著對記憶體的存取失敗。ARM微處理器
在記憶體存取周期內檢查是否發生中止例外。
中止例外包括兩種類型 :
指令預取中止:發生在指令預取時 。
資料中止:發生在資料存取時 。
當指令預取存取記憶體失敗時,記憶體系統向ARM處理器發出記憶體
中止(Abort)信號,預取的指令被記爲無效,但只有當處理器試圖
執行無效指令時,指令預取中止例外才會發生,如果指令未被執行,
例如在指令管線中發生了跳躍,則預取指令中止不會發生 。
若資料中止發生,系統的回應與指令的類型有關 。
當確定了中止的原因後,Abort處理程式均可以執行以下指令從中止
模式返回,無論是在ARM狀態還是Thumb狀態 :
SUBS PC, R14_abt, #4
;指令預取中止
SUBS PC, R14_abt, #8
;資料中止
68
ARM例外處理
Software Interrupt(軟體中斷)
軟體中斷指令(SWI)用於進入管理模式,常用於請求執
行特定的管理功能。無論是在ARM狀態還是Thumb狀態,下一
行指令可以從SWI模式返回:
MOVS PC , R14_svc
以上指令恢復PC(從R14_svc)和CPSR(從SPSR_svc)的值,
並返回到SWI的下一條指令。
69
ARM例外處理
Undefined Instruction(未定義指令 )
當ARM處理器遇到不能處理的指令時,會産生未定義指令
例外。採用這種機制,可以通過軟體模擬擴展ARM或Thumb指
令集。 。
處理器執行以下指令回返,無論是在ARM狀態還是Thumb狀
態:
MOVS PC, R14_und
以上指令恢復PC(從R14_und)和CPSR(從SPSR_und)
的值,並返回到未定義指令後的下一條指令。
70
ARM例外處理
例外向量表 (Exception Vectors)
地 址
異 常
進入模式
0x00,0000
Reset
管理模式
0x00,0004
未定義指令
未定義模式
0x00,0008
軟體中斷
管理模式
0x00,000C
中止(預取指令 ) 中止模式
0x00,0010
中止(資料)
中止模式
0x00,0014
保留
保留
0x00,0018
IRQ
IRQ
0x00,001C
FIQ
FIQ
71
ARM例外處理
例外優先順序 (Exception Priorities)
優先順序
異
常
1(最高)
Reset
2
資料中止
3
FIQ
4
IRQ
5
預取指令中止
6(最低)
未定義指令 、SWI
72
ARM例外處理
應用程式中的例外處理
當系統操作時,例外可能會隨時發生,爲保證在ARM處理
器發生例外時不至於處於未知狀態,在應用程式的設計中,
首先要進行例外處理,採用的方式是在例外向量表中的特定
位置放置一條跳躍指令,跳躍到例外處理程式,當ARM處理
器發生例外時,程式計數器PC會被強制設置爲對應的例外向
量,從而跳躍到例外處理程式,當例外處理完成以後,返回
到主程序繼續執行。
73