第一部分 ARM體系結(jié)構(gòu)
? ? ? ?ARM(Advanced RISC Machines)既可以認(rèn)為是一個(gè)公司的名字重付,也可以認(rèn)為是對(duì)一類微處理器的通稱蓬推,還可以認(rèn)為是一種技術(shù)的名字慌洪。1991年ARM公司成立于英國劍橋拣宰,它既不生產(chǎn)芯片也不銷售芯片柄冲,而是只出售芯片技術(shù)授權(quán)遵绰。ARM是一種RISC(精簡指令集)的CPU辽幌,它具有高性能、低功耗街立、低成本的特點(diǎn)舶衬。
下面分別從處理器模式埠通、寄存器構(gòu)成赎离、異常模式、存儲(chǔ)方式等幾個(gè)方面分別介紹ARM體系結(jié)構(gòu)端辱。
1. ARM處理器模式
ARM處理器共有7中工作模式梁剔,如下表:除用戶模式外其它6中處理器模式均為特權(quán)模式(Privileged Mode)虽画,而除系統(tǒng)模式外其它5中特權(quán)模式又稱為異常模式。處理器模式可以通過軟件控制進(jìn)行切換荣病,也可以通過外部中斷或異常處理過程進(jìn)行切換码撰,特權(quán)模式下程序可以訪問所有的系統(tǒng)資源。
2. 寄存器構(gòu)成
ARM處理器共有37個(gè)寄存器个盆。其中包括:
- 31個(gè)通用寄存器脖岛,都是32位寄存器;
-
6個(gè)狀態(tài)寄存器颊亮,都是32位但目前只使用了12位柴梆。
各處理器模式下可見的寄存器情況如下表:
2.1 通用寄存器R0~R15又可分為一下三組:
- 未分組的寄存器:R0~R7
- 分組的寄存器:R8~R14
- 程序計(jì)數(shù)器(PC):R15
未分組寄存器:所有處理器模式下指的都是同一物理寄存器,完全通用终惑;
分組寄存器:對(duì)R8~R12每種寄存器對(duì)應(yīng)2個(gè)不同的物理寄存器绍在;而對(duì)R13、R14每種寄存器對(duì)應(yīng)6個(gè)不同的物理寄存器雹有;
寄存器R13(SP)在ARM中常用做棧指針偿渡;
寄存器R14又被稱作連接寄存器(Link Register,LR)霸奕,每一種處理器模式自己的物理R14存放當(dāng)前子程序的返回地址溜宽;
程序計(jì)數(shù)器R15:又被記作PC,由于ARM采用流水線機(jī)制质帅,PC的值等于當(dāng)前指令地址值+8個(gè)字節(jié)坑质,如圖:
2.2 程序狀態(tài)寄存器CPSR、SPSR
? ? ? ?CPSR(當(dāng)前程序狀態(tài)寄存器)可在任何處理器模式下被訪問临梗,每一種處理器模式下又有一個(gè)專用的物理狀態(tài)寄存器稱為SPSR(備份程序狀態(tài)寄存器)涡扼,當(dāng)特定異常發(fā)生時(shí),這個(gè)寄存器用于存放當(dāng)前狀態(tài)寄存器的內(nèi)容盟庞;在異常中斷退出時(shí)吃沪,可用SPSR中保存的值來恢復(fù)CPSR。CPSR中各位如圖:3. 異常模式
3.1 ARM中有7種類型的異常中斷:
(1)復(fù)位異常(Reset):系統(tǒng)加電時(shí)什猖、系統(tǒng)復(fù)位時(shí)票彪、軟件控制復(fù)位時(shí)會(huì)觸發(fā)該中斷;
(2)預(yù)取異常(Prefetch Abort):處理器欲取的指令的地址不存在或者改地址不允許當(dāng)前指令訪問不狮,處理器產(chǎn)生指令欲取終止異常中斷降铸;
(3)數(shù)據(jù)異常(Data Abort):數(shù)據(jù)訪問指令的目標(biāo)地址不存在或者改地址不允許當(dāng)前指令訪問,處理器產(chǎn)生數(shù)據(jù)訪問終止異常中斷摇零;
(4)快速中斷異常(FIQ):快速中斷請(qǐng)求引腳有效推掸,CPSR寄存器F控制位被清除時(shí),處理器產(chǎn)生快速中斷異常請(qǐng)求;
(5)外部中斷異常(IRQ):外部中斷請(qǐng)求引腳有效谅畅,CPSR寄存器I控制位被清除時(shí)登渣,處理器產(chǎn)生外部中斷異常;
(6)軟中斷異常(SWI):軟件中需要去打斷處理器工作, 可以使用軟中斷來執(zhí)行毡泻;
(7)未定義指令異常(Undefined Instruction):處理器無法識(shí)別指令的異常, 處理器執(zhí)行的指令是有規(guī)范的胜茧;
3.2 異常向量
當(dāng)異常發(fā)生時(shí),程序強(qiáng)制跳轉(zhuǎn)到異常對(duì)應(yīng)的地址執(zhí)行相應(yīng)的處理函數(shù)仇味,這些固定的地址稱為異常向量呻顽。
如下列出了異常類型和其對(duì)應(yīng)的處理器模式:0x00000000: b reset
0x00000004: ldr pc, _undefined_instruction
0x00000008: ldr pc, _software_interrupt
0x00000008: ldr pc, _software_interrupt
0x0000000c: ldr pc, _prefetch_abort
0x00000010: ldr pc, _data_abort
0x00000014: ldr pc, _not_used //保留
0x00000018: ldr pc, _irq
0x0000001c: ldr pc, _fiq
3.3 ARM處理器對(duì)異常中斷的響應(yīng)過程
ARM處理器對(duì)異常中斷的響應(yīng)過程如下所述:
- 將下一條指令的地址存入相應(yīng)的鏈接寄存器LR中,供中斷處理完返回時(shí)用丹墨;
- 將當(dāng)前程序狀態(tài)寄存器CPSR的內(nèi)容保存到將要執(zhí)行異常中斷對(duì)應(yīng)的SPSR寄存器中芬位;
- 根據(jù)異常類型設(shè)置CPSR中相應(yīng)的位,包括運(yùn)行模式位带到;
- 將程序計(jì)數(shù)器值(PC)設(shè)置成該異常中斷的中斷向量地址昧碉,從而跳轉(zhuǎn)到相應(yīng)的異常中斷處理程序處執(zhí)行;
3.4 從異常中斷處理程序中返回
從異常中斷處理程序中返回包括如下操作:
- 恢復(fù)中斷的程序的處理器狀態(tài)揽惹,將 SPSR 復(fù)制到 CPSR 中被饿;
- 若在進(jìn)入異常處理時(shí)設(shè)置了中斷禁止位,要在此清除搪搏;
- 將連接寄存器 LR 的值減去相應(yīng)的偏移量后送到 PC狭握;
復(fù)位異常中斷處理程序不需要返回,在復(fù)位異常中斷程序開始整個(gè)用戶程序的執(zhí)行疯溺。
4. 存儲(chǔ)方式
? ? ? ?在ARM體系中论颅,每個(gè)字單元包含4個(gè)字節(jié)單元或者兩個(gè)半字單元,一個(gè)半字就包含2個(gè)字節(jié)單元囱嫩。那么在字單元中恃疯,4個(gè)字節(jié)哪一個(gè)是高位字節(jié),哪一個(gè)是低位字節(jié)則有兩種不同的格式:
地址為A的字單元存儲(chǔ)方式如圖:A墨闲、大端模式:數(shù)據(jù)的高字節(jié)存儲(chǔ)在低地址中今妄,低字節(jié)存儲(chǔ)在高地址中。
B鸳碧、小端模式:數(shù)據(jù)的低字節(jié)存儲(chǔ)在低地址中盾鳞,高字節(jié)存儲(chǔ)在高地址中。