ARM體系結構與編程-第一章


1. ARM概述與基本編程模型

1.4 ARM處理器模式

  • 用戶模式(User, usr)

  • 快速中斷模式(FIQ, fig)

  • 外部中斷模式(IRQ, irq)

  • 特權模式(Supervisor, sve)

  • 數據訪問中止模式(Abort, abt)

  • 未定義指令中止模式(Undefined, und)

  • 系統模式(System, sys)

用戶模式外的其他6種處理器模式稱為特權模式。這其中,除系統模式外,其他5種模式外,其他5種特權模式稱為異常模式。

1.5 ARM寄存器

ARM處理器共有37個寄存器,包括:

  • 31個通用寄存器,包括程序計數器(PC)在內。都是32位

  • 6個狀態寄存器。32位,只是用其中12位

ARM處理器共有7種不同的處理器模式,每種模式有一組相應的寄存器組。

任意時刻,可見的寄存器包括15個通用寄存器(R0~R14)、一個或兩個狀態寄存器及程序計數器(PC)。

1.5.1 通用寄存器

分為3類:

  • 未備份寄存器,包括R0~R7

  • 備份寄存器,包括R8~R14

  • 程序計數器PC,即R15

1.5.2 程序狀態寄存器

CPSR(當前程序狀態寄存器):可以在任何處理器模式下被訪問,包含條件標志位、中斷禁止位,當前處理器模式標志以及其他的一些控制和狀態位。

SPSR(備份程序狀態寄存器):當特定的異常中斷發生時,這個寄存器用來存放當前寄存器的內容。在異常中斷程序退出時,可以用SPSR中保存到值恢復CPSR。

由於用戶模式和系統模式不是異常中斷模式,所以他們沒有SPSR。當在用戶模式和系統模式訪問SPSR,將會產生不可預知的結果

31 30 29 28 27 26 7 6 5 4 3 2 1 0
N Z C V Q DNM(RAZ) I F T M4 M3 M2 M1 M0

N:=1表示負數

Z:=1結果為0

C:上下溢出

V:符號位溢出

I、F、T及M[4:0]:控制位,I、F為中斷禁止位,IRQ、FIQ。T說明本指令是ARM指令(0)還是Thumb指令(1)。M控制處理器模式。

1.6 ARM體系的異常中斷

執行流程的控制:

  • 順序執行

  • 跳轉指令

  • 中斷發生

1.6.1 ARM中異常中斷種類

異常中斷名稱 含義
復位(Reset) 當處理器復位引腳有效,產生復位中斷,程序跳轉到復位異常中斷處理程序處執行。系統加電、系統復位、跳轉到復位中斷向量處執行(軟復位)
未定義的指令(undefine instruction) 處理器或協處理器認為當前指令未定義
軟件中斷(SWI) 用戶模式下的程序調用特權操作指令
指令預取中止(prefech abort) 預取的指令的地址不存在
數據訪問中止(Data Abort) 數據訪問指令的目標地址不存在
外部中斷請求(IRQ) 處理器的外部中斷請求引腳有效
快速中斷請求(FIQ) 處理器的外部快速中斷請求引腳有效

1.6.2 ARM處理器對異常中斷的響應過程

  • 保存處理器當前狀態、中斷屏蔽位以及條件標志位

  • 設置當前程序狀態寄存器CPSR中相應的位

  • 將寄存器lr_mode設置成返回地址

  • 將程序計數器值(PC),設置成該異常中斷的中斷向量地址,從而跳轉到相應的異常中斷處理程序執行處執行。

R14_ = return link ;設置返回地址
SPSR_ = CPSR  ;保存狀態寄存器
CPSR[4:0] = exception mode number  ;設置執行模式
CPSR[5] = 0  ;運行於ARM模式
if  == Reset or FIQ then
CPSR[6] = 1  ;禁止新的FIQ中斷
CPSR[7] = 1  ;禁止IRQ中斷
PC = exception vector address

1.6.3 從異常中斷處理程序中返回

  • 恢復被中斷的程序的處理器狀態,即將SPSR_mode寄存器內容復制到CPSR中

  • 返回到發生異常中斷的指令的下一條指令處執行,即將lr_mode寄存器的內容復制到程序計數器PC中。

復位異常中斷處理程序不需要返回,在復位異常中斷處理程序開始整個用戶程序的執行,因而它不需要返回

1.7 ARM體系中的存儲系統

1.7.1 ARM體系中的存儲空間

1.7.2 ARM存儲器的格式

  • big-endian

  • little-endian

1.7.3 非對齊的存儲訪問操作

  • 非對齊的指令預取操作

    指令的執行結果不可預知,要么地址值中最低位被忽略

  • 非對齊的數據訪問操作

    對於Load/Store操作:

  1. 執行結果不可預知

  2. 忽略字單元地址的低兩位的值;忽略半字單元地址的最低位的值

  3. 忽略字單元地址值中的低兩位的值;忽略半字單元地址的最低位的值

指令預取和自修改代碼


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM