新聞中心

        arm寄存器解析

        作者: 時間:2016-11-10 來源:網(wǎng)絡 收藏
        寒假閑來無事準備將自己的走過的arm之路總結(jié)一下,今天就先從arm的寄存器說起吧,歡迎各位拍磚。
        要介紹arm寄存器之前我們要先了解一下arm處理器的工作模式:
        Arm處理器有七種工作模式,為的是形成不同的使用級別,以防造成對系統(tǒng)的破壞。不同模式可以訪問的寄存器不同,可以運行的指令不同。
        (1)usr(10):普通應用程序運行的模式(應用程序)
        (2)FIQ(11):快速中斷模式,以處理快速情況,高速數(shù)據(jù)傳輸
        (3)IRQ(10010):外部中斷模式,普通中斷處理
        (4)svc(10011):保護模式(管理模式),操作系統(tǒng)使用的特權(quán)模式(內(nèi)核)
        (5)abt(10):數(shù)據(jù)訪問中止模式,用于虛擬存儲和存儲保護
        (6)und(11011):未定義指令終止模式,用于支持通過軟件仿真硬件的協(xié)處理器
        (7)sys(11):系統(tǒng)模式,用于運行特權(quán)級的操作系統(tǒng)任務(armv4以上版本才具有)
        注意:usr是普通模式,其他六種是特權(quán)模式,而除了usr和sys模式以外的五種模式是異常模式
        --
        Ok下面進入正題:
        我們首先可以找到這樣一本資料《ARM Architecture Reference Manual》在其中的Programmers’Model一章中,我們可以輕松的找到官方文檔對寄存器的說明,建議大家去看看官方的英文文檔,我將其中的重要內(nèi)容簡單的總結(jié)一下。
        Arm處理器總共有37個寄存器其可以分為以下兩類(在此我先列出大框架下面會一一介紹):
        1.通用寄存器(31個)
        1.不分組寄存器(R0—R7)
        2.分組寄存器(R8—R14)
        3.PC指針(R15)
        2.狀態(tài)寄存器(6個)
        1.CPSR(1個)
        2.SPSR(5個)
        相信通過上面的介紹大家對arm的寄存器有個初步的印象,下面官方文檔對寄存器的說明:


        下面我將會結(jié)合上圖和我上面列出的大框架對寄存器進行解析:
        1.不分組寄存器(R0—R7)
        在所有的運行模式下都使用同一個物理寄存器,它們未被系統(tǒng)用作特殊的用途。
        2.分組寄存器(R8—R14)
        a)對于R8~R12,當使用FIQ(快速中斷模式)時訪問寄存器R8_fiq~R12_fiq,當使用除FIQ模式以外的其他模式時,訪問寄存器R8~R12
        b)對于R13,R14來說,每個寄存器對應6個不同的物理寄存器,其中一個是用戶模式與系統(tǒng)模式共用(圖中的R13,R14),另外5個物理寄存器對應其他5種不同的運行模式,并采用以下記號來區(qū)分不同的物理寄存器分別為fiq,irq,svc,abt,und.(如上圖)
        i.R13在ARM指令中常用作堆棧指針SP
        特別注意:由于每一種模式都有自己的R13,所以我們在自己初始化的時候一般都要初始化每種模式下的R13,使其指向該運行模式的??臻g。
        ii.R14稱為子程序鏈接寄存器LR(Link Register)
        有兩個特殊功能,一種是每一種模式下都可以用于保存函數(shù)的返回地址,另外就是異常處理后的返回地址,如中斷。
        3.PC指針(R15)
        R15用作程序計數(shù)器(PC)對應一個物理寄存器,由于ARM體系結(jié)構(gòu)采用了多級流水線技術(shù)(不了解多級流水線的可以訪問這個博客http://blog.csdn.net/abclixu123/article/details/7471822,博主講的不錯),對于ARM指令集而言,PC總是指向當前指令的下兩條指令的地址,即PC的值為當前指令的地址值加8個字節(jié)程序狀態(tài)寄存器。
        4.CPSR
        在官方文檔中我們可以找到


        下面介紹其中幾個比較重要的位,其他位,大家可以參考官方手冊:
        N:當兩個表示的有符號整數(shù)運算時,1表示運算結(jié)果為負數(shù),0表示結(jié)果為正或零。
        Z:1表示運算的結(jié)果為零,0表示運算的結(jié)果不為零。對于CMP指令,1表示進行比較的兩個數(shù)大小相等。
        C:下面分四種情況討論C的設置方法:
        a)加法運算(包括比較指令CMN):當運算產(chǎn)生了進位時(無符號數(shù)溢出),C=1,否則C=0。
        b)減法運算(包括比較指令CMP):當運算時產(chǎn)生了借位(無符號數(shù)溢出),C=0,否則C=1。
        c)對于包含移位操作的非加/減運算指令,C為移出值的最后一位。
        d)對于其他的非加/減運算指令,C的值通常不改變。
        V:下面分兩種情況討論V的設置方法
        a)對于加/減法運算指令,當操作數(shù)和運算結(jié)果為二進制的補碼表示的帶符號數(shù)時,V=1表示符號位溢出。
        b)對于其他的非加/減運算指令,C的值通常不改變。
        I:1表示禁止外部(硬件)中斷(IRQ)
        F:1表示禁止快速中斷(FIQ)
        T:1表示為thumb狀態(tài)0為arm狀態(tài)
        M[4:0]:用來設置處理器的工作模式具體數(shù)據(jù)見本文開始的介紹。
        5.SPSR
        SPSR除usr、sys外,對應用于異常保護的CPSR的備份,異常時,保存CPSR值,異常退出時,將該值恢復到CPSR,以保證程序的正常運行,每一中異常運行模式(除usr和sys)有各自的物理寄存器。

        以上是自己的arm寄存器的簡單理解,希望各位提出寶貴意見,并且在這個寒假從今天開始沒有意外的話我的博客會一天一更,努力學習,歡迎大家監(jiān)督。


        關鍵詞: ARM寄存

        評論


        技術(shù)專區(qū)

        關閉
        主站蜘蛛池模板: 公安县| 远安县| 合阳县| 洪洞县| 宁陕县| 莲花县| 德江县| 承德市| 临朐县| 湘潭市| 威远县| 海口市| 武胜县| 南充市| 宜黄县| 望江县| 安阳市| 绩溪县| 周口市| 衡阳市| 太仆寺旗| 尚义县| 兴宁市| 漳州市| 怀远县| 东乡族自治县| 泰和县| 视频| 南通市| 南川市| 高碑店市| 桃江县| 康乐县| 肥乡县| 眉山市| 大化| 松桃| 沾化县| 衡阳市| 安岳县| 互助|