ARM7寄存器分布图
??????? 在匯編語言中寄存器R0~R13為保存數(shù)據(jù)或地址值的通用寄存器。它們是完全通用的寄存器,不會被體系結(jié)構(gòu)作為特殊用途,并且可用于任何使用通用寄存器的指令。其中R0~R7為未分組的寄存器,也就是說對于任何處理器模式,這些寄存器都對應(yīng)于相同的32位物理寄存器。寄存器R8~R14為分組寄存器。它們所對應(yīng)的物理寄存器取決于當(dāng)前的處理器模式,幾乎所有允許使用通用寄存器的指令都允許使用分組寄存器。寄存器R8~R12有兩個(gè)分組的物理寄存器。一個(gè)用于除FIQ模式之外的所有寄存器模式,另一個(gè)用于FIQ模式。這樣在發(fā)生FIQ中斷后,可以加速FIQ的處理速度。
??????? 寄存器R13、R14分別有6個(gè)分組的物理寄存器。一個(gè)用于用戶和系統(tǒng)模式,其余5個(gè)分別用于5種異常模式。
??????? 寄存器R13常作為堆棧指針(SP)。在ARM指令集當(dāng)中,沒有以特殊方式使用R13的指令或其它功能,只是習(xí)慣上都這樣使用。但是在Thumb指令集中存在使用R13的指令。
??????? R14為鏈接寄存器(LR),在結(jié)構(gòu)上有兩個(gè)特殊功能:
??????? 1,在每種模式下,模式自身的R14版本用于保存子程序返回地址;
??????? 2,當(dāng)發(fā)生異常時(shí),將R14對應(yīng)的異常模式版本設(shè)置為異常返回地址(有些異常有一個(gè)小的固定偏移量)。
??????? R14寄存器注意要點(diǎn):
??????? 當(dāng)發(fā)生異常嵌套時(shí),這些異常之間可能會發(fā)生沖突。例如:如果用戶在用戶模式下執(zhí)行程序時(shí)發(fā)生了IRQ中斷,用戶模式寄存器不會被破壞。但是如果允許在IRQ模式下的中斷處理程序重新使能IRQ中斷,并且發(fā)生了嵌套的IRQ中斷時(shí),外部中斷處理程序保存在R14_irq中的任何值都將被嵌套中斷的返回地址所覆蓋。
??????? 解決辦法是確保R14的對應(yīng)版本在發(fā)生中斷嵌套時(shí)不再保存任何有意義的值(將R14入棧),或者切換到其它處理器模式下。
??????? 寄存器R15為程序計(jì)數(shù)器(PC),它指向正在取指的地址。可以認(rèn)為它是一個(gè)通用寄存器,但是對于它的使用有許多與指令相關(guān)的限制或特殊情況。如果R15使用的方式超出了這些限制,那么結(jié)果將是不可預(yù)測的。
??????? 寄存器CPSR為程序狀態(tài)寄存器,在異常模式中,另外一個(gè)寄存器“程序狀態(tài)保存寄存器(SPSR)”可以被訪問。每種異常都有自己的SPSR,在因?yàn)楫惓J录M(jìn)入異常時(shí)它保存CPSR的當(dāng)前值,異常退出時(shí)可通過它恢復(fù)CPSR。(完)
總結(jié)
以上是生活随笔為你收集整理的ARM7寄存器分布图的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 比尔·盖茨盛赞ChatGPT:称其“不亚
- 下一篇: 汽水音乐怎么看历史播放