歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux技術 >> 嵌入式Linux ARM匯編(一)——ARM體系結構

嵌入式Linux ARM匯編(一)——ARM體系結構

日期:2017/3/3 12:11:07   编辑:Linux技術

嵌入式Linux ARM匯編(一)——ARM體系結構

一、ARM簡介

ARM是全球領先的半導體知識產權 (IP) 提供商Advanced RISC Machine,是專門從事基於RISC 技術芯片設計開發的公司,ARM 的商業模式主要涉及 IP 的設計和許可,而非生產和銷售實際的半導體芯片。作為知識產權供應商,本身不直接從事芯片生產,靠轉讓設計許可由合作公司生產各具特色的芯片,世界各大半導體生產商從ARM公司購買其設計的ARM 微處理器核,根據各自不同的應用領域,加入適當的外圍電路,從而形成自己的ARM 微處理器芯片進入市場。在全世界有幾十家大的半導體公司都使用ARM 公司的授權,因此既使得ARM 技術獲得更多的第三方工具、制造、軟件的支持,又使整個系統成本降低,使產品更容易進入市場被消費者所接受,更具有競爭力。
ARM設計了大量高性價比、耗能低的RISC處理器、相關技術及軟件,技術具有性能高、成本低和能耗省的特點,智能機、平板電腦、嵌入控制、多媒體數字等處理器領域擁有主導地位。全世界超過95%的智能手機和平板電腦都采用ARM架構 。2014年基於ARM技術的全年全球出貨量是120億顆,從誕生到現在為止基於ARM技術的芯片有600億顆。
ARM體系結構的基本版本:
版本
版本變種
系列號
處理器核
V1
V1
ARM1
ARM1
V2
V2
ARM2
ARM2
V2a
ARM2aS
ARM3
ARM3
V3
V3
ARM6
ARM6、ARM600、ARM610
ARM7
ARM7、ARM700、ARM710
V4
V4T
ARM7TDMI、ARM710T、ARM720T、ARM740T
V4T
ARM9
ARM9TDMI、ARM920T、ARM940T
V5
V5TE
ARM9E-S
V6
V6
ARM11
ARM11、ARM11562-S、ARM1156T2F-S、ARM11JZF-S
V7
V7
ARM Cotex
ARM Cotex-A8、ARM Cotex-R4、ARM Cotex-M3

二、計算機體系結構

1、.諾依曼體系結構




馮.諾依曼體系結構的特點:
A、處理器使用同一個存儲器,經由同一個總線傳輸B、完成一條指令需要3個步驟:即取指令->指令譯碼->執行指令C、指令和數據共享同一總線的結構

2、哈佛體系結構




哈佛體系結構的特點:A、將程序指令存儲和數據存儲分開 B、中央處理器首先到程序指令存儲器中讀取程序指令。解碼後到數據地址,再到相應的數據存儲器讀取數據,然後執行指令 C、程序指令存儲與數據存儲分開,可以使指令和數據有不同的數據寬度。ARM7采用馮.諾依曼體系結構,ARM9采用哈佛體系結構

三、復雜指令集與精簡指令集

1、 CISC 復雜指令集

CISC 復雜指令集:采用馮.諾依曼體系結構,數據線和指令線分時復用。存儲器操作指令多,匯編程序相對簡單,指令結束後響應中斷 ,CPU電路設計復雜,面積大,功耗大。

2、RISC 精簡指令集

RISC 精簡指令集:采用哈佛體系結構。數據線和指令線分離。對存儲器操作有限,匯編程序占空間大,在適當地方響應中斷, CPU電路較少,體積小功耗低。ARM采用RISC精簡指令集 。

四、ARM處理器模式

為了和操作系統更好地適配,ARM Cortex A-8處理器有九種工作模式。

ARMV7體系結構支持的9種處理器模式分別為:用戶模式、快中斷模式、中斷模式、管理模式、中止模式、未定義模式和系統模式,監視模式,軟中斷模式。

1、ARM的指令集

ARM有三種指令集:ARM、Thumb、Thumb32。Thumb是ARM體系結構中一種16位的指令集。從ARMv4T之後的ARM處理器有一種16-bit指令模式,叫做Thumb,較短的指令碼提供整體更佳的編碼密度,更有效地使用有限的內存帶寬。所有 ARM9 和後來的家族,包括 XScale 都納入了 Thumb 技術。Thumb32兼容16位和32位指令。ARM為32位指令。
在不犧牲性能的同時,盡量簡化處理器。同時從體系結構上靈活支持處理器擴展。采用RISC結構。RISC處理器簡化了處理器結構,減少復雜功能指令的同時,提高了處理器速度。

2、ARM的流水線結構

ARM處理器使用流水線來增加處理器指令流的速度,這樣可以使幾個操作同時進行。並使處理和存儲器系統連續操作。

arm處理器分為三級:取指->譯碼->執行
取指:指令從存儲器中取出
譯碼:對指令使用的寄存器進行譯碼
執行:從寄存器組中讀取寄存器,執行移位和ALU操作,寄存器被寫回到寄存器組中

3、ARM處理器支持的類型

字節 8位
半字 16位
字 32位
ARM處理器的所有數據操作都以字為單位,ARM指令的長度剛好是一個字,Thumb指令長度剛好是半個字。

4、ARM處理器狀態

ARM處理器內核使用ARM結構,該結構包含32位的ARM指令集和16位Thumb指令集,因此ARM有兩種操作狀態
ARM狀態:32位
Thumb狀態:16位

5、ARM處理器的寄存器

寄存器是中央處理器內的組成部份。寄存器是有限存貯容量的高速存貯部件,用來暫存指令、數據和位址。在中央處理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序計數器(PC),在中央處理器的算術及邏輯部件中,包含的寄存器有累加器(ACC)。
IR 用於存儲指令
PC 用於存儲程序運行的地址(即當前指令在內存中的位置)
寄存器是由一個指令的輸出或輸入可以直接索引到的暫存器群組。所有的計算機指令都是進入寄存器後被直接讀取。
ARM的匯編編程,本質上就是針對CPU寄存器的編程。
ARM寄存器分為2類:普通寄存器和狀態寄存器
ARM A-8處理器各工作模式下的寄存器:

ARM A-8處理器共有43個寄存器。普通寄存器34個,狀態寄存器9個。USR/SYS共用一組寄存器。
R13(SP) 棧指針寄存器用於存放堆棧的棧頂地址。
SP相當於指針變量,保存的是棧頂的地址,出棧時,從SP指向的內存中取出數據,入棧時將新的內存地址壓入棧頂,而SP相當於鏈表的頭指針(head)。
R14(LR) 鏈接寄存器存放子程序的返回地址。
例如:在主函數內,如果調用子函數,程序會進入到子函數內執行。當子函數執行完畢後,需要回到主函數內,所以在子函數調用前需要將這個地址先保存起來,否則無法找到這個地址。LR用於保存這個地址,這個地址也稱為子程序返回地址。當子函數結束後,再將LR內的地址賦給PC即可。
R15(PC) 程序計數器 它的值是當前正在執行的指令在內存中的位置。
當指令執行結束後,CPU會自動將PC值加上一個單位,PC值指向下一條即將執行的指令的地址。如果通過匯編指令對PC寄存器賦值,就會完成一次程序的跳轉(如從子函數跳轉回主函數內)。
寄存器R16用作CPSR(當前程序狀態寄存器),CPSR可在任何運行模式下被訪問,它包括條件標志位、中斷禁止位、當前處理器模式標志位,以及其他一些相關的控制和狀態位。每一種運行模式下又都有一個專用的物理狀態寄存器,稱為SPSR(備份的程序狀態寄存器),異常發生時,SPSR用於保存CPSR的值,從異常退出時則可由SPSR來恢復CPSR。由於用戶模式和系統模式不屬於異常模式,他們沒有SPSR,當在這兩種模式下訪問SPSR,結果是未知的。
程序狀態寄存器CPSR:


各bit代表的意義如下:
M[4:0]:處理器模式
T bit:是否支持Thumb指令
F bit:是否禁止FIQ
I bit:是否禁止IRQ
A bit:是否禁止異步中止
E bit:存儲順序
IT bit:是否在支持Thumb-2指令集中的if...then條件執行
GE bit:用於某些SIMD指令
J bit:是否支持Jazelle
Q bit:是否運算溢出
V bit:ALU是否溢出
C bit:ALU是否進位
Z bit:ALU結果是否為0
N bit:ALU結果是否為負
M0至M4表示處理器工作模式(控制位內的模式位)
0b10000 User 用戶模式
0b10001 FIQ 快速中斷模式
0b10010 IRQ 外部設備產生的中斷模式
0b10011 Supervisor 管理模式
0b10111 Abort 異常模式
0b11011 Undefined 未定義模式
0b11111 System 系統模式

6、SoC的特殊功能寄存器

SoC中的寄存器包括ARM CPU處理器內的寄存器和特殊功能寄存器,特殊功能寄存器不在CPU中,而是存在於CPU的外設中,通過訪問外設的SFR來編程控制外設是硬件編程控制的方法。

7、S5PV210的內存映射

以下三張圖為S5PV210的內存映射圖






IRAM和IROM:



本文出自 “生命不息,奮斗不止” 博客,請務必保留此出處http://9291927.blog.51cto.com/9281927/1785897
Copyright © Linux教程網 All Rights Reserved