ARM基礎
認識ARM
ARM 產品線:
ARM 體系架構:不同ARM體系採用不同的指令集,哈弗結構是數據和指令分開存儲並行(現在都是基於這種結構),早期的馮諾依曼(普林斯頓)結構是混合存儲的
ARM系統硬件組成和運行原理:
手機程序存儲在FLASH中,板子上電之後CPU會將程序搬到內存中進行執行(提高執行速率)
控制器找到FLASH程序的地址,然後把指令取出來
運算器用於指令的相關運算
寄存器用於臨時存放運算的數據
開發環境搭建:(略)
ARM的工作模式及寄存器
ARM 工作模式:
ARM主要有7個基本工作模式:
User : 非特權模式,大部分任務執行在這種模式(普通用戶模式)
FIQ : 當一個高優先級(fast) 中斷產生時將會進入這種模式
IRQ : 當一個低優先級(normal) 中斷產生時將會進入這種模式
Supervisor :當復位或軟中斷指令執行時將會進入這種模式(超級模式,有更高的訪問權限)
Abort : 當存取異常時將會進入這種模式(異常模式,一般接觸的少)
Undef : 當執行未定義指令時會進入這種模式
System : 使用和User模式相同寄存器集的特權模式(與User模式相同,只是比User權限更高一點)
ARM 有37個寄存器:
1 個用作PC( Program Counter)(程序計數寄存器)
1個用作CPSR(Current Program Status Register)(狀態寄存器:CPU處於哪種狀態)
5個用作SPSR(Saved Program Status Registers)(備用的狀態寄存器:當切換到其他工作模式時,用來保存當前狀態寄存器(CPSR),便於下次切換回來時再將該值賦給CPSR)
30 個通用寄存(臨時存放數據的場所)
ARM 工作模式及寄存器框圖:(重要)
以下列出了ARM的7中工作模式(其中User和System 基本相同,所以列在一起)
該ARM是32位,所以一個寄存器有4個字節
r0-r7:普通寄存器,用來存放數據
User模式下:r8-r12也是普通寄存器
r15:PC寄存器
r4:存儲函數返回地址
r3:棧頂指針(中斷時(IRQ)保護現場(進棧)和恢復現場(出棧))
CPSR:當前狀態寄存器
沒有三角形標註的寄存器爲7種工作模式的公用寄存器,有三角形標註的寄存器表示額外多的一份寄存器
搬移指令
mov r1,#3
mov r2,r1
CPSR 寄存器:(當前程序狀態寄存器)
條件位:
N = Negative result from ALU
Z = Zero result from ALU
C = ALU operation Carried out or borrow
V = ALU operation oVerflowed
T 位(M[5]) J 位(M[24])
T = 0;J=0 處理器處於 ARM 狀態(一條指令佔4個字節)
T = 1;J=0 處理器處於 Thumb 狀態(一條指令只佔2個字節)
中斷禁止位:(M[6-7])
I = 1: 禁止 IRQ.
F = 1: 禁止 FIQ
Mode位:處理器模式位(低五位M[0-4]:表示7種模式)
10000 User mode 10011 SVC mode;
10010 IRQ 10001 FIQ mode;
10111 Abort mode 11011 Undfined mode 11111 System mode;
CPSR / SPSR操作指令
mrs r0,CPSR (特殊寄存器操作使用msr。將CPSR的值讀到r0寄存器中)
msr CPSR,r0 (特殊寄存器操作使用msr。將r0寄存器中的值賦給CPSR)
.text @文件頭
mov r0,#3 @將常數3賦值給r0寄存器
cmp r0,#3 @r0和3的值進行比較(可根據cpsr的高5位判斷比較或者計算的結果)
add r1,r0,#5 @將r0+5的值賦給r1
mov r1,r0 @將r0的值賦給r1
mov r3,#0xd0 @將常數0xd0(該常數低5位表示User模式,其餘位和cpsr保持一致)
msr cpsr,r3 @將r3的值賦給cpsr寄存器,將狀態由Supervisor模式轉變爲User模式,注意給特殊寄存器賦值要使用msr
mov r3,#0xd3 @常數0xd3的低5位表示Supervisor模式
msr cpsr,r3 @這一步目的是想將r3的值賦給cpsr,從而可以改變當前運行狀態,但是狀態還是沒有改變,因爲User模式權限不夠,不能改變該寄存器的值,可以通過中斷將狀態更改爲Supervisor模式
swi 1 @軟中斷,將運行狀態從User模式轉變爲Supervisor模式
.end @文件尾