国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

ARM編程模型-寄存器組

這篇具有很好參考價(jià)值的文章主要介紹了ARM編程模型-寄存器組。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

Cortex A系列ARM處理器共有40個(gè)32位寄存器,其中33個(gè)為通用寄存器,7個(gè)為狀態(tài)寄存器。usr模式和sys模式共用同一組寄存器。
ARM編程模型-寄存器組,嵌入式系統(tǒng)筆記,arm開發(fā),嵌入式系統(tǒng)
通用寄存器包括R0~R15,可以分為3類:

  1. 未分組寄存器R0~R7
  2. 分組寄存器R8~R14、R13(SP) 、R14(LR)
  3. 程序計(jì)數(shù)器PC(R15)、R8_fiq-R12_fir為快中斷獨(dú)有
    ARM編程模型-寄存器組,嵌入式系統(tǒng)筆記,arm開發(fā),嵌入式系統(tǒng)
    ARM編程模型-寄存器組,嵌入式系統(tǒng)筆記,arm開發(fā),嵌入式系統(tǒng)
    在不同模式下,名稱相同的寄存器,實(shí)際物理上是不同的寄存器,雖然邏輯上有可能相同。
    r0~r7 所有模式下都是相同的寄存器

1.ARM的寄存器組(Thumb state)

ARM編程模型-寄存器組,嵌入式系統(tǒng)筆記,arm開發(fā),嵌入式系統(tǒng)

2. 不同狀態(tài)下的寄存器組對比

ARM編程模型-寄存器組,嵌入式系統(tǒng)筆記,arm開發(fā),嵌入式系統(tǒng)

3.通用寄存器

通用寄存器包括R0~R15,可以分為3類:

  1. 未分組寄存器R0~R7
  2. 分組寄存器R8~R14、R13(SP) 、R14(LR)
  3. 程序計(jì)數(shù)器PC(R15)、R8_fiq-R12_fir為快中斷獨(dú)有

R0-R7:無影子寄存器,未分組寄存器
所有模式下,R0-R7所對應(yīng)的物理寄存器都是相同的。
真正意義上的通用寄存器,ARM體系結(jié)構(gòu)種對他們沒有任何特殊的假設(shè),它們的功能都是等同的。
在所有運(yùn)行模式下,未分組寄存器都指向同一個(gè)物理寄存器,它們未被系統(tǒng)用作特殊的用途.因此在中斷或異常處理進(jìn)行運(yùn)行模式轉(zhuǎn)換時(shí),由于不同的處理器運(yùn)行模式均使用相同的物理寄存器,所以可能造成寄存器中數(shù)據(jù)的破壞。
因此,在中斷或者異常處理程序中一般都需要對這幾個(gè)寄存器進(jìn)行保存。壓棧保存。

R8-R14:有影子寄存器,分組寄存器
影子寄存器是指該寄存器在不同模式下對應(yīng)的物理寄存器。
對于分組寄存器,它們每一次所訪問的物理寄存器都與當(dāng)前處理器的運(yùn)行模式有關(guān)。
訪問的物理寄存器取決于當(dāng)前的處理器模式,或使用規(guī)定的名字來訪問。
R8-R12各有2個(gè)物理寄存器:FIQ模式和非FIQ模式。除了FIQ模式下不用保存R8-R12,其他模式都需要保護(hù)。每個(gè)寄存器對應(yīng)2個(gè)不同的物理寄存器,當(dāng)使用FIQ(快速中斷模式)時(shí),訪問寄存器 R8_fiq ~ R12_fiq;當(dāng)使用除FIQ模式以外的其他模式時(shí),訪問寄存器R8_usr~R12_usr。。

R13-R14
各有6個(gè)物理寄存器,用戶模式和系統(tǒng)模式共用,其他5個(gè)用于各異常模式。
對于R13,R14來說,每個(gè)寄存器對應(yīng)7個(gè)不同的物理寄存器,其中一個(gè)是用戶模式與系統(tǒng)模式共用,另外6個(gè)物理寄存器對應(yīng)其他6種不同的運(yùn)行模式,并采用以下記號(hào)來區(qū)分不同的物理寄存器:
R13_mode R14_mode
其中mode可為:「usr,fiq,irq,svc,abt,und,mon」。

R13(SP)被用作棧指針
通常在系統(tǒng)初始化時(shí)需要對所有模式下的SP指針賦值,CPU會(huì)自動(dòng)切換成相應(yīng)模式下的值。
在ARM指令中常用作「堆棧指針」,用戶也可使用其他的寄存器作為堆棧指針,而在Thumb指令集中,某些指令強(qiáng)制性的要求使用R13作為堆棧指針。
寄存器R13在ARM指令中常用作堆棧指針,但這只是一種習(xí)慣用法,用戶也可使用其他的寄存器作為堆棧指針。而在Thumb指令集中,某些指令強(qiáng)制性的要求使用R13作為堆棧指針。
由于處理器的每種運(yùn)行模式均有自己獨(dú)立的物理寄存器R13,在用戶應(yīng)用程序的初始化部分,一般都要初始化每種模式下的R13,使其指向該運(yùn)行模式的??臻g。這樣,當(dāng)程序的運(yùn)行進(jìn)入異常模式時(shí),可以將需要保護(hù)的寄存器放入R13所指向的堆棧,而當(dāng)程序從異常模式返回時(shí),則從對應(yīng)的堆棧中恢復(fù),采用這種方式可以保證異常發(fā)生后程序的正常執(zhí)行。

R14(LR)鏈接寄存器(Link Register)
用于保存子程序返回地址或異常返回地址。
當(dāng)執(zhí)行子程序調(diào)用指令(BL)時(shí),R14可得到R15(程序計(jì)數(shù)器PC)的備份。
在每一種運(yùn)行模式下,都可用R14保存子程序的返回地址,當(dāng)用BL或BLX指令調(diào)用子程序時(shí),將PC的當(dāng)前值復(fù)制給R14,執(zhí)行完子程序后,又將R14的值復(fù)制回PC,即可完成子程序的調(diào)用返回。以上的描述可用指令完成。
從子程序返回:
MOV PC, LR
或者
BX LR

在子程序入口處使用以下指令將R14存入堆棧:
STMFD SP!,{,LR}

對應(yīng)的,使用以下指令可以完成子程序返回:
LDMFD SP!,{,PC}

R15(PC):程序計(jì)數(shù)器
可以被讀寫
ARM STATE:bits[1:0]為0,bits[31:2]即為PC有效值
THUMB state: bits[0]為0, bits[31:1]即為PC有效值
比如如果pc的值是0x40008001,那么在尋址的時(shí)候其實(shí)會(huì)查找地址0x40008000,低2位會(huì)自動(dòng)忽略掉
由于ARM體系結(jié)構(gòu)采用了多級(jí)流水線技術(shù),對于ARM指令集而言,PC總是指向當(dāng)前指令的下兩條指令的地址,即PC的值為當(dāng)前指令的地址值加8個(gè)字節(jié)。
即:PC值=當(dāng)前程序執(zhí)行位置+8

4. 程序狀態(tài)寄存器(v4T)CPSR、SPSR

包括所有的CPSR和SPSR寄存器,其中CPSR(當(dāng)前狀態(tài)寄存器)在所有模式下都是可以讀寫的。SPSR是CPSR的備份。二者格式相同。
「CPSR」(Current Program Status Register,當(dāng)前程序狀態(tài)寄存器),CPSR可在任何運(yùn)行模式下被訪問,它包括條件標(biāo)志位、中斷禁止位、當(dāng)前處理器模式標(biāo)志位,以及其他一些相關(guān)的控制和狀態(tài)位。
每一種運(yùn)行模式下又都有一個(gè)專用的物理狀態(tài)寄存器,稱為「SPSR」(Saved Program Status Register,備份的程序狀態(tài)寄存器),當(dāng)異常發(fā)生時(shí),SPSR用于保存CPSR的當(dāng)前值,從異常退出時(shí)則可由SPSR來恢復(fù)CPSR。
由于用戶模式和系統(tǒng)模式不屬于異常模式,它們沒有SPSR,當(dāng)在這兩種模式下訪問SPSR,結(jié)果是未知的。
條件標(biāo)準(zhǔn),中斷使能標(biāo)志,當(dāng)前處理器的模式,其它的一些狀態(tài)和控制標(biāo)志
ARM編程模型-寄存器組,嵌入式系統(tǒng)筆記,arm開發(fā),嵌入式系統(tǒng)
a. 條件碼標(biāo)志(condition code flags)「N,Z,C,V」均為條件碼標(biāo)志位,它們的內(nèi)容可被算術(shù)或邏輯運(yùn)算的結(jié)果所改變,并且可以決定某條指令是否被執(zhí)行。在ARM狀態(tài)下,絕大多數(shù)的指令都是有條件執(zhí)行的,在Thumb狀態(tài)下,僅有分支指令是有條件執(zhí)行的。
「N (Number)」: 當(dāng)用兩個(gè)補(bǔ)碼表示的帶符號(hào)數(shù)進(jìn)行運(yùn)算時(shí),N=1表示運(yùn)行結(jié)果為負(fù),N=0表示運(yùn)行結(jié)果為正或零
「Z :(Zero)」: Z=1表示運(yùn)算結(jié)果為零,Z=0表示運(yùn)行結(jié)果非零
「C」 : 可以有4種方法設(shè)置C的值:
o (Come)加法運(yùn)算(包括CMP):當(dāng)運(yùn)算結(jié)果產(chǎn)生了進(jìn)位時(shí)C=1,否則C=0
o 減法運(yùn)算(包括CMP):當(dāng)運(yùn)算產(chǎn)生了借位,C=0否則C=1
o 對于包含移位操作的非加/減運(yùn)算指令 ,C為移出值的最后一位
o 對于其他的非加/減運(yùn)算指令C的值通常不改變
「V」 :
(oVerflow)對于加/減法運(yùn)算指令,當(dāng)操作數(shù)和運(yùn)算結(jié)果為二進(jìn)制的補(bǔ)碼表示的帶符號(hào)位溢出時(shí),V=1表示符號(hào)位溢出;對于其他的非加/減運(yùn)算指令V的值通常不改變
「Q」:在ARM V5及以上版本的E系列處理器中,用Q標(biāo)志位指示增強(qiáng)的DSP運(yùn)算指令是否發(fā)生了溢出。在其它版本的處理器中,Q標(biāo)志位無定義
「J:」
僅ARM v5TE-J架構(gòu)支持 , T=0;J = 1 處理器處于Jazelle狀態(tài),也可以和其他位組合.
「E位:」大小端控制位
「A位:」A=1 禁止不精確的數(shù)據(jù)異常
「T :」T = 0;J=0; 處理器處于 ARM 狀態(tài) T = 1;J=0 處理器處于 Thumb 狀態(tài) T = 1;J=1 處理器處于 ThumbEE 狀態(tài)

b. 控制位 CPSR的低8位(包括I,F,T和M[4:0])稱為控制位,當(dāng)發(fā)生異常時(shí)這些位可以被改變,如果處理器運(yùn)行特權(quán)模式,這些位也可以由程序修改。
「中斷禁止位I,F」【重要】 I=1 禁止IRQ中斷 F=1 禁止FIQ中斷
比如我們要想在程序中實(shí)現(xiàn)禁止中斷,那么就需要將CPSR[7]置1。

c.模式控制位的值和相關(guān)寄存器列表
ARM編程模型-寄存器組,嵌入式系統(tǒng)筆記,arm開發(fā),嵌入式系統(tǒng)
注意觀察這5個(gè)bit的特點(diǎn),最高位都是1,低4位的值則各不相同,這個(gè)很重要,要想搞清楚uboot、linux的源碼,尤其是異常操作的代碼,必須要知道這幾個(gè)bit的值。

程序狀態(tài)寄存器(v5及v6新增標(biāo)志位)
ARM編程模型-寄存器組,嵌入式系統(tǒng)筆記,arm開發(fā),嵌入式系統(tǒng)文章來源地址http://www.zghlxwxcb.cn/news/detail-692619.html

到了這里,關(guān)于ARM編程模型-寄存器組的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • ARM編程模型-寄存器組

    ARM編程模型-寄存器組

    Cortex A系列ARM處理器共有40個(gè)32位寄存器,其中33個(gè)為通用寄存器,7個(gè)為狀態(tài)寄存器。usr模式和sys模式共用同一組寄存器。 通用寄存器包括R0~R15,可以分為3類: 未分組寄存器R0~R7 分組寄存器R8~R14、R13(SP) 、R14(LR) 程序計(jì)數(shù)器PC(R15)、R8_fiq-R12_fir為快中斷獨(dú)有 在不同模式下,名稱相同的

    2024年02月10日
    瀏覽(17)
  • 人工智能深入?yún)⑴c嵌入式控制器調(diào)試---ChatGPT回答TC377 PSRi寄存器ACT位置位失效問題

    人工智能深入?yún)⑴c嵌入式控制器調(diào)試---ChatGPT回答TC377 PSRi寄存器ACT位置位失效問題

    做嵌入式開發(fā)的小伙伴們,有福利了! 當(dāng)遇到調(diào)試過程中遇到難題,我們往往會(huì)找手冊,上網(wǎng)搜索,找FAE來解決,?現(xiàn)在有了ChatGPT,嘗試問了下調(diào)試的問題,如下 ?首先 我的問題描述 : 當(dāng)設(shè)置 MCMCAN 控制器模式時(shí),當(dāng) CCCRi.INT 被設(shè)置為 NORMAL 時(shí),什么會(huì)導(dǎo)致 TC377 cpu PSRi 寄存

    2023年04月27日
    瀏覽(18)
  • 痞子衡嵌入式:不清i.MXRTxxx里FLEXSPI_MCR0寄存器保留位會(huì)造成IP CMD讀寫異常

    大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家介紹的是 不清i.MXRTxxx里FLEXSPI_MCR0寄存器保留位會(huì)造成IP CMD讀寫異常 。 痞子衡曾經(jīng)寫過一篇文章 《改動(dòng)i.MXRT1xxx里IOMUXC_GPR寄存器保留位可能會(huì)造成系統(tǒng)異?!罚@篇文章提出了一個(gè)觀點(diǎn),即對于 MCU 外設(shè)寄存器應(yīng)

    2024年03月09日
    瀏覽(28)
  • 痞子衡嵌入式:如果i.MXRT1xxx離線無法啟動(dòng),請先查看SRC_SBMRx寄存器

    大家好,我是痞子衡,是正經(jīng)搞技術(shù)的痞子。今天痞子衡給大家介紹的是 SRC_SBMRx寄存器對于定位i.MXRT1xxx離線無法啟動(dòng)問題的意義 。 最近有一位開源社區(qū)大佬在使能 RT1050 BEE 加密過程中遇到無法啟動(dòng)問題,折騰到一度崩潰,甚至想要棄坑。痞子衡哪能讓這位“老鄉(xiāng)”跑掉,連

    2024年02月19日
    瀏覽(19)
  • 【ARM裸機(jī)編程 | 海思SS528】- 操作 GPIO 寄存器輸出低電平點(diǎn)亮 LED 燈

    【ARM裸機(jī)編程 | 海思SS528】- 操作 GPIO 寄存器輸出低電平點(diǎn)亮 LED 燈

    這篇文章主要介紹在 海思SS528 開發(fā)板,去操作某個(gè) GPIO 寄存器輸出高、低電平,來熄滅或點(diǎn)亮 LED 燈。 首先,了解一下 ARM裸機(jī)編程 ,也就是在一塊沒有移植操作系統(tǒng)的ARM開發(fā)板去編程,相當(dāng)于把它當(dāng)成單片機(jī)去使用,很多與硬件相關(guān)的操作都需要直接讀寫該硬件的寄存器。

    2024年02月10日
    瀏覽(22)
  • ARM寄存器組織

    ARM寄存器組織

    ?ARM有37個(gè)32位長的寄存器: 1個(gè)用做PC(Program Counter); 1個(gè)用做CPSR(Current Program Status Register); 5個(gè)用做SPSR(Saved Program Status Registers); 30個(gè)通用寄存器。 ARM處理器共有37個(gè)寄存器,被分為若干個(gè)組(BANK),這些寄存器均為32位的寄存器。6個(gè)狀態(tài)寄存器,用以標(biāo)識(shí)CPU的工作狀

    2024年02月01日
    瀏覽(39)
  • ARM 寄存器

    ARM 寄存器

    Cortex A 系列的 ARM 處理器共有 40 個(gè) 32 位寄存器,其中 33 個(gè)為通用寄存器,7 個(gè)為狀態(tài)寄存器。用戶模式和系統(tǒng)模式共用同一組寄存器。 一、未分組寄存器 R0~R7 有些寄存器是所有運(yùn)行模式共用的,如 R0~R7,它們被稱為未分組寄存器。 在所有運(yùn)行模式下,未分組寄存器都指向同

    2024年02月02日
    瀏覽(24)
  • ARM寄存器組

    ARM寄存器組

    CM3 擁有通用寄存器 R0‐R15 以及一些特殊功能寄存器。 R0-R7也被稱為低組寄存器,所有指令可以訪問它們,它們的字長為32位,復(fù)位后的初始值是不可預(yù)料的。 R8-R12也被稱為高組寄存器,所有指令可以訪問它們,它們的字長為32位,復(fù)位后的初始值是不可預(yù)料的。 R13寄存器中

    2024年02月10日
    瀏覽(19)
  • Arm匯編---寄存器

    寄存器:r0~r15, sp, lr, sb, sl, fp, ip, pc 條件碼:eq, ne, hs, lo, mi, pl, vs, vc, hi, ls, ge, lt, gt, le, al ------------------------------------------ 一、數(shù)據(jù)寄存器 --------------------------------------------- ------------------------------------------ 二、指針寄存器 --------------------------------------------- --------------------

    2024年02月02日
    瀏覽(23)
  • ARM處理器有哪些工作模式和寄存器?各寄存器作用是什么?ARM異常中斷處理流程?

    ARM處理器有哪些工作模式和寄存器?各寄存器作用是什么?ARM異常中斷處理流程?

    快速學(xué)習(xí)嵌入式開發(fā)其他基礎(chǔ)知識(shí)? 返回專欄總目錄 《嵌入式工程師自我修養(yǎng)/C語言》 Tip??:鼠標(biāo)懸停雙虛線/句,可獲得更詳細(xì)的描述 ??ARM處理器有多種工作模式,如下表所示。應(yīng)用程序正常運(yùn)行時(shí),ARM處理器工作在 用戶模式(User mode) ,當(dāng)程序運(yùn)行出錯(cuò)或有中

    2024年02月21日
    瀏覽(567)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包