<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > ARM體系結構詳解之ARM寄存器

ARM體系結構詳解之ARM寄存器

作者: 時(shí)間:2016-11-21 來(lái)源:網(wǎng)絡(luò ) 收藏
ARM有37個(gè)寄存器,其中31個(gè)通用寄存器,6個(gè)狀態(tài)寄存器。

  這里尤其要注意區別的是ARM自身寄存器和它的一些外設的寄存器的區別。

本文引用地址:http://dyxdggzs.com/article/201611/319312.htm

  ARM自身是統一架構的,也就意味著(zhù)37個(gè)寄存器無(wú)論在哪個(gè)公司的芯片里面都會(huì )出現。但是各家公司會(huì )對ARM進(jìn)行外設的擴展,所以就出現了好多外設寄存器,一定要與這37個(gè)寄存器區別開(kāi)來(lái)?。?!

  1、備份寄存器(R8-R14)

  對于R8-R12來(lái)說(shuō),除在快速中斷模式下,每個(gè)模式對應相同物理寄存器,所以在FIQ模式下可不必保護和恢復中斷現場(chǎng)。

  對于R13-R14來(lái)說(shuō),每個(gè)寄存器對應6個(gè)不同的物理寄存器,其中一個(gè)是用戶(hù)模式和系統模式共用的。

  寄存器R13常用做棧指針SP,除用戶(hù)和系統模式外,其他模式在使用時(shí)的名字構成為R13_。

  寄存器R14又被稱(chēng)為連接寄存器(LR),除用戶(hù)和系統模式外,其他模式在使用時(shí)的名字構成為 R14_。

  R14有下面兩種特殊用途:

  A、每個(gè)處理器模式自己的物理R14中存放在當前子程序的返回地址。當通過(guò)BL或BLX指令調用子程序時(shí),R14被設置成該子程序的返回地址。

  B、當異常中斷發(fā)生時(shí),該異常模式下的R14被設置成保存該模式基于PC的返回地址,對于有些異常模式,R14的值有可能與將返回的地址有個(gè)常數的偏移量,不同模式偏移量還有所不同(在A(yíng)RM 的異常處理里有詳細介紹)。

  2、不分組寄存器(R0-R7)

  不分組也就是說(shuō)說(shuō),在所有的處理器模式下指的都時(shí)同一物理寄存器。在異常中斷造成處理器模式切換時(shí),由于不同的處理器模式使用一個(gè)名字相同的物理寄存器,就是使用的同一個(gè)寄存器,這樣可能造成寄存器中數據被破壞,所以在進(jìn)行模式切換時(shí)必須加以保護。

  

  3、程序計數器R15

  對于用戶(hù)來(lái)說(shuō),盡量避免使用STR/STM指令來(lái)保存R15的值。當成功向R15寫(xiě)入一個(gè)地址數值時(shí),程序將跳轉到該地址執行。

  在A(yíng)RM狀態(tài)下指令總是字對齊的,所以PC的PC[1:0]位恒為零,在想PC寫(xiě)入地址時(shí)一定要注意將PC[1:0]設為零。

  ARM采用的是3級流水線(xiàn)結構,所以PC指向的是當前執行指令的下兩條指令,PC-8為當前指令地址。

  4、程序狀態(tài)寄存器

  CPSR(當前程序狀態(tài)寄存器)可以在任何處理器模式下被訪(fǎng)問(wèn)。同時(shí)除了用戶(hù)和系統模式以外,每中處理器模式下都有一個(gè)專(zhuān)用的物理狀態(tài)寄存器,稱(chēng)為 SPSR(備份程序狀態(tài)寄存器)。當特定的異常中斷發(fā)生時(shí),這個(gè)寄存器用于存放當前程序狀態(tài)寄存器的內容。當在用戶(hù)模式和系統模式中訪(fǎng)問(wèn)SPSR,將會(huì )產(chǎn)生不可預知的結果。

  CPSR和SPSR的格式相同,如下:

  0:M0

  1:M1

  2:M2

  3:M3

  4:M4

  5:T(=1 Thumb執行)

  6:F(=1是禁止)

  7:I(=1是禁止)

  注意:M0~M4并不是所有的組合都定義了有效的處理模式,如果錯誤設置,將會(huì )引起無(wú)法預料的錯誤。

  27:Q 在A(yíng)RM V5的E系列處理器中,CPSR的bit[27]稱(chēng)為q標識位,主要用于指示增強的dsp指令是否發(fā)生了溢出。同樣的spsr的bit[27]位也稱(chēng)為q 標識位,用于在異常中斷發(fā)生時(shí)保存和恢復CPSR中的Q標識位。

  在A(yíng)RM V5以前的版本及ARM V5的非E系列的處理器中,Q標識位沒(méi)有被定義

  28:V 對于加減運算指令,當操作數和運算結果為二進(jìn)制的補碼表示的帶符號數時(shí),V=1表示符號為溢出;通常其他指令不影響V位。

  對于其他指令,V統常不發(fā)生變化。

  29:C 下面分四種情況討論C的設置方法:

  在加法指令中(包括比較指令CMN),當結果產(chǎn)生了進(jìn)位,則C=1,表示無(wú)符號運算發(fā)生上溢出;其他情況C=0。

  在減法指令中(包括減法指令CMP),當運算中發(fā)生借位,則C=0,表示無(wú)符號運算數發(fā)生下溢出;其他情況下C=1。

  對于包含移位操作的非加減運算指令,C中包含最后一次移出位的數值。

  對于其他非加減運算指令,C位的值通常不受影響。

  30:Z z="1表示運算的結果為零";z=0表示運算的結果不為零。對于CMP指令,Z=1表示進(jìn)行比較的兩個(gè)數大小相等。

  31:N 當兩個(gè)表示的有符號整數運算時(shí),n=1表示運算結果為負數,n=0表示結果為正書(shū)或零。

  MRS:狀態(tài)寄存器到通用寄存器的傳送指令。

  MSR:通用寄存器到狀態(tài)寄存器的傳送指令



關(guān)鍵詞: ARM體系結構ARM寄存

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>