ARM体系结构与汇编指令
可編程器件的特點
? CPU在固定頻率的時鐘控制下節奏運行。
? CPU可以通過總線讀取外部存儲設備中的二進制指令集,然后解碼執行。
? 這些可以被CPU解碼執行的二進制指令集是CPU設計的時候確定的,是CPU的設計者(ARM公司)定義的,本質上是一串由1和0組成的數字。這就是CPU的匯編指令集。
整個編程及運行過程
? 程序員用匯編指令編程 --經匯編器匯編成二進制可執行程序文件–>二進制文件被CPU讀取進去–>CPU內部電路對二進制文件解碼–>解碼通過則CPU執行指令、完成指令動作。
? 如果程序員用C語言等高級語言編程,則編譯器先將C語言程序編譯為匯編程序,再進行上面的后續部分。
CISC
? complex instruction set computer復雜指令集CPU
? CISC體系的設計理念是用最少的指令來完成任務(譬如計算乘法只需要一條MUL指令即可),因此CISC的CPU本身設計復雜、工藝復雜,但好處是編譯器好設計。CISC出現較早,至今Intel還一直采用CISC設計
RISC
? Reduced Instruction-Set Computer精簡指令集CPU
? RISC的設計理念是讓軟件來完成具體的任務,CPU本身僅提供基本功能指令集。因此RISC CPU的指令集中只有很少的指令,這種設計相對于CISC,CPU的設計和工藝簡單了,但是編譯器的設計變難了。
iROM和iRAM
? S5PV210出廠時內置了64KB iROM和96KB iRAM。iROM中預先內置燒錄了一些代碼(稱為iROM代碼),iRAM屬于SRAM(不需軟件初始化,上電即可使用)。210啟動時首先在內部運行iROM代碼,然后由iROM代碼開啟外部啟動流程。
為什么需要設計iROM和iRAM?答案是為了支持多種外部設備啟動。
Second boot support
? When 1 st boot mode fails, SD/MMC boot will be tried through SD/MMC channel 2 with 4-bit data
? 當第一啟動模式失敗時,SD/MMC卡啟動模式下將會從SD/MMC2通道嘗試再次啟動。
? 這種二級啟動是一種冗余設計。SoC中第一啟動介質故障而導致不能啟動時,可以從備用啟動介質啟動。我們做裸機實驗時從SD2啟動就是利用了這一設計特性。
BL0做了什么?
? 關看門狗
? 初始化指令cache
? 初始化棧
? 初始化堆
? 初始化塊設備復制函數device copy function
? 設置SoC時鐘系統
? 復制BL1到內部IRAM(16KB)
? 檢查BL1的校驗和
? 跳轉到BL1去執行
ARM的基本設定
? ARM 采用的是32位架構.
? ARM 約定:
– Byte : 8 bits
– Halfword :16 bits (2 byte)
– Word : 32 bits (4 byte)
– 大部分ARM core 提供:
– ARM 指令集(32-bit)
– Thumb 指令集(16-bit )
– Thumb2指令集(16 & 32bit)
? Jazelle cores 支持 Java bytecode
ARM處理器工作模式
– User : 非特權模式,大部分任務執行在這種模式
– FIQ : 當一個高優先級(fast) 中斷產生時將會進入這種模式
– IRQ : 當一個低優先級(normal) 中斷產生時將會進入這種模式
– Supervisor :當復位或軟中斷指令執行時將會進入這種模式
– Abort : 當存取異常時將會進入這種模式
– Undef : 當執行未定義指令時會進入這種模式
– System : 使用和User模式相同寄存器集的特權模式
除User(用戶模式)是Normal(普通模式)外,其他6種都是Privilege(特權模式)。
Privilege中除Sys模式外,其余5種為異常模式。各種模式的切換,可以是程序員通過代碼主動切換(通過寫CPSR寄存器);也可以是CPU在某些情況下自動切換。各種模式下權限和可以訪問的寄存器不同
ARM寄存器
? ARM共有37個寄存器,都是32位長度
? 37個寄存器中30個為“通用”型,1個固定用作PC,一個固定用作CPSR,5個固定用作5種異常模式下的SPSR。
?
? CPSR中各個bit位表明了CPU的某些狀態信息,這些信息非常重要,和后面學到的匯編指令息息相關(譬如BLE指令中的E就和CPSR中的Z標志位有關)
? CPSR中的I、F位和開中斷、關中斷有關
? CPSR中的mode位(bit4~bit0共5位)決定了CPU的工作模式,在uboot代碼中會使用匯編進行設置。
PC(r15)程序控制寄存器
? PC(Program control register)為程序指針,PC指向哪里,CPU就會執行哪條指令(所以程序跳轉時就是把目標地址代碼放到PC中)
? 整個CPU中只有一個PC(CPSR也只有一個,但SPSR有5個)。
什么是異常
? 正常工作之外的流程都叫異常
? 異常會打斷正在執行的工作,并且一般我們希望異常處理完成后繼續回來執行原來的工作
? 中斷是異常的一種
異常向量表
? 所有的CPU都有異常向量表,這是CPU設計時就設定好的,是硬件決定的。
? 當異常發生時,CPU會自動動作(PC跳轉到異常向量處處理異常,有時伴有一些輔助動作)
? 異常向量表是硬件向軟件提供的處理異常的支持。
?
總結
以上是生活随笔為你收集整理的ARM体系结构与汇编指令的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java get set 注解_java
- 下一篇: C++学习之路 | PTA乙级—— 10