ARM學(xué)習(xí)路線01-ARM體系結(jié)構(gòu)

第一部分 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é)坑质,如圖:
    PC值
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中各位如圖:
程序狀態(tài)寄存器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ù)仇味,這些固定的地址稱為異常向量呻顽。

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

如下列出了異常類型和其對(duì)應(yīng)的處理器模式:
異常向量表
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墨闲、大端模式:數(shù)據(jù)的高字節(jié)存儲(chǔ)在低地址中今妄,低字節(jié)存儲(chǔ)在高地址中。
B鸳碧、小端模式:數(shù)據(jù)的低字節(jié)存儲(chǔ)在低地址中盾鳞,高字節(jié)存儲(chǔ)在高地址中。

地址為A的字單元存儲(chǔ)方式如圖:
存儲(chǔ)格式
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末瞻离,一起剝皮案震驚了整個(gè)濱河市腾仅,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌套利,老刑警劉巖推励,帶你破解...
    沈念sama閱讀 206,378評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鹤耍,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡吹艇,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門昂拂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來受神,“玉大人,你說我怎么就攤上這事格侯”翘” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵联四,是天一觀的道長撑碴。 經(jīng)常有香客問我,道長朝墩,這世上最難降的妖魔是什么醉拓? 我笑而不...
    開封第一講書人閱讀 55,259評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮收苏,結(jié)果婚禮上亿卤,老公的妹妹穿的比我還像新娘。我一直安慰自己鹿霸,他們只是感情好排吴,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著懦鼠,像睡著了一般钻哩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上肛冶,一...
    開封第一講書人閱讀 49,036評(píng)論 1 285
  • 那天街氢,我揣著相機(jī)與錄音,去河邊找鬼睦袖。 笑死阳仔,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的扣泊。 我是一名探鬼主播近范,決...
    沈念sama閱讀 38,349評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼延蟹!你這毒婦竟也來了评矩?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,979評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤阱飘,失蹤者是張志新(化名)和其女友劉穎斥杜,沒想到半個(gè)月后虱颗,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,469評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蔗喂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評(píng)論 2 323
  • 正文 我和宋清朗相戀三年忘渔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缰儿。...
    茶點(diǎn)故事閱讀 38,059評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡畦粮,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出乖阵,到底是詐尸還是另有隱情宣赔,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評(píng)論 4 323
  • 正文 年R本政府宣布瞪浸,位于F島的核電站儒将,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏对蒲。R本人自食惡果不足惜钩蚊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蹈矮。 院中可真熱鬧两疚,春花似錦、人聲如沸含滴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽谈况。三九已至勺美,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間碑韵,已是汗流浹背赡茸。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留祝闻,地道東北人占卧。 一個(gè)月前我還...
    沈念sama閱讀 45,501評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像联喘,于是被迫代替她去往敵國和親华蜒。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評(píng)論 2 345