ARM體系結構

版權所有,轉載必須說明轉自 http://my.csdn.net/weiqing1981127 

原創作者:南京郵電大學  通信與信息系統專業 研二 魏清

 

 

ARM寄存器

普通寄存器R0-R15,狀態寄存器CPSRSPSR。其中R15別名PC,中文名程序計數器;R14別名LR,中文名鏈接寄存器;R13別名SP,中文名棧指針寄存器。

CPU執行一條指令時主要有三個步驟:取指、譯碼和執行。流水線操作的本質是利用指令運行的不同階段使用的CPU硬件資源互不相同,併發的運行多條指令,從而提高時間效率。

無論幾級流水線,指令執行時,PC=當前正在執行指令在內存中的地址+8,理由是PC永遠指向取指處。

 

ARM基本尋址方式

1.寄存器尋址如MOV PC,LR

2.立即數尋址 MOV PC,#64

3.寄存器間接尋址 LDR R0,[R2]

4.基址尋址:

       LRD R0,[R1,#0X04] ;   說明[R1+4]->R0   R1+4->R1

       LDR R0,[R1],#0X04 ;   說明[R1]->R0   R1+4->R1

     LDR R0,lable      ;     說明等價於LDR R0[PC+#常數]

5.多寄存器尋址

       LDMIA R1!,{R2-R3,R6} ;說明[R1]->R2  [R1+4]->R3  [R1+8]->R6

       其他後綴包括IA,IB,DADB;前綴包括STR

6.堆棧尋址

STM完成入棧操作,以LDM完成出棧操作。另外棧可以分爲遞增或遞減和空或滿堆棧,出現的後綴組合就是EA.ED,FAFD

       STMFD R13!,{R4R14}     ;說明把R4R14壓人滿遞減堆棧SP

7.寄存器移位尋址

移位方式有LSL,LSR,ASR,RORRRX

       MOV R0,R2,LSL,#3      ;      說明R2*8->R0

8.相對尋址

由程序計數器OC提供基準地址,指令中的地址碼字段作爲偏移量,兩者相加形成地址。

       B LOOP       ;      說明LOOP爲標號

 

ARM指令部分:基本指令、僞操作、僞指令

1.基本指令

1.1單寄存器加載指令 LDR R0,[R1]

1.2單寄存器存儲指令 STR R0,[R1]

1.3分支指令 B/BL/BX

1.4數據處理指令

       MOV R0,R1

       ADD(SUB) R0,R1,R2    ;說明R1+R2->R0

       AND(ORR/EOR) R0,R1,R2   ;說明R1&R2->R0

       CMP R1,R2    ;說明比較完後用帶EQ,GE,LE,GT,LT等後綴的指令

1.5其他指令包括訪存指令、數據處理指令和乘法指令等,例如BIC/TEST/ADC/MVN….

2.僞操作

彙編僞操作是給編譯器看的,而不是給CPU看的,這是僞操作和指令的區別。僞操作主要包括符號定義、數據定義、彙編控制和信息報告等,下面是常見僞操作

2.1定義全局算術變量 GBLA VAL

2.2對全局變量進行賦值 VAL SETA 1

2.3分配存儲空間 DCD 0X12345678 DCB ‘a’

2.4條件編譯IF ELSE ENDIF

2.5循環WHILEWEND

2.6MACRO/MEND/MEXIT

2.7其他如EQU/IMPORT/EXPORT

3.僞指令

僞操作不會被編譯器編譯成機器指令,而僞指令會被編譯器編譯成一條或多條機器指令。僞指令主要包括LDR/ADR/ADRL/NOP,下面是僞指令的實例

       LDR R0,[R1]         ;說明指令,把R1指向的內存地址裏存放的內容加載到R0

       LDR R0,label         ;說明指令,把標號lable代表的內存地址裏存放的內容加載到R0

       LDR R0,=10000     ;說明僞指令,把常數10000賦給R0

       LCD R0,=lable       ;說明僞指令,把標號lable代表的內存地址賦給R0

 

ARM中彙編和C混合編程

對於CARM彙編的混合編寫,必須遵循ATPCS(ARMThumb程序中子程序調用規則)。主要內容包括規定數據棧爲FD類型;參數傳遞時,前四個整數參數通過寄存器R0-R3傳遞。

混合編程主要掌握在C中調用匯編子程序;在彙編中調用C的子程序;在C中訪問彙編的全局變量;在彙編中訪問C的全局變量;C和彙編的嵌套編程,主要涉及IMPORTEXPORT僞操作。

 

ARM系統時鐘

對於Mini2440開發板有一個12M晶振,通過時鐘控制鎖相環PLL來提供主頻,ARM920T內核的S3C2440的最高正常工作頻率是FCLK=400MHZ/HCLK=100MHZ/PCLK=50MHZ,其中FCLK是爲ARM920T內核提供工作頻率;HCLK主要是爲AHB總線上掛接內存、NANDLCD控制器等硬件提供工作頻率;PCLK主要爲APB總線上掛接UART串口、Watchdog等硬件控制器提供工作頻率。

 

ARM處理器的工作模式

對於ARM處理器,總共有7種工作模式,分別是用戶模式、系統模式、一般中斷(IRQ)模式、快中斷(FIQ)模式、管理模式、中止模式和未定義模式。除了用戶模式外,其他都屬於特權模式,特權模式中除了系統模式之外,其他五種模式又統稱異常模式。

用戶模式下想要訪問硬件資源或者切換到其他模式只能通過軟件中斷或產生異常;系統模式和用戶模式共用一套寄存器;快速中斷模式是用來處理對時間要求比較緊急的中斷請求,主要用於高速數據傳輸及通道中處理;管理模式是CPU上電後默認模式,因此在該模式下主要是用來做系統的初始化,軟中斷處理也在該模式下;中止模式是當用戶訪問非常地址時便會拋出segmnet fault信息。

除了用戶模式和系統模式,其餘模式下都有一個私有SPSR保存狀態寄存器,用來保存切換到該模式之前的執行狀態,使用MRS指令可以對CPSR/SPSR讀操作,使用MSR指令可以對CPSR/SPSR寫操作。

 

ARM處理器的異常

對於ARM處理器的異常,其主要包括復位異常;一般/快中斷請求、預取指令中止異常、未定義指令異常、軟件中斷指令異常和數據中斷訪問異常。需要說明的是預取指令中止異常是指在CPU取指階段,如果目標指令地址非法,則進入預取指令中止異常;未定義指令異常是發生在流水線的譯碼階段,如果當前指令不能被識別爲有效指令,就會進入未定義指令異常;軟件中斷指令異常發生在諸如printf時候;數據中止訪問異常發生在要訪問的數據地址不存在或非法的時候。

另外,異常發生時,ARM內核會自動保存執行狀態,然後模式切換,接着保存返回地址,最後跳入異常向量表。

 

重定向問題

Linux重定向是指修改原來默認的一些東西,對原來系統命令的默認執行方式進行改變,比如說簡單的我不想看到在顯示器的輸出而是希望輸出到某一文件中就可以通過Linux重定向來進行這項工作。

發佈了57 篇原創文章 · 獲贊 63 · 訪問量 29萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章