ARM寄存器小結
1. 用戶(hù)模式(usr):ARM處理器正常的程序執行狀態(tài);
2. 快速中斷模式(fiq):用于高速數據傳輸或通道管理;
3. 外部中斷模式(irq):用于通用的中斷處理;
4. 管理模式(svc):操作系統使用的保護模式;
5. 數據訪(fǎng)問(wèn)終止模式(abt):當數據或指令預取終止時(shí)進(jìn)入該模式,用于虛擬存儲及存儲保護;
6. 系統模式(sys):運行具有特權的操作系統任務(wù);
7. 未定義指令中止模式(und):當未定義指令執行時(shí)進(jìn)入該模式,可用于支持硬件協(xié)處理器的軟件仿真
ARM體系結構的存儲器格式有如下兩種:
大端格式:字數據的高字節存儲在低地址中,字數據的低字節存放在高地址中;
小端格式:與大端存儲格式相反,高地址存放數據的高字節,低地址存放數據的低字節
ARM寄存器總結:
ARM有16個(gè)32位的寄存器(r0到r15)。
r15充當程序寄存器PC,r14(link register)存儲子程序的返回地址,r13存儲的是堆棧地址。
ARM有一個(gè)當前程序狀態(tài)寄存器:CPSR。
一些寄存器(r13,r14)在異常發(fā)生時(shí)會(huì )產(chǎn)生新的instances,比如IRQ處理器模式,這時(shí)處理器使用r13_irq和r14_irq
ARM的子程序調用是很快的,因為子程序的返回地址不需要存放在堆棧中。
1、ARM處理器共有37個(gè)寄存器,其中包括:
i. 31個(gè)通用寄存器,包括程序計數器(PC)在內。都是32位寄存器
ii. 6個(gè)狀態(tài)寄存器,都是32位寄存器,但目前只使用了其中12位
2、ARM處理器有7種不同的處理器模式,在每一種處理器模式中有一組相應的寄存器組。任意時(shí)刻(也就是任意的處理器模式下),可見(jiàn)的寄存器包括15個(gè)通用寄存器(R0~R14)、一個(gè)或兩個(gè)狀態(tài)寄存器及程序計數器(PC)。在所有的寄存器中,有些是各模式共用的同一個(gè)物理寄存器,有些是各模式自己擁有的獨立的物理寄存器。
3、 通用寄存器可以分為3類(lèi):未備份寄存器(R0~R7)、備份寄存器(R8~R14)和程序計數器PC(R15)。對于每一個(gè)未備份寄存器來(lái)說(shuō),在所有的處理器模式下指的都是同一個(gè)物理寄存器。對應備份寄存器R8~R12來(lái)說(shuō),每個(gè)寄存器對應兩個(gè)不同的物理寄存器,這使得中斷處理非常簡(jiǎn)單。例如,僅僅使用R8~R14寄存器時(shí),FIQ處理程序可以不必執行保存和恢復中斷現場(chǎng)的指令,從而使中斷處理過(guò)程非常迅速。對于備份寄存器R13和R14來(lái)說(shuō),每個(gè)寄存器對應6個(gè)不同的物理寄存器,其中的一個(gè)是用戶(hù)模式和系統模式共用的,另外的5個(gè)對應于其他5種處理器模式。
4、每一種異常模式擁有自己的物理的R13。應用程序初始化該R13,使其指向該異常模式專(zhuān)用的棧地址。當進(jìn)入異常模式時(shí),可以將需要使用的寄存器保存在R13所指的棧中;當退出異常處理程序時(shí),將保存在R13所指的棧中的寄存器值彈出。這樣就使異常處理程序不會(huì )破壞被其中斷程序的運行現場(chǎng)。
5、寄存器R14又被稱(chēng)為連接寄存器(Link Register,LR),在A(yíng)RM體系中具有下面兩種特殊的作用:
i. 每一種處理器模式自己的物理R14中存放當前子程序的返回地址。當通過(guò)BL或BLX指令調用子程序時(shí),R14被設置成該子程序的返回地址。在子程序中,當把R14的值復制到程序計數器PC中時(shí),子程序即返回。
ii.當異常中斷發(fā)生時(shí),該異常模式特定的物理R14被設置成該異常模式將要返回的地址,對于有些異常模式,R14的值可能與將返回的地址有一個(gè)常數的偏移量。具體的返回方式與子程序返回方式基本相同。
6、由于A(yíng)RM采用了流水線(xiàn)機制,當正確讀取了PC的值時(shí),該值為當前指令地址值加8個(gè)字節。也就是說(shuō),對于A(yíng)RM指令集來(lái)說(shuō),PC指向當前指令的下兩條指令的地址,由于A(yíng)RM指令是字節對齊的,PC值得第0位和第1位總為0。
7、 對于A(yíng)RM版本3以及更低的版本,寫(xiě)入R15的地址值的bits[1:0]被忽略,對于A(yíng)RM版本4以及更高的版本,程序必須保證寫(xiě)入R15寄存器的地址值的bits[1:0]為0b00;否則會(huì )產(chǎn)生不可預知的結果。對于Thumb指令集來(lái)說(shuō),指令是半字對齊的。處理器將忽略bit[0]。
還有一些指令對于R15的用法有一些特殊的要求。比如,指令BX利用bit[0]來(lái)確定是ARM指令,還是Thumb指令。
8、指令mov pc, pc將程序跳轉到當前指令下面第2條指令處執行。類(lèi)似的指令還有add pc, pc, #0
9、 每一種處理器模式下都有一個(gè)專(zhuān)用的物理狀態(tài)寄存器,稱(chēng)為SPSR(備份程序狀態(tài)寄存器)。當特定的異常中斷發(fā)生時(shí),這個(gè)寄存器用于存放當前程序狀態(tài)寄存器的內容。在異常中斷程序退出時(shí),可以用SPSR中保存的值來(lái)恢復CPSR。
10、 由于用戶(hù)模式和系統模式不是異常中斷模式,所以它們沒(méi)有SPSR。當在用戶(hù)模式或系統模式中 訪(fǎng)問(wèn)SPSR,將會(huì )產(chǎn)生不可預知的結果。
-----------------------------------------------------------------------------------------------------
ARM處理器共有37個(gè)寄存器。其中包括:31個(gè)通用寄存器,包括程序計數器(PC)在內。這些寄存器都是32位寄存器。以及6個(gè)32位狀態(tài)寄存器。但目前只使用了其中12位。ARM處理器共有7種不同的處理器模式,在每一種處理器模式中有一組相應的寄存器組。任意時(shí)刻(也就是任意的處理器模式下),可見(jiàn)的寄存器包括15個(gè)通用寄存器(R0~R14)、一個(gè)或兩個(gè)狀態(tài)寄存器及程序計數器(PC)。
用戶(hù)模式 | 系統模式 | 特權模式 | 中止模式 | 未定義指令模式 | 外部中斷模式 | 快速中斷模式 |
R0 | R0 | R0 | R0 | R0 | R0 | R0 |
R1 | R1 | R1 | R1 | R1 | R1 | R1 |
R2 | R2 | R2 | R2 | R2 | R2 | R2 |
R3 | R3 | R3 | R3 | R3 | R3 | R3 |
R4 | R4 | R4 | R4 | R4 | R4 | R4 |
R5 | R5 | R5 | R5 | R5 | R5 | R5 |
R6 | R6 | R6 | R6 | R6 | R6 | R6 |
R8 | R8 | R8 | R8 | R8 | R8 | R8_fiq |
R9 | R9 | R9 | R9 | R9 | R9 | R9_fiq |
R10 | R10 | R10 | R10 | R10 | R10 | R10_fiq |
R11 | R11 | R11 | R11 | R11 | R11 | R11_fiq |
R12 | R12 | R12 | R12 | R12 | R12 | R12_fiq |
R13 | R13 | R13_svc | R13_abt | R13_und | R13_inq | R13_fiq |
R14 | R14 | R14_svc | R14_abt | R14_und | R14_inq | R14_fiq |
PC | PC | PC | PC | PC | PC | PC |
CPSR | CPSR | CPSR SPSR_svc | CPSR SPSR_abt | CPSR SPSR_und | CPSR SPSR_inq | CPSR SPSR_fiq |
當成功的向R15寫(xiě)入一個(gè)數值時(shí),程序將跳轉到該地址執行。由于A(yíng)RM指令是字對齊的,寫(xiě)入R15的值應滿(mǎn)足bits[1:0]為0b00,具體要求arm各版本有所不同:
**對于arm3以及更低的版本,寫(xiě)入R15的地址值bits[1:0]被忽略,即寫(xiě)入r15的地址值將與0xFFFF FFFC做與操作。
**對于A(yíng)RM4以及更高的版本,程序必須保證寫(xiě)入R15的地址值bits[1:0]為0b00,否則將產(chǎn)生不可預知的后果。
對于Thumb指令集來(lái)說(shuō),指令是半字對齊的,處理器將忽略bit[0]。
CPSR(當前程序狀態(tài)寄存器)可以在任何處理器模式下被訪(fǎng)問(wèn)。它包含了條件標志位、中斷禁止位、當前處理器模式標志以及其他的一些控制和狀態(tài)位。
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 |
評論