PC-LR的偏移量計(jì)算-2013_第1頁(yè)
PC-LR的偏移量計(jì)算-2013_第2頁(yè)
PC-LR的偏移量計(jì)算-2013_第3頁(yè)
PC-LR的偏移量計(jì)算-2013_第4頁(yè)
PC-LR的偏移量計(jì)算-2013_第5頁(yè)
已閱讀5頁(yè),還剩32頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、異常的響應(yīng)異常的響應(yīng)/ /返回:返回:PCPC、LRLR偏移量的計(jì)算偏移量的計(jì)算2/106項(xiàng)目項(xiàng)目ARM7ARM9ARM10ARM11流水線流水線3568典型頻率典型頻率MHz80150260335功耗功耗mW/MHz0.060.19(+cache)0.5(+cache)0.4(+cache)性能性能MIPS/MHz0.971.11.31.2架構(gòu)架構(gòu)馮馮 諾伊曼諾伊曼哈佛哈佛哈佛哈佛哈佛哈佛ARM處理器(核)比較處理器(核)比較3-Stage Pipeline 3-Stage Pipeline vs 5-Stage Pipeline 4InstructionFetch Shift + ALUM

2、emoryAccessRegWriteRegReadRegDecodeFETCHDECODEEXECUTEMEMORYWRITEARM9TDMIARM or ThumbInst DecodeReg SelectRegReadShiftALURegWriteThumbARMdecompressARM decodeInstructionFetchFETCHDECODEEXECUTEARM7TDMIARMARM處理器內(nèi)核流水線工作流程處理器內(nèi)核流水線工作流程5ARM的編程模型的編程模型p所謂ARM的編程模型,就是決定ARM程序組織形式的硬件架構(gòu),ARM的編程模型主要包括:ARMARM微處理器的微處理

3、器的工作狀態(tài)工作狀態(tài)ARMARM體系結(jié)構(gòu)的體系結(jié)構(gòu)的存儲(chǔ)器模式存儲(chǔ)器模式ARMARM微處理器的微處理器的運(yùn)行(操作)模式運(yùn)行(操作)模式ARMARM體系結(jié)構(gòu)的體系結(jié)構(gòu)的寄存器組織寄存器組織ARMARM微處理器的微處理器的異常狀態(tài)異常狀態(tài)6ARM Processor Core Registers7ARMARM支持的數(shù)據(jù)類型支持的數(shù)據(jù)類型字節(jié):字節(jié):8 8位位半字:半字:1616位(必須分配為占用位(必須分配為占用2 2個(gè)字節(jié))個(gè)字節(jié))字:字:3232位(必須分配為占用位(必須分配為占用4 4個(gè)字節(jié))個(gè)字節(jié))注意:注意:1 1)半字存儲(chǔ)單元地址最低位為)半字存儲(chǔ)單元地址最低位為0 0 2 2)字存

4、儲(chǔ)單元地址最低兩位為)字存儲(chǔ)單元地址最低兩位為0 0N N位無符號(hào)數(shù):位無符號(hào)數(shù): 二進(jìn)制格式表示范圍為二進(jìn)制格式表示范圍為0202N-1N-1的非負(fù)整數(shù);的非負(fù)整數(shù);N N位有符號(hào)數(shù)時(shí),位有符號(hào)數(shù)時(shí),N N位數(shù)據(jù)值使用位數(shù)據(jù)值使用2 2的補(bǔ)碼格式表示范圍為的補(bǔ)碼格式表示范圍為-2-2N-1N-1+2+2N-1N-1-1-1的整數(shù)的整數(shù)1112342數(shù)據(jù)存儲(chǔ)格式數(shù)據(jù)存儲(chǔ)格式 ARMARM體系結(jié)構(gòu)所支持的最大尋址空間為體系結(jié)構(gòu)所支持的最大尋址空間為4GB4GB(2 23232字節(jié))字節(jié)) ARMARM體系結(jié)構(gòu)將存儲(chǔ)器看成是以字節(jié)為單位的線性組合,存體系結(jié)構(gòu)將存儲(chǔ)器看成是以字節(jié)為單位的線性組合,存

5、儲(chǔ)單元地址從儲(chǔ)單元地址從0 x000000000 x00000000開始編址開始編址 ARMARM可按大端格式和小端格式兩種方式存儲(chǔ)字?jǐn)?shù)據(jù)可按大端格式和小端格式兩種方式存儲(chǔ)字?jǐn)?shù)據(jù) 地址地址 大端格式大端格式 0 x00000000 0 x12 0 x00000001 0 x34 0 x00000002 0 x56 0 x00000003 0 x78 地址地址 小端格式小端格式 0 x00000000 0 x78 0 x00000001 0 x56 0 x00000002 0 x34 0 x00000003 0 x12字?jǐn)?shù)據(jù)字?jǐn)?shù)據(jù)0 x12345678 一個(gè)基于一個(gè)基于ARMARM內(nèi)核的芯片可以

6、只支持大端模式或小端模式,也可以兩內(nèi)核的芯片可以只支持大端模式或小端模式,也可以兩者都支持。通常,小端模式是者都支持。通常,小端模式是ARMARM處理器的默認(rèn)形式。處理器的默認(rèn)形式。 在在ARMARM指令集中不包含任何直接選擇大小端的指令,但是一個(gè)同時(shí)支指令集中不包含任何直接選擇大小端的指令,但是一個(gè)同時(shí)支持大小端模式的持大小端模式的ARMARM芯片可以通過硬件配置(一般使用芯片的引腳來配置)芯片可以通過硬件配置(一般使用芯片的引腳來配置)來匹配存儲(chǔ)器系統(tǒng)所使用的規(guī)則。來匹配存儲(chǔ)器系統(tǒng)所使用的規(guī)則。ARM微處理器支持微處理器支持7種運(yùn)行模式種運(yùn)行模式 用戶模式用戶模式(usrusr):): A

7、RMARM處理器處理器正常的程序執(zhí)行正常的程序執(zhí)行狀態(tài)狀態(tài) 快速中斷模式快速中斷模式(fiqfiq):): 用于高速數(shù)據(jù)傳輸或通道處理用于高速數(shù)據(jù)傳輸或通道處理 外部中斷模式外部中斷模式(irqirq):): 用于通用的中斷處理用于通用的中斷處理 管理模式管理模式(svcsvc):): 操作系統(tǒng)使用的保護(hù)模式操作系統(tǒng)使用的保護(hù)模式 數(shù)據(jù)訪問中止模式數(shù)據(jù)訪問中止模式(abt)(abt): 訪問存儲(chǔ)器失敗訪問存儲(chǔ)器失敗,當(dāng)數(shù)據(jù)或,當(dāng)數(shù)據(jù)或指令預(yù)取中止時(shí)進(jìn)入該模式,可用于虛擬存儲(chǔ)及存儲(chǔ)保護(hù)。指令預(yù)取中止時(shí)進(jìn)入該模式,可用于虛擬存儲(chǔ)及存儲(chǔ)保護(hù)。 系統(tǒng)模式系統(tǒng)模式(syssys):): 運(yùn)行具有特權(quán)的操

8、作系統(tǒng)任務(wù)。運(yùn)行具有特權(quán)的操作系統(tǒng)任務(wù)。 未定義指令中止模式未定義指令中止模式(undund):當(dāng)未定義的指令執(zhí)行時(shí)):當(dāng)未定義的指令執(zhí)行時(shí)進(jìn)入該模式,可用于支持硬件協(xié)處理器的軟件仿真。進(jìn)入該模式,可用于支持硬件協(xié)處理器的軟件仿真。 ARMARM微處理器的微處理器的運(yùn)行模式可以通過軟件改變運(yùn)行模式可以通過軟件改變,也可以通過,也可以通過外外部中斷或異常處理改變部中斷或異常處理改變。 大多數(shù)的應(yīng)用程序運(yùn)行在用戶模式下,當(dāng)處理器運(yùn)行在用大多數(shù)的應(yīng)用程序運(yùn)行在用戶模式下,當(dāng)處理器運(yùn)行在用戶模式下時(shí),某些被保護(hù)的系統(tǒng)資源是不能被訪問的戶模式下時(shí),某些被保護(hù)的系統(tǒng)資源是不能被訪問的10ARM的運(yùn)行模式:

9、的運(yùn)行模式:if u, as u11異常異常exceptionexception異常指正常執(zhí)行的程序流因故被暫時(shí)中止;異常指正常執(zhí)行的程序流因故被暫時(shí)中止;ARM支持支持7種異常類型、種異常類型、5種處理器異常工作模式種處理器異常工作模式若同時(shí)發(fā)生多個(gè)異常,將按優(yōu)先級(jí)順序處理;若同時(shí)發(fā)生多個(gè)異常,將按優(yōu)先級(jí)順序處理;異常類型對(duì)應(yīng)異常模式優(yōu)先級(jí)復(fù)位Supervisor1(最高優(yōu)先級(jí))數(shù)據(jù)中止Abort2FIQFIQ3IRQIRQ4指令預(yù)取中止Abort5未定義指令Undefined6SWISupervisor7(最低優(yōu)先級(jí))優(yōu)先級(jí)降低12異常(異常(exception)的進(jìn)入和返回)的進(jìn)入和返回

10、異常向量(表)向量地址異常類型進(jìn)入時(shí)模式進(jìn)入時(shí)I狀態(tài) 進(jìn)入時(shí)F狀態(tài)0 x0000 0000復(fù)位管理禁止禁止0 x0000 0004未定義指令未定義IF0 x0000 0008軟件中斷(SWI)管理禁止F0 x0000 000C 預(yù)取中止(指令)中止IF0 x0000 0010數(shù)據(jù)中止中止IF0 x0000 0014保留保留0 x0000 0018IRQ中斷禁止F0 x0000 001CFIQ快中斷禁止禁止注:表中的I和F表示不對(duì)該位有影響異常發(fā)生時(shí)處理器將PC值強(qiáng)制設(shè)置為對(duì)應(yīng)的異常向量; 異常向量處通常只存放一條跳轉(zhuǎn)指令,指向真正的異常處理程序;異常向量表的后面一般緊跟著存放FIQ的異常處理程

11、序,這樣可以減少一次跳轉(zhuǎn),提高FIQ的響應(yīng)速度;14異常響應(yīng)過程異常響應(yīng)過程在在LRLR中保存返回地址信息;中保存返回地址信息; ARMARM狀態(tài)下將當(dāng)前指令地址加狀態(tài)下將當(dāng)前指令地址加4 4或加或加8 8復(fù)制到復(fù)制到LRLR ThumbThumb狀態(tài)下將當(dāng)前指令地址加狀態(tài)下將當(dāng)前指令地址加2 2、4 4或加或加8 8 復(fù)制到復(fù)制到LRLR將將CPSRCPSR復(fù)制到適當(dāng)?shù)膹?fù)制到適當(dāng)?shù)腟PSRSPSR中;中;將將CPSRCPSR模式位強(qiáng)制設(shè)置為與異常類型相對(duì)應(yīng)的模式位強(qiáng)制設(shè)置為與異常類型相對(duì)應(yīng)的值;值;強(qiáng)制強(qiáng)制PCPC從相關(guān)的異常向量處取指;從相關(guān)的異常向量處取指;注注1 1:中斷異常時(shí)置位中斷

12、禁止標(biāo)志可以防止不受控制的異常嵌套:中斷異常時(shí)置位中斷禁止標(biāo)志可以防止不受控制的異常嵌套 2 2:異??偸窃冢寒惓?偸窃贏RMARM狀態(tài)中處理。若處理器處于狀態(tài)中處理。若處理器處于ThumbThumb狀態(tài)時(shí)發(fā)生狀態(tài)時(shí)發(fā)生異常,則異常向量地址裝入異常,則異常向量地址裝入PCPC時(shí)會(huì)自動(dòng)切換到時(shí)會(huì)自動(dòng)切換到ARMARM狀態(tài)。狀態(tài)。取決于異常類型取決于異常類型異常返回(退出)過程異常返回(退出)過程將LR( R14 )中的值減去偏移量后存入PC,偏移量根據(jù)異常的類型而有所不同;將SPSR的值復(fù)制回CPSR;清零在入口置位的中斷禁止標(biāo)志;注:恢復(fù)CPSR的動(dòng)作會(huì)將T、F和I位自動(dòng)恢復(fù)為異常發(fā)生前的值。

13、異常異常exception異常指正常執(zhí)行的程序流因故被暫時(shí)中止;ARM支持7種異常類型、5種處理器異常工作模式若同時(shí)發(fā)生多個(gè)異常,將按優(yōu)先級(jí)順序處理;異常類型對(duì)應(yīng)異常模式優(yōu)先級(jí)復(fù)位Supervisor1(最高優(yōu)先級(jí))數(shù)據(jù)中止Abort2FIQFIQ3IRQIRQ4指令預(yù)取中止Abort5未定義指令Undefined6SWISupervisor7(最低優(yōu)先級(jí))優(yōu)先級(jí)降低17復(fù)位異常復(fù)位異常Reset 微處理器剛開始上電,其實(shí)就算進(jìn)入了復(fù)位狀態(tài)。后面執(zhí)行時(shí),如果發(fā)生了不可恢復(fù)的異常,也會(huì)強(qiáng)制進(jìn)入復(fù)位異常,復(fù)位操作包括:p1)停止當(dāng)前指令操作,PC寫入:0 x0000_0000。p2) CPSR寄存

14、器做出如下改變 (CPSR7:0 = 8b110_10011): 禁止IRQ中斷, 禁止FIQ中斷; 進(jìn)入ARM指令執(zhí)行狀態(tài); 系統(tǒng)進(jìn)入管理模式。18未定義指令異常(未定義指令異常(UND)當(dāng)ARM處理器在取到一條指令時(shí),發(fā)現(xiàn)該指令不是一條有效指令,或者識(shí)別是一條協(xié)處理器指令,但是沒有應(yīng)答時(shí),進(jìn)入的異常模式將進(jìn)行如下操作:p1)停止當(dāng)前指令操作,停止當(dāng)前指令操作,PC寫入:寫入:Ox0000_0004。p2)下一條指令的存放地址寫入下一條指令的存放地址寫入R14_und。p3) CPSR寫入SPSR_und。p4) CPSR寄存器做出如下改變(CPSR7:0=8b1x0_11011)禁止IRQ

15、中斷;進(jìn)入ARM指令執(zhí)行狀態(tài);系統(tǒng)進(jìn)入未定義指令異常模式(UND)。由于這條指令屬于未定義指令,因此這條指令并不執(zhí)行。當(dāng)前狀態(tài)寄存器CPSR會(huì)自動(dòng)保存入SPSR_und,下一條指令地址保存入R14_und。未定義指令異常處理完畢后,它可以把PSR_und送回CPSR,可以把R14_und寫回PC,這樣就可跳過未定義指令繼續(xù)執(zhí)行。如果未定義指令已經(jīng)被排除,可以用R14_und-4替代R14 und寫回PC,則可從未定義指令處執(zhí)行程序。軟件中斷異常軟件中斷異常(SWI)軟件中斷異常是由微處理器執(zhí)行SWI指令時(shí)觸發(fā)的。軟件中斷異常和未定義指令異常一樣,不是由外界的中斷引起的,而是由指令執(zhí)行引起的。未

16、定義指令異常是由非法指令引起的,軟件中斷異常是由合法的“中斷”指令引起的。SWI指令將進(jìn)行如下操作:p 1)對(duì)對(duì)PC寫入寫入Ox0000 0008。p 2)下一條指令的地址寫入下一條指令的地址寫入R14_svc。p 3) CPSR寫入SPSR_svc。p 4) CPSR寄存器做出如下改變 (CPSR7:0 = 8blx0_10011): 禁止IRQ中斷; 進(jìn)入ARM指令執(zhí)行狀態(tài); 系統(tǒng)進(jìn)入管理模式(SVC)。在軟件中斷后,可以輕松返回,它只需把SPSR_svc寫回CPSR,把R14_svc寫回PC,則可以繼續(xù)從SWI的下一條指令開始執(zhí)行。20取指令異常(取指令異常(abort)取指令異常是在向

17、指令池取指令時(shí),指令池發(fā)出該次取指令操作異常的信號(hào),而微處理器會(huì)進(jìn)入的一種中斷異常。如果觸發(fā)取指令異常,則微處理器會(huì)進(jìn)行如下操作:p 1)當(dāng)前指令發(fā)生異常,并不執(zhí)行,當(dāng)前指令發(fā)生異常,并不執(zhí)行,PC寫入寫入0 x0000_000C。p 2)下一條指令地址寫入下一條指令地址寫入R14_abt。p 3) CPSR寫入SPSR_abt。p 4) CPSR寄存器做出如下改變(CPSR7:0 =8blx0_10111): 禁止IRQ中斷; 進(jìn)入ARM指令執(zhí)行狀態(tài); 系統(tǒng)進(jìn)入數(shù)據(jù)訪問異常模式(ABT)。l 取指令異常引導(dǎo)微處理器進(jìn)入排除異常的中斷服務(wù)程序。在排除異常完畢后,可能會(huì)再次取該條指令,則可以通過

18、把R14_abt 4寫入PC來實(shí)現(xiàn)。21數(shù)據(jù)處理異常(數(shù)據(jù)處理異常(abort)向數(shù)據(jù)池進(jìn)行數(shù)據(jù)處理操作時(shí),數(shù)據(jù)池也會(huì)發(fā)出異常信號(hào),這時(shí)的異常稱為數(shù)據(jù)處理異常。在發(fā)生數(shù)據(jù)處理異常時(shí),數(shù)據(jù)處理指令已經(jīng)執(zhí)行完畢,它在發(fā)生數(shù)據(jù)處理異常時(shí),數(shù)據(jù)處理指令已經(jīng)執(zhí)行完畢,它的的下一條指令正在執(zhí)行,當(dāng)然由于發(fā)生了異常,它的下一條指令必須放棄執(zhí)下一條指令正在執(zhí)行,當(dāng)然由于發(fā)生了異常,它的下一條指令必須放棄執(zhí)行行。發(fā)生數(shù)據(jù)處理異常時(shí),微處理器會(huì)進(jìn)行如下操作:p 1)下一條指令放棄執(zhí)行,PC寫入0 x0000_0010。p 2)下一條指令的下一條的地址,也就是數(shù)據(jù)異常對(duì)應(yīng)執(zhí)行指令的地址+8,寫入R14_abt。p

19、3) CPSR寫入SPSR_abt。 ;p 4) CPSR寄存器做出如下改變(CPSR7:0 = 8blx0_10111): 禁止IRQ中斷; 進(jìn)入ARM指令執(zhí)行狀態(tài); 系統(tǒng)進(jìn)入數(shù)據(jù)訪問異常模式(ABT)。n 數(shù)據(jù)處理異常發(fā)生時(shí),正處于下一條指令執(zhí)行的時(shí)刻,因此,對(duì)處理現(xiàn)數(shù)據(jù)處理異常發(fā)生時(shí),正處于下一條指令執(zhí)行的時(shí)刻,因此,對(duì)處理現(xiàn)場(chǎng)的保留都是基于下一條指令的。如果我們需薯重新執(zhí)行發(fā)生數(shù)據(jù)處理場(chǎng)的保留都是基于下一條指令的。如果我們需薯重新執(zhí)行發(fā)生數(shù)據(jù)處理異常的指令,則應(yīng)該對(duì)異常的指令,則應(yīng)該對(duì)R14_abt減去減去8,這才是發(fā)生數(shù)據(jù)處理異常的指令。,這才是發(fā)生數(shù)據(jù)處理異常的指令。22IRQ中斷

20、異常中斷異常IRQ中斷由外部中斷輸入引起,是由輸入端口irq為一個(gè)周期的高電平觸發(fā)的,當(dāng)IRQ中斷生效,則會(huì)進(jìn)行下列操作:p 1)當(dāng)前指令放棄執(zhí)行,當(dāng)前指令放棄執(zhí)行,PC寫入寫入Ox0000_0018。p 2)下一條指令的地址寫入下一條指令的地址寫入R14_irq。p 3) CPSRTs入SPSR_irq。p 4) CPSR寄存器做出如下改變(CPSR7:0 = 8blx0_10010): 禁止IRQ中斷; 進(jìn)入ARM指令執(zhí)行狀態(tài); 系統(tǒng)進(jìn)入外部中斷模式(IRQ)。n 一旦進(jìn)入IRQ模式,首先是對(duì)cpsr_i置位,避免新的IRQ中斷對(duì)其影響,形成IRQ中斷嵌套,但是并能不禁止FIQ中斷,因?yàn)镕

21、IQ中斷具有較高的優(yōu)先級(jí)。需要返回現(xiàn)場(chǎng)時(shí),將執(zhí)行發(fā)生需要返回現(xiàn)場(chǎng)時(shí),將執(zhí)行發(fā)生IRQ中斷放棄執(zhí)行的指令,則可以執(zhí)行中斷放棄執(zhí)行的指令,則可以執(zhí)行指令指令SUBS PC R14,#4。它不僅對(duì)PC寫入放棄執(zhí)行的那條指令的地址,而且同時(shí)還會(huì)把SPSR_irq寫回CPSR。23FIQ中斷異常中斷異常FIQ中斷異常和IRQ中斷類似,都是由外部輸入端口觸發(fā)的。也可由cpsr_f來禁止它生效。在cpsr_f為低電平,外部生成FIQ中斷時(shí),會(huì)進(jìn)行下列操作:p 1)當(dāng)前指令放棄執(zhí)行,當(dāng)前指令放棄執(zhí)行,PC寫入寫入0 x0000_00IC。p 2)下一條指令的地址寫入下一條指令的地址寫入R14_fiq。p 3)

22、 CPSRs入SPSR_fiq。p 4) CPSR寄存器做出如下改變(CPSR7:0 = 8b110_10001): 禁止IRQ中斷;禁止FIQ中斷;進(jìn)入ARM指令執(zhí)行狀態(tài); 系統(tǒng)進(jìn)入快速中斷模式(FIQ)。與IRQ中斷異常不同,F(xiàn)IQ中斷異常會(huì)禁用cpsr_f,這樣會(huì)避免進(jìn)入FIQ中斷嵌套。FIQ中斷有專有的寄存器R8-R14。因此進(jìn)入FIQ中斷,對(duì)于R8-R14來說,不用保存然后導(dǎo)入這個(gè)過程。把FIQ中斷的入口放在所有中斷的入口的最后,可以不用在0 x0000_00IC中放置跳轉(zhuǎn)指令令,而是可以直接放置執(zhí)行程序,從0 x0000_00IC繼續(xù)執(zhí)行下去。這樣,F(xiàn)IQ中斷執(zhí)行可以發(fā)揮更高的效率

23、。24寄存器寄存器類別類別寄存器在匯編寄存器在匯編中的名稱中的名稱各模式下實(shí)際訪問的寄存器各模式下實(shí)際訪問的寄存器用戶用戶系統(tǒng)系統(tǒng)管理管理中止中止未定義未定義中斷中斷快中斷快中斷通用寄通用寄存器和存器和程序計(jì)程序計(jì)數(shù)器數(shù)器R0(a1)R0R1(a2)R1R2(a3)R2R3(a4)R3R4(v1)R4R5(v2)R5R6(v3)R6R7(v4)R7R8(v5)R8R8_fiqR9(SB,v6)R9R9_fiqR10(SL,v7)R10R10_fiqR11(FP,v8)R11R11_fiqR12(IP)R12R12_fiqR13(SP)R13R13_svcR13_abtR13_undR13_ir

24、qR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15狀態(tài)寄狀態(tài)寄存器存器CPSRCPSRSPSR無無SPSR_svc SPSR_abtSPSR_und SPSR_irq SPSR_fiq無無CPSRR15R14R13R12R11R10R9R8R7R6R5R4R3R2R1R0用戶用戶無無CPSRR15R14R13R12R11R10R9R8R7R6R5R4R3R2R1R0系統(tǒng)系統(tǒng)SPSR_svcCPSRR15R14_svcR13_svcR12R11R10R9R8R7R6R5R4R3R2R1R0管理管理SPSR_abtCPSR

25、R15R14_abtR13_abtR12R11R10R9R8R7R6R5R4R3R2R1R0中止中止SPSR_undCPSRR15R14_undR13_undR12R11R10R9R8R7R6R5R4R3R2R1R0未定義未定義SPSR_irqCPSRR15R14_irqR13_irqR12R11R10R9R8R7R6R5R4R3R2R1R0中斷中斷SPSR_fiqCPSRR15R14_fiqR13_fiqR12_fiqR11_fiqR10_fiqR9_fiqR8_fiqR7R6R5R4R3R2R1R0快中斷快中斷FIQ中斷有專用的寄存器中斷有專用的寄存器R8-R1425異常exception

26、的操作異常類型操作復(fù)位停止當(dāng)前指令操作,PC寫入:0 x0000_0000。數(shù)據(jù)中止下一條指令放棄執(zhí)行,PC寫入0 x0000_0010。下一條指令的下一條的地址,也就是數(shù)據(jù)異常對(duì)應(yīng)執(zhí)行指令的地址+8,寫入R14_abt。FIQ當(dāng)前指令放棄執(zhí)行,PC寫入x0000_00IC。下一條指令的地址寫入R14_fiq。IRQ當(dāng)前指令放棄執(zhí)行,PC寫入x0000_0018。下一條指令的地址寫入R14_irq。指令預(yù)取中止當(dāng)前指令發(fā)生異常,并不執(zhí)行,PC寫入0 x0000_000C。下一條指令地址寫入R14_abt。未定義指令停止當(dāng)前指令操作,PC寫入:Ox0000_0004。下一條指令的存放地址寫入R1

27、4_und。SWI對(duì)PC寫入Ox0000 0008,下一條指令的地址寫入R14_svc。27/106Lable程序程序1程序程序2R14R14(LR)寄存器與子程序調(diào)用BL Lable地址地址A?MOV PC,LRR14(地址地址A)Lable?1. 1.程序程序1 1執(zhí)行過程中執(zhí)行過程中調(diào)用程序調(diào)用程序2 2;2.2.程序跳轉(zhuǎn)至標(biāo)號(hào)程序跳轉(zhuǎn)至標(biāo)號(hào)LableLable,執(zhí)行程序,執(zhí)行程序2 2。3.3.同時(shí)硬件將同時(shí)硬件將“BL BL LableLable” 的下一條指令的下一條指令所在地址存入所在地址存入R14R14(LRLR););3.3.程序程序2 2執(zhí)行完后,將執(zhí)行完后,將R14R14

28、 (LRLR)寄存器的內(nèi)容放入)寄存器的內(nèi)容放入PCPC,返回程序,返回程序1 1繼續(xù)執(zhí)行;繼續(xù)執(zhí)行;28/1061. 1.異常返回地址的處理與子程序調(diào)用類似,都是由硬件異常返回地址的處理與子程序調(diào)用類似,都是由硬件自動(dòng)完成。區(qū)別在于有些異常有一個(gè)小自動(dòng)完成。區(qū)別在于有些異常有一個(gè)小常量偏移常量偏移。2.2.當(dāng)發(fā)生異常嵌套時(shí),這些異常之間可能會(huì)發(fā)生沖突。當(dāng)發(fā)生異常嵌套時(shí),這些異常之間可能會(huì)發(fā)生沖突。如用戶模式下發(fā)生如用戶模式下發(fā)生IRQIRQ中斷嵌套中斷嵌套時(shí),時(shí),R14_irqR14_irq中低級(jí)中中低級(jí)中斷返回主程序的地址將被高級(jí)中斷的返回地址所覆蓋;斷返回主程序的地址將被高級(jí)中斷的返回地

29、址所覆蓋;R14(LR)寄存器與異常處理R14R14_irq用戶模式下的程序用戶模式下的程序0IRQ模式下的程序模式下的程序1指令指令m+1.指令指令m+n指令指令m地址地址A地址地址A未被破壞未被破壞IRQ模式下的程序模式下的程序2return指令指令j+1.指令指令j+k指令指令j地址地址B地址地址BR14_irq 被破壞被破壞returnreturn1. 1.執(zhí)行用戶模式執(zhí)行用戶模式下的程序下的程序0 0;2.2.發(fā)生發(fā)生IRQIRQ中斷中斷后,硬件將帶后,硬件將帶偏移的返回地偏移的返回地址存入址存入IRQIRQ模式模式下的下的R14_irqR14_irq寄寄存器,存器,用戶模用戶模式下

30、的式下的R14R14沒有沒有被破壞被破壞;3. IRQ3. IRQ服務(wù)程服務(wù)程序序1 1執(zhí)行完后,執(zhí)行完后,可將可將R14_irqR14_irq寄寄存器的內(nèi)容減存器的內(nèi)容減去偏移量后存去偏移量后存入入PCPC,返回之,返回之前被中斷的程前被中斷的程序;序;4. 4. 如果在如果在IRQIRQ處理程序中打處理程序中打開開IRQIRQ中斷,并中斷,并且再次發(fā)生且再次發(fā)生IRQIRQ中斷;中斷;5. 5. 硬件將返回硬件將返回地址保存在地址保存在R14_irqR14_irq寄存器寄存器中,中,原來保存原來保存的返回地址信的返回地址信息將被覆蓋,息將被覆蓋,造成錯(cuò)誤造成錯(cuò)誤;6. 6. 在程序在程序2

31、 2返回返回到程序到程序1 1,然后,然后在返回到用戶在返回到用戶模式下被中斷模式下被中斷的程序時(shí),發(fā)的程序時(shí),發(fā)生錯(cuò)誤,將不生錯(cuò)誤,將不能正確返回;能正確返回; 解決辦法是確解決辦法是確保保R14R14的對(duì)應(yīng)版本的對(duì)應(yīng)版本在發(fā)生中斷嵌套在發(fā)生中斷嵌套時(shí)不再保存任何時(shí)不再保存任何有意義的值(將有意義的值(將R14R14入棧),或者入棧),或者切換到其它處理切換到其它處理器模式下。器模式下。R15(PC)寄存器的讀操作)寄存器的讀操作l ARM指令以字為單位,因此R15的最低兩位總是為0;l R15的值是處理器正在取指的指令地址。因?yàn)橛辛魉€,它與當(dāng)前正在執(zhí)行指令的地址之間存在一個(gè)偏移(對(duì)于確定

32、的ARM芯片該值為常量)。l 當(dāng)使用指令STR/STM保存R15時(shí),不同芯片中(可能是三級(jí)流水或五級(jí)流水)PC偏移量可能是8或12,因此需事先計(jì)算出該芯片的PC偏移量。30/1061. 1. 寫入寫入R15 R15 的值被當(dāng)作指令地址,程序?qū)倪@個(gè)的值被當(dāng)作指令地址,程序?qū)倪@個(gè)地址處繼續(xù)執(zhí)行(相當(dāng)于執(zhí)行地址處繼續(xù)執(zhí)行(相當(dāng)于執(zhí)行無條件跳轉(zhuǎn)無條件跳轉(zhuǎn)););2.2. 由于由于ARMARM指令以字為邊界,因此寫入指令以字為邊界,因此寫入R15R15的值的值最低兩位通常為最低兩位通常為0b000b00。具體的規(guī)則取決于內(nèi)核。具體的規(guī)則取決于內(nèi)核結(jié)構(gòu)的版本:結(jié)構(gòu)的版本: 在在V3V3及以下版本中,寫

33、入及以下版本中,寫入R15R15的值的最低兩位的值的最低兩位被忽略,因此跳轉(zhuǎn)地址由指令的實(shí)際目標(biāo)地址被忽略,因此跳轉(zhuǎn)地址由指令的實(shí)際目標(biāo)地址(寫入(寫入R15R15的值)和的值)和0 xFFFFFFFC0 xFFFFFFFC相與得到;相與得到; 在在V4V4及以上版本中,寫入及以上版本中,寫入R15R15的值的最低兩位的值的最低兩位如果不為如果不為0 0,結(jié)果將不可預(yù)測(cè)。,結(jié)果將不可預(yù)測(cè)。R15(PC)寄存器的寫操作31/106異常響應(yīng)過程異常響應(yīng)過程在在LRLR中保存返回地址信息;中保存返回地址信息; ARMARM狀態(tài)下將當(dāng)前指令地址加狀態(tài)下將當(dāng)前指令地址加4 4或加或加8 8復(fù)制到復(fù)制到L

34、RLR ThumbThumb狀態(tài)下將當(dāng)前指令地址加狀態(tài)下將當(dāng)前指令地址加2 2、4 4或加或加8 8 復(fù)制到復(fù)制到LRLR將將CPSRCPSR復(fù)制到適當(dāng)?shù)膹?fù)制到適當(dāng)?shù)腟PSRSPSR中;中;將將CPSRCPSR模式位模式位強(qiáng)制設(shè)置為與異常類型相對(duì)應(yīng)強(qiáng)制設(shè)置為與異常類型相對(duì)應(yīng)的值;的值;強(qiáng)制強(qiáng)制PCPC從相關(guān)的從相關(guān)的異常向量異常向量處取指;處取指;注注1 1:中斷異常時(shí)置位:中斷異常時(shí)置位中斷禁止中斷禁止標(biāo)志可以防止不受控制的異常嵌套標(biāo)志可以防止不受控制的異常嵌套 2 2:異??偸窃冢寒惓?偸窃贏RMARM狀態(tài)狀態(tài)中處理。若處理器處于中處理。若處理器處于ThumbThumb狀態(tài)時(shí)狀態(tài)時(shí)發(fā)生異常

35、,則異常向量地址裝入發(fā)生異常,則異常向量地址裝入PCPC時(shí)會(huì)自動(dòng)切換到時(shí)會(huì)自動(dòng)切換到ARMARM狀態(tài)狀態(tài)。取決于異常類型取決于異常類型32/106程序AIRQ服務(wù)程序系統(tǒng)模式IRQ模式程序寄存器組異常響應(yīng)(進(jìn)入)過程異常響應(yīng)(進(jìn)入)過程1. 1. 程序運(yùn)行用戶程序,假定當(dāng)前處程序運(yùn)行用戶程序,假定當(dāng)前處理器狀態(tài)為理器狀態(tài)為ThumbThumb狀態(tài)、允許狀態(tài)、允許IRQIRQ中斷;中斷;2. 2. 用戶程序運(yùn)行時(shí)發(fā)生用戶程序運(yùn)行時(shí)發(fā)生IRQIRQ中斷,中斷,硬件硬件完成以下動(dòng)作:完成以下動(dòng)作:LR_sysSPSR_irqLR_irqLRPCCPSRSPSRSYS1?0. . .? ? ? ?MO

36、DTFI. . .N Z C V置位置位I I位(禁止位(禁止IRQIRQ中斷)中斷)清零清零T T位(進(jìn)入位(進(jìn)入ARMARM狀態(tài))狀態(tài)) 設(shè)置設(shè)置MODMOD位,切換處理器模位,切換處理器模式至式至IRQIRQ模式模式將返回地址信息存入將返回地址信息存入IRQIRQ模式的模式的LRLR寄存器寄存器將將CPSRCPSR寄存器內(nèi)容存入寄存器內(nèi)容存入IRQIRQ模式的模式的SPSRSPSR寄存器寄存器將跳轉(zhuǎn)地址存入將跳轉(zhuǎn)地址存入PCPC,實(shí)現(xiàn)跳轉(zhuǎn),實(shí)現(xiàn)跳轉(zhuǎn)IRQ0?1. . .? ? ? ?BackAddrJumpAddrJumpSYS1?0. . .?“?”表示對(duì)該位不關(guān)心表示對(duì)該位不關(guān)心33

37、/106異常返回(退出)過程異常返回(退出)過程 將將LRLR( R14 R14 )中的值減去偏移量后)中的值減去偏移量后存入存入PCPC,偏移量根據(jù)異常的類型而,偏移量根據(jù)異常的類型而有所不同;有所不同; 將將SPSRSPSR的值復(fù)制回的值復(fù)制回CPSRCPSR; 清零在入口置位的清零在入口置位的中斷禁止標(biāo)志中斷禁止標(biāo)志;注:恢復(fù)注:恢復(fù)CPSRCPSR的動(dòng)作會(huì)將的動(dòng)作會(huì)將T T、F F和和I I位自動(dòng)恢復(fù)位自動(dòng)恢復(fù)為異常發(fā)生前的值。為異常發(fā)生前的值。34/106在異常處理結(jié)束后,在異常處理結(jié)束后,異常處理程序異常處理程序完成以完成以下動(dòng)作:下動(dòng)作:程序AIRQ服務(wù)程序系統(tǒng)模式IRQ模式程序寄存器組異常返回(退出)過程異常返回(退出)過程LR_sysSPSR_irqLR_irqLRPCCPSRSPSRSYS1?0. . .? ? ? ?MO

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論