精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

ARM通用寄存器及狀態寄存器詳解

技術讓夢想更偉大 ? 來源:CSDN-張一西 ? 2023-01-06 14:58 ? 次閱讀

筆者來聊聊ARM通用寄存器以及狀態寄存器的認識與理解。

ARM通用寄存器

對于處理器來說,寄存器可以作為暫存器,存儲臨時結果,也可以作為輸入數據,方便運算,也可以作為一種索引,去訪問存儲器,其作用各種各樣。

CortexM3/M4

CortexM3/M4是比較常用的ARM架構,很多廠商都采用了這樣的架構,比如ST公司stm32,廣受大家歡迎,還有NXP的MK60芯片,一直在飛思卡爾比賽中很受歡迎,還有國產兆易創新的GD32,亞特力的AT32,國民技術的N32系列。

其在嵌入式領域非常受歡迎,相對方便上手,功能齊全,滿足一般的對MCU的需求。

其寄存器模型如下:9ecb823a-8d8e-11ed-bfe3-dac502259ad0.jpg

通用目的寄存器R0-R7

,低組寄存器,32bit,16位thumb以及32位的thumb-2指令均可以訪問

可以看到R0、R1、R2三個作為參數傳遞進入。

后面R0作為結果傳出進行比較。

傳入參數是數組,為什么不直接傳地址(LDR),而是通過DCD指令來傳遞呢?

這是因為LDR取地址的范圍有限,LDR Rn,#立即數地址,該地址只是是小范圍(4KB?),所以可以看到DCD的地址就在不遠處(6A92 - 6D48相差不遠),而存儲器的地址則在2000000范圍,與其地址相差較大,從圖二來看 DCD后的地址,其實是通過DCD的地址先尋址,尋址后再作為地址,繼續尋址。
9f8353ce-8d8e-11ed-bfe3-dac502259ad0.jpg
9f912580-8d8e-11ed-bfe3-dac502259ad0.jpg

R0-R3一般作為參數傳遞,如果參數再多,則通過壓棧的方式傳遞

R0、R1還會作為返回值進行傳遞,如果是32位則是R0,64位則會用R0-R19fa402f4-8d8e-11ed-bfe3-dac502259ad0.jpg

通用目的寄存器R8-R12

,高組寄存器,32bit,較少的16位thumb指令可以訪問,一般是 thumb-2指令訪問。

R11一般用作FP指針,保存棧幀(在加上編譯選項時 ,見上篇文章,下文SP、LR同理ARM開發中幾個常見的寄存器詳解。

棧指針R13(SP) 指示當前棧所指位置。

鏈接寄存器R14(LR) 保存程序返回地址。

程序計數器R15(PC)

程序運行的當前位置。

下圖一PC作為基址地址,然后去訪問存儲器,0x4079a1c+480 =0x4079c04

下圖二直接將0x4079c04 作為地址給r09fb1b5c0-8d8e-11ed-bfe3-dac502259ad0.jpg9fbee682-8d8e-11ed-bfe3-dac502259ad0.jpg

指令對齊半字或者字地址,最低位為0

特殊跳轉指令,需要將PC 最低位表示Thumb狀態,否則會觸發異常。

PC有時候會作為基址寄存器,然后加地址偏移去訪問數據

CortexR5

Cortex R系列繼承了ARM7架構下的系統模型,有多組工作模式,每個模式都有自己的地址空間(堆棧地址SP)9fd168fc-8d8e-11ed-bfe3-dac502259ad0.jpg

CortexR5 屬于ARMv7指令集。

與CortexM3/4一致,其R0-R7 以及R8-R12的作用

user模式和sys模式共用一套寄存器,即共享

user/sys、FIQ、SVC、ABT、IRQ以及UND模式 下,LR、SP、SPSR均是獨立,切換CPSR 模式之后,SP、LR及SPSR自動切換成相應模式下的寄存器值

FIQ 之所以被稱之快速中斷,是因為有獨立的R8-R12寄存器,不需要壓棧 ,直接使用,

SPSR是保存上一個模式的CPSR。

ARMv7的一般AR系列的寄存器模型和上述的基本相同,有一些新的擴展,

9fe58968-8d8e-11ed-bfe3-dac502259ad0.jpg

增加了Hyp模式以及Mon模式,分別用于虛擬擴展以及安全擴展,

Hyp模式下的LR為ELR,記錄異常時的返回地址,其他均一致。

CortexA53

9ffb5590-8d8e-11ed-bfe3-dac502259ad0.jpg

r0-r7 用來做參數傳遞或者發返回結果。

r8 間接的結果位置寄存器

r9-r15 暫存器 保存臨時結果

r16-r17 動態鏈接(系統并不是所有地址都可以跳轉)(鏈接器內部插入代碼)所需要的寄存器

r18 the Platform ABI專用的寄存器 來保存內部程序狀態(為了平臺通用性 避免使用)

r19-r28 被調用者保存的寄存器(相對來說還有調用者保存寄存器 在CortexM3/4就有很好體現)

r29 FP寄存器,需要加編譯選項

r30 鏈接寄存器

SP 棧指針,

PC 程序寄存器,a00f36d2-8d8e-11ed-bfe3-dac502259ad0.png可以看到程序調用時,函數類型為9個參數,匯編代碼x0-x7作為參數傳遞進去,最后一個參數,壓棧進行傳遞,str x9,[SP] 。還用到了 blr 通過寄存器去進行鏈接跳轉 最后通過b 跳轉返回。

狀態寄存器

寄存器通常是CPSR(Current Program state register),用來表示當前程序運行的狀態、模式、運算結果狀態、中斷狀態等。,比如下面這個CPSR寄存器模型。a037a64e-8d8e-11ed-bfe3-dac502259ad0.jpg

標志位域

說明解釋:表示程序的運行結果的狀態,可以用來跳轉,例如:結果是否為0,結果是否有進位,結果是否溢出,結果是否為負數等等。a046dc2c-8d8e-11ed-bfe3-dac502259ad0.jpg

符號有NCVZ,分別是負數(Negative)、進位(Carry)、溢出(Overflow)、為0(Zero)標志。

衍生出許多跳轉指令,近范圍或者函數范圍內跳轉,比如以下這些指令

BEQ、BNE 通過判斷Z==1,BEQ為相等則跳轉,比如CMP X0,X1 BEQ

BCS、BCC通過判斷C==1,BCS為大于等于則跳轉,BCC為小于則跳轉

BMI、MBL 通過判斷N==1,BMI 為負數則跳轉,BPL為整數則跳轉

BVS、BVC 通過判斷V==1,溢出則跳轉,BVC為非溢出則跳轉

BHI、BLS通過判斷C == 1 and Z == 0 意思就是大于則跳轉,

BGE、BLT 通過判斷N == 1 and V == 1,或者 N == 0 and V == 0 有符號數大于等于

BGT、BLE 通過判斷Z=0, N == 1 and V == 1 或者 Z=0 N == 0 and V == 0 有符號數大于a05f901e-8d8e-11ed-bfe3-dac502259ad0.jpg

相關數字運算對標志位的影響。a0774650-8d8e-11ed-bfe3-dac502259ad0.jpg

異常中斷控制域

比如常見的DAIF 中斷屏蔽位,分別為:

處理器狀態debug中斷 屏蔽位:查看點、斷點以及系統單步運行

系統錯誤中斷屏蔽位(通常是異步的錯誤)

普通中斷屏蔽位

快速中斷屏蔽位a084bd26-8d8e-11ed-bfe3-dac502259ad0.jpg常見的中斷控制域如上圖所示,

CortexM3/4 單獨存在一個寄存器primask,可以屏蔽中斷,只有普通中斷,沒有快速中斷(支持嵌套,所以快速與否感覺關系不大,同時進入中斷后,硬件自動壓棧相關寄存器,也提高了中斷速度),在cpsr中沒有中斷屏蔽相關,

CortexR5以及A53系列中均有這樣的中斷控制域,可以訪問臨界資源時屏蔽中斷,

模式控制域

CPSR的低五位為模式控制位,控制當前CPU為何種模式,設置各種模式則是為了處理異常以及分層管理,低級無法訪問特定資源,而特權模式則可以進行資源上的操作。a0993ca6-8d8e-11ed-bfe3-dac502259ad0.jpg

通過寫CPSR的低五位,可以控制系統處于何種模式。

通過讀CPSR的第五位 也可以知道當前處于何種模式,判斷程序發生了什么故障。

mode description restriction
User Mode 運行用戶程序,非特權模式 ,無法處理異常,除非異常,否則無法改變當前模式 對系統資源的訪問進行限制(外設以及memory)
SVC Mode 用于系統管理,比如系統下的資源訪問,以及OS的調度管理,可以通過軟件觸發,特權模式 ,執行SVC指令可以進入到本異常,復位之后進入該模式 ,(正常行為,軟件觸發到)
system Mode 與用戶模式共享所有寄存器,特權模式,不能通過異常進入,(正常行為,軟件觸發)
Abort Mode Data Abort或者Prefetch Abort,前者是數據訪問出錯,后面是取指令錯誤,特權模式,(異常行為,硬件檢測到)
Undefined Mode 指令相關的異常處理,例如執行到未定義的指令,特權模式,(異常行為,硬件檢測到)
FIQ Mode 特權模式,處理快速中斷,(正常行為,硬件觸發到)
IRQ Mode 特權模式,處理普通終端,(正常行為,硬件觸發到)

指令選擇域

T Value 指令集 描述
0 ARM指令集 32位DWORD對齊的指令
1 Thumb指令集 部分為16位半字(half word)對齊的指令,增加代碼密度,減少Image size
X 關聯 兩種指令集可以混合使用,通過狀態來表征,比如通過bx 、blx可以切換指令集

大小端控制域

endian state value 模式 描述 設置指令
0 小端模式 memory 低字節在低位 SETEND LE
1 大端模式 memory 低字節在高位 SETEND BE

執行狀態控制域

一些控制系統狀態的標志位,比如ARMv8-A系列

標志屬性 描述 HTML
SP_ELx Stack pointer register selected,' 比如SP_EL0 或者SP_EL3
EL "異常等級" “EL0、EL1、EL2以及EL3”
SS 軟件單步控制 for debugger make PE single-step instruction

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • ARM
    ARM
    +關注

    關注

    134

    文章

    9045

    瀏覽量

    366800
  • 寄存器
    +關注

    關注

    31

    文章

    5317

    瀏覽量

    120001
  • CortexM3
    +關注

    關注

    0

    文章

    24

    瀏覽量

    13550
  • 狀態寄存器
    +關注

    關注

    0

    文章

    38

    瀏覽量

    7073

原文標題:ARM通用寄存器及狀態寄存器詳解

文章出處:【微信號:技術讓夢想更偉大,微信公眾號:技術讓夢想更偉大】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    寄存器,寄存器是什么意思

    寄存器,寄存器是什么意思 寄存器定義  寄存器是中央處理內的組成部分。寄存器是有限存貯容量
    發表于 03-08 14:26 ?2.2w次閱讀

    數據寄存器,數據寄存器是什么意思

    數據寄存器,數據寄存器是什么意思 數據寄存器數據寄存器包括累加AX、基址寄存器BX、計數
    發表于 03-08 14:38 ?1.2w次閱讀

    ARM寄存器詳解

    ARM有37個寄存器,其中31個通用寄存器,6個狀態寄存器。   這里尤其要注意區別的是
    發表于 07-10 10:04 ?2941次閱讀

    DSP2812寄存器詳解

    DSP2812寄存器詳解DSP2812寄存器詳DSP2812寄存器詳解
    發表于 01-08 14:17 ?8次下載

    寄存器與移位寄存器

    寄存器與移位寄存器:介紹寄存器原理和移位寄存器的原理及實現。
    發表于 05-20 11:47 ?0次下載

    arm程序狀態寄存器訪問指令

    arm程序狀態寄存器訪問指令
    發表于 01-04 13:11 ?0次下載

    51寄存器的所有寄存器名稱,(包括寄存器每一位的作用及用法)資源詳解

    51寄存器的所有寄存器名稱,(包括寄存器每一位的作用及用法)資源詳解
    發表于 10-16 13:04 ?14次下載
    51<b class='flag-5'>寄存器</b>的所有<b class='flag-5'>寄存器</b>名稱,(包括<b class='flag-5'>寄存器</b>每一位的作用及用法)資源<b class='flag-5'>詳解</b>

    淺談ARM寄存器組織

    是32位的,但目前只使用了其中的12位。除了這6個狀態寄存器外,其余的31個寄存器又稱為通用寄存器A
    發表于 10-18 13:26 ?1次下載
    淺談<b class='flag-5'>ARM</b><b class='flag-5'>寄存器</b>組織

    ARM處理中的寄存器基本知識詳解

    ARM處理在每一種處理模式下均有一組相應的寄存器與之對應。即在任意一種處理模式下,可訪問的寄存器
    的頭像 發表于 12-11 11:48 ?1.7w次閱讀
    <b class='flag-5'>ARM</b>處理<b class='flag-5'>器</b>中的<b class='flag-5'>寄存器</b>基本知識<b class='flag-5'>詳解</b>

    移位寄存器怎么用_如何使用移位寄存器_移位寄存器的用途

    移位寄存器是一個具有移位功能的寄存器,是指寄存器中所存的代碼能夠在移位脈沖的作用下依次左移或右移。本文主要介紹了移位寄存器的用途以及移位寄存器
    發表于 12-22 15:49 ?2w次閱讀

    寄存器操作方法_對寄存器操作的通用方法總結

    本文主要詳解寄存器操作方法以及對寄存器操作的通用方法總結,具體的跟隨小編來了解一下。
    的頭像 發表于 05-22 15:53 ?2.3w次閱讀

    零基礎學ARM:程序狀態寄存器訪問指令解析

    一、程序狀態寄存器訪問指令ARM微處理支持程序狀態寄存器訪問指令,用于在程序
    的頭像 發表于 12-24 13:36 ?3359次閱讀

    AArch64寄存器介紹

    作為 RISC 架構,AArch64 提供了大量的通用寄存器。除通用寄存器之外,本節還會介紹特殊寄存器、系統控制
    的頭像 發表于 08-24 09:57 ?5956次閱讀

    CPSR寄存器和APSR寄存器的組成

    程序狀態寄存器的作用就是反映處理狀態信息。在程序運行期間我們可以通過查看程序狀態寄存器
    的頭像 發表于 10-20 11:38 ?4325次閱讀
    CPSR<b class='flag-5'>寄存器</b>和APSR<b class='flag-5'>寄存器</b>的組成

    寄存器分為基本寄存器和什么兩種

    ,它們用于存儲指令、數據和地址等信息。基本寄存器的容量通常較小,但訪問速度非常快,因為它們與CPU的執行單元緊密相連。 基本寄存器的分類 基本寄存器可以分為以下幾類: (1)通用
    的頭像 發表于 07-12 10:31 ?1121次閱讀