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個
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 ;從子程序返回