ARM7體系結構專業講堂_第1頁
ARM7體系結構專業講堂_第2頁
ARM7體系結構專業講堂_第3頁
ARM7體系結構專業講堂_第4頁
ARM7體系結構專業講堂_第5頁
已閱讀5頁,還剩69頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第3章ARM7體系結構第3章目錄1.簡介2.ARM7TDMI3.ARM7TDMI的模塊和內部框圖4.體系結構直接支持的數據類型5.處理器狀態6.處理器模式7.內部存放器8.程序狀態存放器9.異常10.中斷延遲11.復位12.存儲器及存儲器映射I/O13.尋址方式簡介14.ARM7指令簡介15.協處理器接口16.調試接口簡介17.ETM接口簡介第3章目錄1.ARM體系結構2.ARM7TDMI3.ARM7TDMI的模塊和內部框圖4.體系結構直接支持的數據類型5.處理器狀態6.處理器模式7.內部存放器8.程序狀態存放器9.異常10.中斷延遲11.復位12.存儲器及存儲器映射I/O13.尋址方式簡介14.ARM7指令簡介15.協處理器接口16.調試接口簡介17.ETM接口簡介3.1ARM簡介ARM體系結構ARM處理器為RISC芯片,其簡單的結構使ARM內核非常小,這使得器件的功耗也非常低。它具有經典RISC的特點:大的、統一的寄存器文件;裝載/保存結構,數據處理操作只針對寄存器的內容,而不直接對存儲器進行操作;簡單的尋址模式;統一和固定長度的指令域,簡化了指令的譯碼。3.1ARM簡介ARM體系結構ARM體系結構的特點:每條數據處理指令都對算術邏輯單元和移位器控制,以實現ALU和移位器的最大利用;地址自動增加和減少尋址模式,優化程序循環;多寄存器裝載和存儲指令實現最大數據吞吐量;所有指令的條件執行實現最快速的代碼執行。第3章目錄1.簡介2.ARM7TDMI3.ARM7TDMI的模塊和內部框圖4.體系結構直接支持的數據類型5.處理器狀態6.處理器模式7.內部存放器8.程序狀態存放器9.異常10.中斷延遲11.復位12.存儲器及存儲器映射I/O13.尋址方式簡介14.ARM7指令簡介15.協處理器接口16.調試接口簡介17.ETM接口簡介3.2ARM7TDMI簡介ARM7TDMI基于ARM體系結構V4版本,是目前低端的ARM核。具有廣泛的應用,其最顯著的應用為數字移動電話。注意:“ARM核〞并不是芯片,ARM核與其它部件如RAM、ROM、片內外設組合在一起才能構成現實的芯片。3.2ARM7TDMI簡介ARM7TDMI支持32位尋址范圍,并彌補了ARM6不能在低于5V電源電壓下工作的缺乏。ARM7TDMI的后綴意義為:支持高密度16位的Thumb指令集;支持片上調試;支持64位乘法;支持EmbededICE觀察硬件;ARM7TDMI的可綜合(synthesizable)版本(軟核),對應用工程師來說其編程模型與ARM7TDMI一致;ARM7TDMI-S3.2ARM7TDMI簡介ARM7TDMI處理器是ARM通用32位微處理器家族的成員之一。它具有優異的性能,但功耗卻很低,使用門的數量也很少。它屬于精簡指令集計算機〔RISC〕,比復雜指令集計算機〔CISC〕要簡單得多。這樣的簡化實現了:高的指令吞吐量;出色的實時中斷響應;小的、高性價比的處理器宏單元。3.2ARM7TDMI三級流水線ARM7TDMI處理器使用流水線來增加處理器指令流的速度。這樣可使幾個操作同時進行,并使處理和存儲器系統連續操作,能提供0.9MIPS/MHz的指令執行速度。ARM7TDMI的流水線分3級,分別為:取指

譯碼

執行3.2ARM7TDMI三級流水線正常操作過程中,在執行一條指令的同時對下一條指令進行譯碼,并將第三條指令從存儲器中取出。這三條指令之間的位置關系如下表所示:流水線上各指令的地址流水線工位描述ARM指令集Thumb指令集PCPC取指指令從存儲器中取出PC-4PC-2譯碼對指令使用的寄存器進行譯碼PC-8PC-4執行從寄存器組中讀出寄存器,執行移位和ALU操作,寄存器被寫回到寄存器組中3.2ARM7TDMI存儲器訪問ARM7TDMI處理器使用了馮·諾依曼〔VonNeumann〕結構,指令和數據共用一條32位總線。只有裝載、存儲和交換指令可以對存儲器中的數據進行訪問。數據可以是字節〔8位〕、半字〔16位〕或者字〔32位〕。3.2ARM7TDMI存儲器訪問計算機結構說明:“馮·諾依曼〞結構:把代碼作為一種特殊的數據來操作,指令總線和數據總線及其存儲區域是統一的;“哈佛〞結構:指令總線和數據總線及其存儲區是分開、獨立的。3.2ARM7TDMI存儲器訪問ARM7TDMI處理器的存儲器接口可以使潛在的性能得以實現,這樣減少了存儲器的使用。對速度有嚴格要求的控制信號使用流水線,這樣使系統控制功能以標準的低功耗邏輯實現。ARM7TDMI處理器的存儲器周期有4個根本類型:內部周期;非連續的周期;連續的周期;協處理器存放器的傳輸周期。第3章目錄1.簡介2.ARM7TDMI3.ARM7TDMI的模塊和內部框圖4.體系結構直接支持的數據類型5.處理器狀態6.處理器模式7.內部存放器8.程序狀態存放器9.異常10.中斷延遲11.復位12.存儲器及存儲器映射I/O13.尋址方式簡介14.ARM7指令簡介15.協處理器接口16.調試接口簡介17.ETM接口簡介3.3ARM7TDMI的模塊和內核框圖ARM7TDMI模塊框圖EmbeddedICE-RTCPUDBGRNG(0)DBGRNG(1)DBGEXT(0)DBGEXT(1)TAP數據總線ADDR[31:0]LOCKWRITESIZE[1:0]PROT[1:0]TRANS[1:0]WDATA[31:0]RDATA[31:0]DBGTDIDBGnTRSTDBGTMSDBGTCKENDBGTDO宏單元控制器協處理器接口信號掃描鏈1掃描鏈2EmbeddedICE-RT3.3ARM7TDMI的模塊和內核框圖ARM7TDMI內核框圖地址存放器存放器組31*32位存放器〔6個狀態存放器〕地址增加器乘法器桶形移位器32位ALU寫數據存放器指令管線讀數據存放器Thumb指令譯碼器指令譯碼和控制邏輯ADDR[31:0]CLKCLENCFGBIGENDnIRQnFIQnRESETABORTLOCKWRITESIZE[1:0]PROT[1:0]TRANS[1:0]DBG輸出DBG輸入CP控制CP握手WDATA[31:0]RDATA[31:0]掃描調試控制3.3ARM7TDMI的模塊和內核框圖ARM7TDMI功能框圖LPC2378的功能框圖ARM7TDMI-SCPUAHBToVPBEMCVICI2C串行接口SPI串行接口UART0&1CAN看門狗定時器系統控制外部中斷TIMER0/1ADC通用I/OPWM0實時時鐘SRAMFlashAHB總線ARM7局部總線系統功能第3章目錄1.簡介2.ARM7TDMI3.ARM7TDMI的模塊和內部框圖4.體系結構直接支持的數據類型5.處理器狀態6.處理器模式7.內部存放器8.程序狀態存放器9.異常10.中斷延遲11.復位12.存儲器及存儲器映射I/O13.尋址方式簡介14.ARM7指令簡介15.協處理器接口16.調試接口簡介17.ETM接口簡介3.4體系結構直接支持的數據類型體系結構直接支持的數據類型ARM處理器支持以下數據類型:字節8位半字16位〔必須分配為占用兩個字節〕字32為〔必須分配為占用4各字節〕1112342體系結構直接支持的數據類型注意:V4版本之后的ARM結構都支持這3種結構〔包括V4版本〕,而以前的版本只支持字節和字;當數據類型定義為無符號型時,N位數據值使用正常的二進制格式表示范圍為0~2N-1的非負整數;當數據類型定義為有符號型時,N位數據值使用2的補碼格式表示范圍為-2N-1~+2N-1-1的整數;3.4體系結構直接支持的數據類型體系結構直接支持的數據類型注意:所有數據操作,例如ADD,都以字為單位;裝載和保存指令可以對字節、半字和字進行操作,當裝載字節或半字時自動實現零擴展或符號擴展;ARM指令的長度剛好是1個字〔分配為占用4個字節〕,Thumb指令的長度剛好是半字〔占用2個字節〕。3.4體系結構直接支持的數據類型第3章目錄1.簡介2.ARM7TDMI3.ARM7TDMI的模塊和內部框圖4.體系結構直接支持的數據類型5.處理器狀態6.處理器模式7.內部存放器8.程序狀態存放器9.異常10.中斷延遲11.復位12.存儲器及存儲器映射I/O13.尋址方式簡介14.ARM7指令簡介15.協處理器接口16.調試接口簡介17.ETM接口簡介3.5處理器狀態處理器狀態ARM7TDMI處理器內核使用V4T版本的ARM結構,該結構包含32位ARM指令集和16位Thumb指令集。因此ARM7TDMI處理器有兩種操作狀態:ARM狀態:32位,這種狀態下執行的是字方式的ARM指令;Thumb狀態:16位,這種狀態下執行半字方式的Thumb指令。注意:兩個狀態之間的切換并不影響處理器模式或存放器內容。3.5處理器狀態處理器狀態使用BX指令將ARM7TDMI內核的操作狀態在ARM狀態和Thumb狀態之間進行切換〔詳見第4章〕,程序如下所示。;從Arm狀態切換到Thumb狀態LDRR0,=Lable+1BXR0;從Thumb狀態切換到ARM狀態LDRR0,=LableBXR0地址最低位為1,表示切換到Thumb狀態地址最低位為0,表示切換到ARM狀態跳轉地址標號第3章目錄1.簡介2.ARM7TDMI3.ARM7TDMI的模塊和內部框圖4.體系結構直接支持的數據類型5.處理器狀態6.處理器模式7.內部存放器8.程序狀態存放器9.異常10.中斷延遲11.復位12.存儲器及存儲器映射I/O13.尋址方式簡介14.ARM7指令簡介15.協處理器接口16.調試接口簡介17.ETM接口簡介3.6處理器模式簡介ARM體系結構支持7種處理器模式,分別為:用戶模式、快中斷模式、中斷模式、管理模式、中止模式、未定義模式和系統模式,如下表所示。這樣的好處是可以更好的支持操作系統并提高工作效率。ARM7TDMI完全支持這七種模式。處理器模式說明備注用戶(usr)正常程序工作模式不能直接切換到其它模式系統(sys)用于支持操作系統的特權任務等與用戶模式類似,但具有可以直接切換到其它模式等特權快中斷(fiq)支持高速數據傳輸及通道處理FIQ異常響應時進入此模式中斷(irq)用于通用中斷處理IRQ異常響應時進入此模式管理(svc)操作系統保護代碼系統復位和軟件中斷響應時進入此模式中止(abt)用于支持虛擬內存和/或存儲器保護在ARM7TDMI沒有大用處未定義(und)支持硬件協處理器的軟件仿真未定義指令異常響應時進入此模式3.6處理器模式處理器模式3.6處理器模式特權模式處理器模式說明備注用戶(usr)正常程序工作模式不能直接切換到其它模式系統(sys)用于支持操作系統的特權任務等與用戶模式類似,但具有可以直接切換到其它模式等特權快中斷(fiq)支持高速數據傳輸及通道處理FIQ異常響應時進入此模式中斷(irq)用于通用中斷處理IRQ異常響應時進入此模式管理(svc)操作系統保護代碼系統復位和軟件中斷響應時進入此模式中止(abt)用于支持虛擬內存和/或存儲器保護在ARM7TDMI沒有大用處未定義(und)支持硬件協處理器的軟件仿真未定義指令異常響應時進入此模式除用戶模式外,其它模式均為特權模式。ARM內部存放器和一些片內外設在硬件設計上只允許〔或者可選為只允許〕特權模式下訪問。此外,特權模式可以自由的切換處理器模式,而用戶模式不能直接切換到別的模式。未定義(und)中止(abt)管理(svc)中斷(irq)快中斷(fiq)系統(sys)3.6處理器模式異常模式處理器模式說明備注用戶(usr)正常程序工作模式不能直接切換到其它模式系統(sys)用于支持操作系統的特權任務等與用戶模式類似,但具有可以直接切換到其它模式等特權快中斷(fiq)支持高速數據傳輸及通道處理FIQ異常響應時進入此模式中斷(irq)用于通用中斷處理IRQ異常響應時進入此模式管理(svc)操作系統保護代碼系統復位和軟件中斷響應時進入此模式中止(abt)用于支持虛擬內存和/或存儲器保護在ARM7TDMI沒有大用處未定義(und)支持硬件協處理器的軟件仿真未定義指令異常響應時進入此模式未定義(und)中止(abt)管理(svc)中斷(irq)快中斷(fiq)這五種模式稱為異常模式。它們除了可以通過程序切換進入外,也可以由特定的異常進入。當特定的異常出現時,處理器進入相應的模式。每種異常模式都有一些獨立的存放器,以防止異常退出時用戶模式的狀態不可靠。3.6處理器模式用戶和系統模式處理器模式說明備注用戶(usr)正常程序工作模式不能直接切換到其它模式系統(sys)用于支持操作系統的特權任務等與用戶模式類似,但具有可以直接切換到其它模式等特權快中斷(fiq)支持高速數據傳輸及通道處理FIQ異常響應時進入此模式中斷(irq)用于通用中斷處理IRQ異常響應時進入此模式管理(svc)操作系統保護代碼系統復位和軟件中斷響應時進入此模式中止(abt)用于支持虛擬內存和/或存儲器保護在ARM7TDMI沒有大用處未定義(und)支持硬件協處理器的軟件仿真未定義指令異常響應時進入此模式這兩種模式都不能由異常進入,而且它們使用完全相同的存放器組。系統模式是特權模式,不受用戶模式的限制。操作系統在該模式下訪問用戶模式的存放器就比較方便,而且操作系統的一些特權任務可以使用這個模式訪問一些受控的資源。系統(sys)用戶(usr)模式切換例如USERMODEEQU 0x10FIQMODE EQU 0x11IRQMODE EQU 0x12SVCMODE EQU 0x13ABORTMODEEQU 0x17UNDEFMODEEQU 0x1bMODEMASKEQU 0x1fNOINT EQU 0xc0

mrs r0,cpsrbic r0,r0,#MODEMASKorr r1,r0,#UNDEFMODE|NOINTmsr cpsr_cxsf,r1 ;UndefModeldr sp,=UndefStack

orr r1,r0,#ABORTMODE|NOINTmsr cpsr_cxsf,r1 ;AbortModeldr sp,=AbortStack第3章目錄1.簡介2.ARM7TDMI3.ARM7TDMI的模塊和內部框圖4.體系結構直接支持的數據類型5.處理器狀態6.處理器模式7.內部存放器8.程序狀態存放器9.異常10.中斷延遲11.復位12.存儲器及存儲器映射I/O13.尋址方式簡介14.ARM7指令簡介15.協處理器接口16.調試接口簡介17.ETM接口簡介3.7內部存放器簡介在ARM7TDMI處理器內部有37個用戶可見的存放器。在不同的工作模式和處理器狀態下,程序員可以訪問的存放器也不盡相同。寄存器類別寄存器在匯編中的名稱各模式下實際訪問的寄存器用戶系統管理中止未定義中斷快中斷通用寄存器和程序計數器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_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15狀態寄存器CPSRCPSRSPSR無SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiqARM狀態各模式下的存放器寄存器類別寄存器在匯編中的名稱各模式下實際訪問的寄存器用戶系統管理中止未定義中斷快中斷通用寄存器和程序計數器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_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15狀態寄存器CPSRCPSRSPSR無SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiqARM狀態各模式下的存放器SPSR_fiqSPSR_irqSPSR_undSPSR_abtSPSR_abtCPSRR15R14_fiqR14_irqR14_undR14_abtR14_svcR14R13_fiqR13_irqR13_undR13_abtR13_svcR13R12_fiqR12R11_fiqR11R10_fiqR10R9_fiqR9R8_fiqR8R7R6R5R4R3R2R1R0所有的37個存放器,分成兩大類:31個通用32位存放器;6個狀態存放器。寄存器類別寄存器在匯編中的名稱各模式下實際訪問的寄存器用戶系統管理中止未定義中斷快中斷通用寄存器和程序計數器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_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15狀態寄存器CPSRCPSRSPSR無SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiq無CPSRR15R14R13R12R11R10R9R8R7R6R5R4R3R2R1R0用戶無CPSRR15R14R13R12R11R10R9R8R7R6R5R4R3R2R1R0系統SPSR_abtCPSRR15R14_svcR13_svcR12R11R10R9R8R7R6R5R4R3R2R1R0管理SPSR_abtCPSRR15R14_abtR13_abtR12R11R10R9R8R7R6R5R4R3R2R1R0中止SPSR_undCPSRR15R14_undR13_undR12R11R10R9R8R7R6R5R4R3R2R1R0未定義SPSR_irqCPSRR15R14_irqR13_irqR12R11R10R9R8R7R6R5R4R3R2R1R0中斷SPSR_fiqCPSRR15R14_fiqR13_fiqR12_fiqR11_fiqR10_fiqR9_fiqR8_fiqR7R6R5R4R3R2R1R0快中斷ARM狀態各模式下可以訪問的存放器寄存器類別寄存器在匯編中的名稱各模式下實際訪問的寄存器用戶系統管理中止未定義中斷快中斷通用寄存器和程序計數器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_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15狀態寄存器CPSRCPSRSPSR無SPSR_svcSPSR_abtSPSR_undSPSR_irqSPSR_fiq一般的通用存放器R13_fiqR13_irqR13_undR13_abtR13_svcR13R12_fiqR12R11_fiqR11R10_fiqR10R9_fiqR9R8_fiqR8R7R6R5R4R3R2R1R0在匯編語言中存放器R0~R13為保存數據或地址值的通用存放器。它們是完全通用的存放器,不會被體系結構作為特殊用途,并且可用于任何使用通用存放器的指令。寄存器類別寄存器在匯編中的名稱各模式下實際訪問的寄存器用戶系統管理中止未定義中斷快中斷通用寄存器和程序計數器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_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15狀態寄存器CPSRCPSRSPSR無SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiq一般的通用存放器R13_fiqR13_irqR13_undR13_abtR13_svcR13R12_fiqR12R11_fiqR11R10_fiqR10R9_fiqR9R8_fiqR8R7R6R5R4R3R2R1R0R7R6R5R4R3R2R1R0其中R0~R7為未分組的存放器,也就是說對于任何處理器模式,這些存放器都對應于相同的32位物理存放器。寄存器類別寄存器在匯編中的名稱各模式下實際訪問的寄存器用戶系統管理中止未定義中斷快中斷通用寄存器和程序計數器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_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15狀態寄存器CPSRCPSRSPSR無SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiq一般的通用存放器R14_fiqR14_irqR14_undR14_abtR14_svcR14R13_fiqR13_irqR13_undR13_abtR13_svcR13R12_fiqR12R11_fiqR11R10_fiqR10R9_fiqR9R8_fiqR8存放器R8~R14為分組存放器。它們所對應的物理存放器取決于當前的處理器模式,幾乎所有允許使用通用存放器的指令都允許使用分組存放器寄存器類別寄存器在匯編中的名稱各模式下實際訪問的寄存器用戶系統管理中止未定義中斷快中斷通用寄存器和程序計數器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_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15狀態寄存器CPSRCPSRSPSR無SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiq一般的通用存放器R12_fiqR12R11_fiqR11R10_fiqR10R9_fiqR9R8_fiqR8存放器R8~R12有兩個分組的物理存放器。一個用于除FIQ模式之外的所有存放器模式,另一個用于FIQ模式。這樣在發生FIQ中斷后,可以加速FIQ的處理速度。寄存器類別寄存器在匯編中的名稱各模式下實際訪問的寄存器用戶系統管理中止未定義中斷快中斷通用寄存器和程序計數器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_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15狀態寄存器CPSRCPSRSPSR無SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiq一般的通用存放器存放器R13、R14分別有6個分組的物理存放器。一個用于用戶和系統模式,其余5個分別用于5種異常模式。R14_fiqR14_irqR14_undR14_abtR14_svcR14R13_fiqR13_irqR13_undR13_abtR13_svcR13寄存器類別寄存器在匯編中的名稱各模式下實際訪問的寄存器用戶系統管理中止未定義中斷快中斷通用寄存器和程序計數器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_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15狀態寄存器CPSRCPSRSPSR無SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiq堆棧指針存放器R13〔SP〕存放器R13常作為堆棧指針〔SP〕。在ARM指令集當中,沒有以特殊方式使用R13的指令或其它功能,只是習慣上都這樣使用。但是在Thumb指令集中存在使用R13的指令。寄存器類別寄存器在匯編中的名稱各模式下實際訪問的寄存器用戶系統管理中止未定義中斷快中斷通用寄存器和程序計數器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_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15狀態寄存器CPSRCPSRSPSR無SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiq鏈接存放器R14〔LR〕R14為鏈接存放器〔LR〕,在結構上有兩個特殊功能:在每種模式下,模式自身的R14版本用于保存子程序返回地址;當發生異常時,將R14對應的異常模式版本設置為異常返回地址〔有些異常有一個小的固定偏移量〕。Lable程序A程序BR143.7內部存放器R14存放器與子程序調用BLLable地址A???MOVPC,LRR14(地址A)Lable???1.程序A執行過程中調用程序B;操作流程2.程序跳轉至標號Lable,執行程序B。同時硬件將“BLLable〞指令的下一條指令所在地址存入R14;3.程序B執行最后,將R14存放器的內容放入PC,返回程序A;3.7內部存放器R14存放器與異常發生異常發生時,程序要跳轉至異常效勞程序,對返回地址的處理與子程序調用類似,都是由硬件完成的。區別在于有些異常有一個小常量的偏移。3.7內部存放器R14存放器注意要點當發生異常嵌套時,這些異常之間可能會發生沖突。例如:如果用戶在用戶模式下執行程序時發生了IRQ中斷,用戶模式存放器不會被破壞。但是如果允許在IRQ模式下的中斷處理程序重新使能IRQ中斷,并且發生了嵌套的IRQ中斷時,外部中斷處理程序保存在R14_irq中的任何值都將被嵌套中斷的返回地址所覆蓋。3.7內部存放器R14存放器注意要點R14R14_irq用戶模式下的程序IRQ模式下的程序AareturnB...XA地址A地址A1.執行用戶模式下的程序;2.發生IRQ中斷,硬件將某個地址存入IRQ模式下的R14_irq存放器,用戶模式下的R14沒有被破壞;3.IRQ效勞程序A執行完畢,將R14_irq存放器的內容減去某個常量后存入PC,返回之前被中斷的程序;未被破壞3.7內部存放器R14存放器注意要點R14R14_irq用戶模式下的程序IRQ模式下的程序AaB...XA地址A地址A1.執行用戶模式下的程序;2.發生IRQ中斷,硬件將某個地址存入IRQ模式下的R14_irq存放器,用戶模式下的R14沒有被破壞;3.IRQ效勞程序A執行完畢,將R14_irq存放器的內容減去某個常量后存入PC,返回之前被中斷的程序;未被破壞IRQ模式下的程序BareturnB...XA地址B地址B4.如果在IRQ處理程序中翻開IRQ中斷,并且再次發生IRQ中斷,或者調用子程序;5.硬件將返回地址保存在R14_irq存放器中,原來保存的返回地址將被覆蓋,造成錯誤;被破壞6.在程序B返回到程序A,然后在返回到用戶模式下被中斷的程序時,發生錯誤,將不能正確返回;returnreturn解決方法是確保R14的對應版本在發生中斷嵌套時不再保存任何有意義的值〔將R14入?!?,或者切換到其它處理器模式下。寄存器類別寄存器在匯編中的名稱各模式下實際訪問的寄存器用戶系統管理中止未定義中斷快中斷通用寄存器和程序計數器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_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15狀態寄存器CPSRCPSRSPSR無SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiq程序計數器R15〔PC〕存放器R15為程序計數器〔PC〕,它指向正在取指的地址??梢哉J為它是一個通用存放器,但是對于它的使用有許多與指令相關的限制或特殊情況。如果R15使用的方式超出了這些限制,那么結果將是不可預測的。3.7內部存放器讀R15的限制正常操作時,從R15讀取的值是處理器正在取指的地址,即當前正在執行指令的地址加上8個字節〔兩條ARM指令的長度〕。由于ARM指令總是以字為單位,所以R15存放器的最低兩位總是為0。LDRR0,PC??????PCPC-4PC-8正在執行正在譯碼正在取指流水線狀態地址程序代碼3.7內部存放器讀R15的限制當使用STR或STM指令保存R15時,會有一個例外。這些指令可能將當前指令地址加8字節或加12字節保存〔將來可能還有其它數字〕。偏移量是8還是12取決于具體的ARM芯片,但是對于一個確定的芯片,這個值是一個常量。所以最好防止使用STR和STM指令來保存R15,如果很難做到,那么應當在程序中計算出該芯片的偏移量。3.7內部存放器讀R15的限制計算偏移量程序代碼:SUB R1,PC,#4 ;R1=下面STR指令的地址STR PC,[R0] ;保存STR指令地址+偏移量LDR R0,[R0] ;然后重裝SUB R0,R0,R1 ;計算偏移量3.7內部存放器寫R15的限制正常操作時,寫入R15的值被當作一個指令地址,程序從這個地址處繼續執行〔相當于執行一次無條件跳轉〕。3.7內部存放器寫R15的限制由于ARM指令以字節為邊界,因此寫入R15的值最低兩位通常為0b00。具體的規那么取決于內核結構的版本:在ARM結構V3版及以下版本中,寫入R15的值的最低兩位被忽略,因此跳轉地址由指令的實際目標地址〔寫入R15的值〕和0xFFFFFFFC相與得到;在ARM結構V4版及以上版本中,寫入R15的值的最低兩位為0,如果不是,結果將不可預測。寄存器類別寄存器在匯編中的名稱各模式下實際訪問的寄存器用戶系統管理中止未定義中斷快中斷通用寄存器和程序計數器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_irqR13_fiqR14(LR)R14R14_svcR14_abtR14_undR14_irqR14_fiqR15(PC)R15狀態寄存器CPSRCPSRSPSR無SPSR_abtSPSR_abtSPSR_undSPSR_irqSPSR_fiq程序狀態存放器CPSR存放器CPSR為程序狀態存放器,在異常模式中,另外一個存放器“程序狀態保存存放器〔SPSR〕〞可以被訪問。每種異常都有自己的SPSR,在因為異常事件而進入異常時它保存CPSR的當前值,異常退出時可通過它恢復CPSR。詳細描述參看3.8小節。3.7內部存放器Thumb狀態存放器Thumb狀態存放器集是ARM狀態集的子集,程序員可以直接訪問的存放器為:8個通用存放器R0~R7;程序計數器〔PC〕;堆棧指針〔SP〕;鏈接存放器〔LR〕;有條件訪問程序狀態存放器〔CPSR〕。Thumb狀態各模式下的存放器CPSRCPSR狀態寄存器R15PCR14_fiqR14_irqR14_undR14_abtR14_svcR14LRR13_fiqR13_irqR13_undR13_abtR13_svcR13SPR7R7(v4,wr)R6R6(v3)R5R5(v2)R4R4(v1)R3R3(a4)R2R2(a3)R1R1(a2)R0R0(a1)通用寄存器和程序計數器快中斷中斷未定義中止管理系統用戶各模式下實際訪問的寄存器寄存器在匯編中的名稱寄存器類別注意:括號內為ATPCS中存放器的命名,可以使用RN匯編偽指令將存放器定義多個名字。其中ADS1.2的匯編程序直接支持這些名稱,但注意a1~a4,v1~v4必須用小寫。Thumb狀態下的通用存放器CPSRCPSR狀態寄存器R15PCR14_fiqR14_irqR14_undR14_abtR14_svcR14LRR13_fiqR13_irqR13_undR13_abtR13_svcR13SPR7R7(v4,wr)R6R6(v3)R5R5(v2)R4R4(v1)R3R3(a4)R2R2(a3)R1R1(a2)R0R0(a1)通用寄存器和程序計數器快中斷中斷未定義中止管理系統用戶各模式下實際訪問的寄存器寄存器在匯編中的名稱寄存器類別R7R6R5R4R3R2R1R0在匯編語言中存放器R0~R7為保存數據或地址值的通用存放器。對于任何處理器模式,它們中的每一個都對應于相同的32為物理存放器。它們是完全通用的存放器,不會被體系結構作為特殊的用途,并且可用于任何使用通用存放器的指令。Thumb狀態下的堆棧指針存放器〔SP〕CPSRCPSR狀態寄存器R15PCR14_fiqR14_irqR14_undR14_abtR14_svcR14LRR13_fiqR13_irqR13_undR13_abtR13_svcR13SPR7R7(v4,wr)R6R6(v3)R5R5(v2)R4R4(v1)R3R3(a4)R2R2(a3)R1R1(a2)R0R0(a1)通用寄存器和程序計數器快中斷中斷未定義中止管理系統用戶各模式下實際訪問的寄存器寄存器在匯編中的名稱寄存器類別堆棧指針SP對應ARM狀態的存放器R13。每個異常模式都有其自身的SP分組版本,SP通常指向各異常模式所專用的堆棧。注意:在發生異常時,處理器自動進入ARM狀態。R13_fiqR13_irqR13_undR13_abtR13_svcR13Thumb狀態下的鏈接存放器R14〔LR〕CPSRCPSR狀態寄存器R15PCR14_fiqR14_irqR14_undR14_abtR14_svcR14LRR13_fiqR13_irqR13_undR13_abtR13_svcR13SPR7R7(v4,wr)R6R6(v3)R5R5(v2)R4R4(v1)R3R3(a4)R2R2(a3)R1R1(a2)R0R0(a1)通用寄存器和程序計數器快中斷中斷未定義中止管理系統用戶各模式下實際訪問的寄存器寄存器在匯編中的名稱寄存器類別鏈接存放器LR對應ARM狀態存放器R14,在結構上有兩個特殊功能,詳見“ARM狀態下的鏈接存放器LR〞。注意:在發生異常時,處理器自動進入ARM狀態。R14_fiqR14_irqR14_undR14_abtR14_svcR143.7內部存放器ARM狀態和Thumb狀態之間存放器的關系Thumb狀態存放器與ARM狀態存放器有如下的關系:Thumb狀態R0~R7與ARM狀態R0~R7相同;Thumb狀態CPSR和SPSR與ARM狀態CPSR和SPSR相同;Thumb狀態SP映射到ARM狀態R13;Thu

溫馨提示

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

評論

0/150

提交評論