最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

ARM體系架構(gòu)知識(shí)

2022-06-14 11:53 作者:信盈達(dá)  | 我要投稿

一、ARM處理器簡(jiǎn)介及RISC特點(diǎn)

1、ARM處理器簡(jiǎn)介:

  ARM(Advanced RISC Machines)是一個(gè)32位RISC(精簡(jiǎn)指令集)處理器架構(gòu),ARM處理器則是ARM架構(gòu)下

的微處理器。ARM處理器廣泛的使用在許多嵌入式系統(tǒng)。ARM處理器的特點(diǎn)有指令長(zhǎng)度固定,執(zhí)行效率高,低成本等。


2、RISC設(shè)計(jì)主要特點(diǎn):

 ?。ǎ保┲噶罴猂ISC減少了指令集的種類,通常一個(gè)周期一條指令,采用固定長(zhǎng)度的指令格式,編譯器或

     程序員通過幾條指令完成一個(gè)復(fù)雜的操作。而CISC指令集的指令長(zhǎng)度通常不固定;

 ?。ǎ玻┝魉€——RISC采用單周期指令,且指令長(zhǎng)度固定,便于流水線操作執(zhí)行;

 ?。ǎ常┘拇嫫鳌猂ISC的處理器擁有更多的通用寄存器,寄存器操作較多。例如ARM處理器具有37個(gè)寄存器;

  (4)Load/Store結(jié)構(gòu)——使用加載/存儲(chǔ)指令批量從內(nèi)存中讀寫數(shù)據(jù),提高數(shù)據(jù)的傳輸效率;

 ?。ǎ担ぶ贩绞胶?jiǎn)化,指令長(zhǎng)度固定,指令格式和尋址方式種類減少。


二、Arm的基本數(shù)據(jù)類型:

  雙字節(jié)(DoubleWoRd):64位

  字(WoRd):在ARM體系結(jié)構(gòu)中,字的長(zhǎng)度為32位。

  半字(Half-WoRd):在ARM體系結(jié)構(gòu)中,半字的長(zhǎng)度為16位。

  字節(jié)(Byte):在ARM體系結(jié)構(gòu)中,字節(jié)的長(zhǎng)度為8位。


三、ARM處理器存儲(chǔ)格式:

  ARM體系結(jié)構(gòu)將存儲(chǔ)器看作是從0地址開始的字節(jié)的線性組合。作為32位的微處理器,ARM體系結(jié)構(gòu)所支持的最大尋址空間為4GB。ARM體系結(jié)構(gòu)可以用兩種方法存儲(chǔ)字?jǐn)?shù)據(jù),分別為大端模式和小端模式。

  大端模式(高地高低):字的高字節(jié)存儲(chǔ)在低地址字節(jié)單元中,字的低字節(jié)存儲(chǔ)在高地址字節(jié)單元中。

  小端模式(高高低低):字的高字節(jié)存儲(chǔ)在高地址字節(jié)單元中,字的低字節(jié)存儲(chǔ)在低地址字節(jié)單元中。


四、內(nèi)核的工作模式:

  1、用戶模式(user):正常程序執(zhí)行模式;

  2、快速中斷模式(FIQ):高優(yōu)先級(jí)的中斷產(chǎn)生會(huì)進(jìn)入該種模式,用于高速通道傳輸;

  3、外部中斷模式(IRQ):低優(yōu)先級(jí)中斷產(chǎn)生會(huì)進(jìn)入該模式,用于普通的中斷處理;

  4、特權(quán)模式(Supervisor):復(fù)位和軟中斷指令會(huì)進(jìn)入該模式;

  5、數(shù)據(jù)訪問中止模式(Abort):當(dāng)存儲(chǔ)異常時(shí)會(huì)進(jìn)入該模式;

  6、未定義指令中止模式(Undefined):執(zhí)行未定義指令會(huì)進(jìn)入該模式;

  7、系統(tǒng)模式(System):用于運(yùn)行特權(quán)級(jí)操作系統(tǒng)任務(wù);

  8、監(jiān)控模式(Monitor):可以在安全模式和非安全模式之間切換;


五、ARM指令集:

1、數(shù)據(jù)操作指令:

(1)MOV 將數(shù)據(jù)從一個(gè)寄存器傳送到另一個(gè)寄存器:

  MOV AX,2000H;將16位數(shù)據(jù)2000H傳送到AX寄存器

  MOV AL,20H;將8位數(shù)據(jù)20H傳送到AL寄存器

  MOV AX,BX;將BX寄存器的16位數(shù)據(jù)傳送到AX寄存器

  MOV AL,[2000H];將2000H單元的內(nèi)容傳送到AL寄存器

  MOVW ?把 16 位立即數(shù)放到寄存器的底16位,高16位清0

  MOVT ?把 16 位立即數(shù)放到寄存器的高16位,低 16位不影響

   movw ? ?r8, #19028 ? ?; 0x4a54

   movt ? ?r8, #49456 ? ?; 0xc130

   r8 = 0xc1304a54


(2)AND將寄存器做“邏輯與”操作后保存結(jié)果到其他寄存器

? ? ? ?AND ? R2,R1,R3 ? ? ?// ?R2 = R1 & R3

? ? ? ?ANDS ?R0,R0,#0x01 ? // ?R0 = R0 & 0x01


(3)SUB

? ? ? ?SUB ? R0,R1,R2 ? ? ?//R0 = R1 – R2

? ? ? ?SUB ? R0,R1,#256 ? ?//R0 = R1 -256


(4)ADD

? ? ? ?ADD ?R0,R1,R2 ? ? ? //R0 = R1 + R2

? ? ? ?ADD ?R0,R1,#256 ? ? //R0 = R1 + 256

? ? ? ?ADD ?R0,R2,LSL#1 ? ?//R0 = R2 + (R3 << 1)


(5)CMP比較指令


(6)BIC位清零指令

? ? ? ?BIC ?R0,R0,#0x1011 ?//清除位 0/1/3


2、乘法指令:

  MUL ?MLA

  MUL ?R1,R2,R3 ? ? //R1 = R2 * R3

  MOV ?R0,#0x0A

  MLA ?R1,R2,R3,R0 ? // R1 = R2 * R3 + 10


3、Load/Store指令:

(1)LDR從存儲(chǔ)器中將一個(gè)32位的字?jǐn)?shù)據(jù)傳送到目的寄存器中。

? ? ? ?LDR ?R1,[R0,#0x12] //將R0 +12地址處的數(shù)據(jù)讀出,保存到R0中;

? ? ? ?LDR ?R1,[R0,R2] ? //將R0 + R1地址的數(shù)據(jù)讀出,保存到R1中;

? ? ? ?LDR ?Rd,[Rn],#0x04 //Rn的值用作傳輸數(shù)據(jù)的基地址,在數(shù)據(jù)傳送后,將偏移量0x04與Rn相加寫回到Rd中

  LDR R0,[R1,LSL #3] ? ? ? ? ? ?;將存儲(chǔ)器地址為R1*8的字?jǐn)?shù)據(jù)讀入寄存器R0。

  LDR R0,[R1,R2,LSL #2] ? ?;將存儲(chǔ)器地址為R1+R2*4的字?jǐn)?shù)據(jù)讀入寄存器R0。

  LDR R0,[R1,,R2,LSL #2]! ?;將存儲(chǔ)器地址為R1+R2*4的字?jǐn)?shù)據(jù)讀入寄存器R0,并將R1+R2*4的值存入R1。


(2)STR 用于將一個(gè)32bit的數(shù)據(jù)寫入到指定的內(nèi)存單元

? ? ? STR ?R0,[R1],#8   //將R0中的字?jǐn)?shù)據(jù)寫入以R1為地址的存儲(chǔ)器中,并將新地址R1+8寫入R1。

  STR ?R0,[R1,#8] ? ?  //將R0中的字?jǐn)?shù)據(jù)寫入以R1+8為地址的存儲(chǔ)器中

  STR ?R1, [R0] ? ?    //將r1寄存器的值,傳送到地址值為r0的(存儲(chǔ)器)內(nèi)存中


4、跳轉(zhuǎn)指令:

  B ? ?跳轉(zhuǎn)指令

  BL ? 帶返回的連接跳轉(zhuǎn)

  BX ? 跳轉(zhuǎn)并切換狀態(tài)

  BLX ?帶返回的跳轉(zhuǎn)并切換狀態(tài)


5、狀態(tài)操作指令:

  ARM指令提供了兩條如下指令,可直接控制程序狀態(tài)寄存器(只有在特權(quán)模式下才能修改狀態(tài)寄存器):

(1)MRS: 把程序狀態(tài)寄存器的值送到一個(gè)通用寄存器中

? ? ? ?MRS ?R1, CPSR ?//將CPSR狀態(tài)寄存器讀出,保存到R1中

? ? ? ?MRS ?R2, SPSR


(2)MSR:把寄存器的內(nèi)容傳送到程序狀態(tài)寄存器

? ? ? ?MSR ?CPSR_c,#0xD3 ?//CPSR[7:0] = 0xD3切換到管理模式

? ? ? ?MSR ?CPSR_c,R3 ? ?  //CPSR = R3


6、異常產(chǎn)生指令:

  SWI:軟中斷指令,產(chǎn)生軟中斷,處理器進(jìn)入管理模式;

? ? ? ?  SWI ?0 ?//產(chǎn)生軟中斷,中斷立即數(shù)為0

? ? ? ?  SWI ?0x123456 ?//產(chǎn)生軟中斷,中斷立即數(shù)為0x123456


  BKPT:斷點(diǎn)中斷指令,處理器產(chǎn)生軟件中斷;

?    產(chǎn)生一個(gè)預(yù)取異常,用來設(shè)置軟件斷點(diǎn);


六、ARM指令的尋址方式:

1、立即數(shù)尋址:

  MOV ?R0,#0 ? ? ? ? ?//送0到R0中

  ADD ?R3,R3,#1 ? ? ?//R3的值加1

  CMP ?R7,#1000 ? ? ? //R7的值和1000比較

  BIC ? R9,R8,#0xff00 ?//將R8中8~15位清0,結(jié)果保存在R9中


2、寄存器尋址:

  寄存器的值可以被直接用于數(shù)據(jù)操作指令

   MOV ?R2,R0 ? ? ?//R0的值送R2

   ADD ?R4,R3,R2 ?//R4 = R2 + R3

   CMP ?R7,R8 ? ? ?//比較R7和R8的值


3、寄存器移位尋址:

  預(yù)處理和移位發(fā)生在同一周期內(nèi),有效使用移位寄存器,可以提供代碼執(zhí)行效率;

   ADD ?R2,R0,R1,LSR ?#5

   MOV ?R1,R0,LSL ?#2

   RSB ?R9,R5,R5,LSL ?#1

   SUB ?R1,R2,R0,LSR ?#4


4、寄存器間接尋址:

  LDR ?R1,[R2] ?//將R2的數(shù)值作為地址,取出地址中的數(shù)據(jù)保存到R1中

  STR ?R1,[R2] ?//將R2數(shù)值作為地址,取出R1中的值存入R2所指向的地址


5、基址變址尋址:

  基址變址是將基址寄存器的內(nèi)容與指令中給出的偏移量相加,形成操作數(shù)的有效地址;

  基址變址尋址常用于查表、數(shù)組操作、訪問基址附近的存儲(chǔ)單元等。

   LDR ?R1,[ R0,#0xf ] ?//將R0的數(shù)值加0x0f作為地址,取出此地址的數(shù)值保存到R1

   STR ?R1,[R0,#-2] ? //將R0的數(shù)值減2作為地址,將R1中的內(nèi)容保存到此地址中

   STR ?R1,[R0,+R2] ? //將R0的值加上R2的值作為地址,把R1的內(nèi)容保存到該地址


6、多寄存器尋址/塊拷貝尋址:

  批量Load、Store指令將一片連續(xù)的內(nèi)存單元數(shù)據(jù)加載到通用寄存器組中,或?qū)⒁唤M通用寄存器的數(shù)據(jù)存儲(chǔ)

到內(nèi)存單元中:

    IA :后遞增方式

    IB :先遞增方式

    DA:后遞減方式

    DB:先遞減方式


塊拷貝尋址指令:

? ? ?   ?STMIA ?

? ? ?    STMIB


7、相對(duì)尋址:

  BL ?FUN1 ? ? //調(diào)用到FUN1的子程序

  B ? LOOP ? ? //條件跳轉(zhuǎn)到LOOP標(biāo)號(hào)處

  STMDA

  STMDB


版權(quán)聲明:本文為CSDN博主「frank_zyp」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。版權(quán)歸原作者所有,如有侵權(quán),請(qǐng)聯(lián)系刪除。

原文鏈接:ARM體系架構(gòu)總結(jié)_frank_zyp的博客-CSDN博客_arm架構(gòu)

ARM體系架構(gòu)知識(shí)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
察雅县| 克什克腾旗| 德保县| 信丰县| 连州市| 云龙县| 白山市| 蛟河市| 乐东| 万年县| 黎川县| 磐安县| 鄂伦春自治旗| 巴彦淖尔市| 闽侯县| 西平县| 云林县| 射洪县| 密山市| 蚌埠市| 平顶山市| 沈丘县| 会东县| 北碚区| 甘德县| 叙永县| 克什克腾旗| 清河县| 丰顺县| 阿克陶县| 南充市| 安陆市| 壶关县| 文水县| 中西区| 府谷县| 文安县| 崇阳县| 德庆县| 迁安市| 太保市|