我從內部看ARM

ARM家族大檢閱

芯片 arm核 指令架構
s3c2440 arm9 arm v4
s3c6410 arm11 arm v6
s5pv210 cortox a8 arm v7

ARM處理器工作模式

Processor mode Mode number Description
User usr 0b10000 Normal program execution mode
FIQ fiq 0b10001 Supports a high-speed data transfer or channel process
IRQ irq 0b10010 Used for general-purpose interrupt handling
Supervisor svc 0b10011 A protected mode for the operating system
Abort abt 0b10111 Implements virtual memory and/or memory protection
Undefined und 0b11011 Supports software emulation of hardware coprocessors
System sys 0b11111 Runs privileged operating system tasks (ARMv4 and above)

linux用戶態程序運行中usr模式
linux內核運行在svc模式

ARM寄存器詳解

ARM寄存器:37個

在這裏插入圖片描述

ARM寄存器:37個
通用寄存器:31個
程序狀態字寄存器:6個
不分組寄存器:R0-R7
分組寄存器:R7-R14
程序計數器:R15
CPSR
SPSR
CPSR寄存器重要位描述:

在這裏插入圖片描述

N:當比較兩個數字的大小時,當A>B,N保持0,當A < B,N變爲1

Z:也是比較兩個數,當A、B兩者相等時,Z爲1

I:當爲1時,不能產生IRQ中斷

F:當爲1時,不能產生FIQ中斷

M[4:0]:表明處理器工作不同的模式(可以看上上面的圖)

ARM尋址方式

1. 立即數尋址

立即數尋址,是一種特殊的尋址方式,操作數本身就在指令中給出,只要取出指令也就取到了操作數。這個操作數被稱爲立即數,對應的尋址方式也就叫做立即數尋址。例如以下指令:

ADD R0,R0,#0x3f 		;R0←R0+0x3f

在以上兩條指令中,第二個源操作數即爲立即數,要求以“#”爲前綴。

2. 寄存器尋址

寄存器尋址就是利用寄存器中的數值作爲操作數,這種尋址方式是一種執行效率較高的尋址方式。

ADD R0,R1,R2 		;R0←R1+R2

該指令的執行效果是將寄存器R1和R2的內容相加,其結果存放在寄存器R0中。

3. 寄存器間接尋址

寄存器間接尋址就是寄存器中的存放的是操作數在內存中的地址。例如以下指令:

LDR R0, [R2] 		;R0← [R2]

在第一條指令中,以寄存器R2的值作爲操作數的地址,在存儲器中取得一個操作數後與R1相加,結果存入寄存器R0中。第二條指令將以R1的值爲地址的存儲器中的數據傳送到R0中。

4. 基址變址尋址

基址變址尋址就是將寄存器(基址寄存器)裏的內容(基地址)與指令中給出的地址偏移量相加,從而得到操作數在內存中的地址:

LDR R0 [R1,  #4] 		;R0←[R1+4]
5. 相對尋址

與基址變址尋址方式相類似,相對尋址PC指針的當前值爲基地址,指令中的地址標號作爲偏移量,將兩者相加之後得到操作數的有效地址。以下程序段完成子程序的調用和返回,跳轉指令BL採用了相對尋址方式:

BL NEXT ;跳轉到子程序NEXT處執行
……
……
NEXT
……
MOV PC,LR ;從子程序返回
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章