嵌入式開發第42天(ARM的體系結構)
一、ARM的工作狀態
CPU執行的是彙編編譯後的機器碼。ARM處理器支援兩套匯編指令,一套是ARM彙編指令,另外一套THUMB彙編指令。
ARM彙編 ----> 32bits(預設)
THUMB彙編 --->16bits 彙編指令相同的,使用的編譯器不同。
1、ARM狀態:(32bits的ARM狀態)
當ARM處理器執行ARM彙編指令的時候,工作ARM狀態。
2、Thumb狀態:
當ARM處理執行THUMB彙編指令的時候,工作THUMB狀態
Thumb-2狀態:(ARM和THUMB混合)。
=========================================================
二、基本資料型別
1、位元組 char ---->8bits
2、半字 short ---->16bits
3、字 int ---->32bits
4、長字 long ---->和CPU的字長是一致的:64bits或32bits
三、儲存格式
1、大端格式--->大位元組序-->大尾格式--->big endian
2、小端格式--->小位元組序-->小尾格式--->littile endian(預設使用)
如何由可執行程式得到反彙編檔案:
$ arm-linux-objdump -D main.elf > main.dis
一個反彙編的檔案:
四、ARM的工作模式
ARM處理器在處理不同的內容的時候,處理器就會處於不同的工作模式。工作模式有7種。
不同的內容:
1、FIQ模式(fiq):FIQ中斷(fast Interrupt request)
2、IRQ模式(irq):IRQ中斷(Interrupt request) ,FIQ和IRQ是中斷的兩種不同型別
3、管理模式(svc):處理器的配置許可權比較高的模式。配置cache、MMU,配置核心。當ARM處理器復位,處理器是處於管理模式。
4、使用者模式(usr):一般執行使用者的應用程式
5、系統模式(sys):執行作業系統的任務
6、未定義模式(
7、中止模式:資料訪問中止--->向一個地址下寫資料,但是這個地址不存在或者這個地址是隻讀。 指令預取中止 --->當處理器從某個地址下讀取指令的時候,這個地址不存在或者這個地址禁止訪問。
五、ARM的流水線
ARM處理器將一條指令的執行過程分成了幾個步驟,在不同的時鐘週期來處理不同的步驟,這樣看起來在同一時刻處理器在處理多條指令,提高處理器的執行效率。
ARM7:三級流水線----> 取指、譯碼、執行
ARM9:五級流水線----> 取指、譯碼、執行、暫存器訪問、儲存器回寫
=========================================================
六、ARM核心中的暫存器
ARM處理器中的暫存器可以分成兩類:
核心的暫存器:只能用匯編訪問
R0~R15、CPSR、SPSR --->通用暫存器 + 狀態暫存器
外圍模組的暫存器:可以使用C來訪問
SFR ---- > GPJ2CON、GPD0_CON、GPH2DAT
SFR的訪問時通過地址來訪問。
ARM中暫存器的主要作用:
1、R0~R3:在C和彙編混合程式設計的時候,用來傳遞引數或返回值。ATPCS規則
第一個引數通過R0傳遞,第二引數通過R1傳遞,超過4個的引數就通過stack
來傳遞。
2、R4~R12:一般使用存放區域性變數。C語言register關鍵字。
3、R13:SP---Stack Pointer棧的指標暫存器。指向stack的地址。
4、R14:LR ---Link Register連結暫存器:用來儲存程式的返回地址。
5、R15,PC---Program counter,取值那條指令的地址。
注意:
以上暫存器都是32bits。
這些暫存器只能使用匯編語言來訪問。
一般在嵌入式平臺最開始執行的那段程式(bootloader-->u-boot)是使用匯編語言編寫。
6、CPSR---Current Program Status Register 當前程式狀態暫存器,反應ARM當前的狀態。
1)ARM工作模式位
2)狀態位
檢視ARM的工作狀態:0-->ARM狀態
1--> THUMB狀態
3)中斷的使能位--F/I
1 --->IRQ或FIQ是關閉的
0 --->IRQ或IRQ是開啟的
4)條件標誌位
算術執行的邏輯結果。NZCV
7、SPSR ---- Saved Program Status Register備份程式狀態暫存器
當ARM的工作模式切換的時候,用來儲存CPSR。