版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、嵌入式微處理器系統(tǒng)及應(yīng)用嵌入式微處理器系統(tǒng)及應(yīng)用第三章第三章 ARMARM嵌入式微處理器指令集嵌入式微處理器指令集概覽概覽主要內(nèi)容主要內(nèi)容 1 ARM1 ARM指令集概述指令集概述 2 ARM V4T2 ARM V4T架構(gòu)指令體系架構(gòu)指令體系 3 ARM v5TE 3 ARM v5TE 架構(gòu)指令體系架構(gòu)指令體系 4 ARM v6 4 ARM v6 架構(gòu)指令體系新特性架構(gòu)指令體系新特性 5 Thumb5 Thumb指令集指令集 3.1.1 ARM指令集指令集 ARMARM指令集主要包括指令集主要包括6 6大類指令:大類指令: 數(shù)據(jù)處理指令:如ADD、SUB、AND等 加載存儲(Load-Stor
2、e)指令:如LDR等 分支指令:如B、BL等 狀態(tài)寄存器訪問指令:如MRS、MSR等 協(xié)處理器指令:如LDC、STC等 異常處理指令:如SWI等3.1.1 ARM指令集指令集 ARMARM指令集的特點(diǎn)指令集的特點(diǎn) 所有ARM指令都是32位定長的 加載存儲(Load-Store)架構(gòu) 提供功能強(qiáng)大的一次加載和存儲(Load-Store)多個寄存器的指令 CPU內(nèi)核硬件中提供了桶型(barrel)移位器,移位操作可以內(nèi)嵌在其他指令中 所有的ARM指令都是可以條件執(zhí)行的 3.1.1 ARM指令集指令集 示例示例3.1.2 THUMB指令集指令集 ThumbThumb指令集是指令集是1616位的指令集
3、,它對位的指令集,它對C C代碼的密度代碼的密度進(jìn)行了優(yōu)化,平均達(dá)到約進(jìn)行了優(yōu)化,平均達(dá)到約ARMARM代碼大小的代碼大小的65%65%。為。為了盡量降低指令編碼長度,了盡量降低指令編碼長度,ThumbThumb指令集具體采用指令集具體采用了如下約束:了如下約束: 不能使用條件執(zhí)行,而對于標(biāo)志則一直都是根據(jù)指令結(jié)果進(jìn)行設(shè)置的 源寄存器和目標(biāo)寄存器是相同的 只使用低端寄存器,即不使用寄存器R8-R12 對指令中出現(xiàn)的常量有大小的限制 不能在指令中使用內(nèi)嵌的桶型移位器(inline barrel shifter)3.1.3 THUMB-2指令集指令集 Thumb-2 Thumb-2 指令集主要是對
4、指令集主要是對ThumbThumb指令集架構(gòu)的擴(kuò)展,指令集架構(gòu)的擴(kuò)展,其設(shè)計目標(biāo)是以其設(shè)計目標(biāo)是以ThumbThumb的指令密度達(dá)到的指令密度達(dá)到ARMARM的性能。的性能。它具有如下特性它具有如下特性 增加了32位的指令,因而實現(xiàn)了幾乎ARM指令集架構(gòu)的所有功能 完整保留了16位的Thumb指令集 編譯器可以自動地選擇16位和32位指令的混合 具有ARM態(tài)的行為,包括可以直接處理異常、訪問協(xié)處理器以及完成v5TE的高級數(shù)據(jù)處理功能 通過If-Then (IT) 指令,1-4條緊鄰的指令可以條件執(zhí)行3.1.4 JAZELLE JazelleJazelle技術(shù)使得技術(shù)使得ARMARM核可以執(zhí)行核
5、可以執(zhí)行8 8位的位的JavaJava字節(jié)碼,約字節(jié)碼,約95%95%的的JAVAJAVA字節(jié)碼可以由硬件執(zhí)字節(jié)碼可以由硬件執(zhí)行,從而使效率顯著提高。行,從而使效率顯著提高。 3.1.5 為什么需要學(xué)習(xí)匯編指令為什么需要學(xué)習(xí)匯編指令 嵌入式系統(tǒng)的初始化代碼需要用匯編指令來編寫。初始化嵌入式系統(tǒng)的初始化代碼需要用匯編指令來編寫。初始化代碼通常包括處理器的初始化、內(nèi)存初始化等,其中涉及代碼通常包括處理器的初始化、內(nèi)存初始化等,其中涉及一些比較特殊的操作,比如設(shè)置處理器在不同工作模式下一些比較特殊的操作,比如設(shè)置處理器在不同工作模式下的堆棧指針,需要使用特殊的訪問處理器狀態(tài)寄存器的指的堆棧指針,需要
6、使用特殊的訪問處理器狀態(tài)寄存器的指令,強(qiáng)制處理器切換到不同模式下進(jìn)行操作;令,強(qiáng)制處理器切換到不同模式下進(jìn)行操作; 一些中斷例程尤其是作為一種異常被響應(yīng)的第一級中斷派一些中斷例程尤其是作為一種異常被響應(yīng)的第一級中斷派發(fā)程序需要用匯編指令來編寫,以提高效率;發(fā)程序需要用匯編指令來編寫,以提高效率; 在軟件的調(diào)試過程中,熟悉匯編指令更有助于查找疑難問在軟件的調(diào)試過程中,熟悉匯編指令更有助于查找疑難問題;題; 某些指令本身就是不能直接由編譯器產(chǎn)生的,而需要人工某些指令本身就是不能直接由編譯器產(chǎn)生的,而需要人工編寫。編寫。3.1.5 為什么需要學(xué)習(xí)匯編指令為什么需要學(xué)習(xí)匯編指令 可以直接控制在可以直接
7、控制在C C語言編程時不能有效使用的語言編程時不能有效使用的3 3個個優(yōu)化工具:優(yōu)化工具: 指令調(diào)整調(diào)整一段代碼中的指令序列,以避免處理器的暫停等待。ARM指令執(zhí)行是在指令流水線中進(jìn)行的,所以一條指令執(zhí)行的時間會受其相鄰指令的影響,在“附錄1指令流水線”中描述了相關(guān)問題。 寄存器分配決定如何分配變量給ARM寄存器或者堆棧,以獲得最好的性能。目標(biāo)是要使訪問存儲器的次數(shù)降到最少。有關(guān)寄存器的分配見本書第2.3.3.4小節(jié)的內(nèi)容。 條件執(zhí)行可以使用ARM條件代碼和條件指令的全部功能。 主要內(nèi)容主要內(nèi)容 1 ARM1 ARM指令集概述指令集概述 2 ARM V4T2 ARM V4T架構(gòu)指令體系架構(gòu)指令
8、體系 3 ARM v5TE 3 ARM v5TE 架構(gòu)指令體系架構(gòu)指令體系 4 ARM v6 4 ARM v6 架構(gòu)指令體系新特性架構(gòu)指令體系新特性 5 Thumb5 Thumb指令集指令集 通過在指令后加上合適的條件標(biāo)志位,通過在指令后加上合適的條件標(biāo)志位,ARMARM指令可以條件執(zhí)行指令可以條件執(zhí)行 通過減少前向的分支數(shù)目,增強(qiáng)了指令的代碼密度和指令性能CMP r0, r1 ADDGT r2, r2, #1 ADDLE r3, r3, #1默認(rèn)情況下默認(rèn)情況下, ,數(shù)據(jù)處理指令不會影響條件標(biāo)志位,但是,可在指令后加數(shù)據(jù)處理指令不會影響條件標(biāo)志位,但是,可在指令后加“s”(s”(或其它條件位
9、或其它條件位) )后綴,以實現(xiàn)標(biāo)志位的置位。后綴,以實現(xiàn)標(biāo)志位的置位。loop ADD r2, r2, r3 SUBS r1, r1, #0 x01 BNE loop r2=r2+r3 如果如果 Z 標(biāo)志清除則分支跳轉(zhuǎn)標(biāo)志清除則分支跳轉(zhuǎn) r1 減減1并設(shè)置標(biāo)志位并設(shè)置標(biāo)志位 r0 - r1, 比較比較 r0 和和 r1 并設(shè)置標(biāo)志位并設(shè)置標(biāo)志位 if r2=r2+1 標(biāo)志位保持不變標(biāo)志位保持不變 if = r3=r3+1 標(biāo)志位保持不變標(biāo)志位保持不變3.2.1條件執(zhí)行和標(biāo)志位條件執(zhí)行和標(biāo)志位條件執(zhí)行的例子條件執(zhí)行的例子if (r0 = 0) r1 = r1 + 1;else r2 = r2 +
10、 1;C 代碼代碼 5 條指令 占據(jù) 5 個字 5個或者6個時鐘周期 3 條指令 占據(jù)3 個字 3 個時鐘周期 CMP r0, #0 BNE else ADD r1, r1, #1 B endelse ADD r2, r2, #1end .ARM 指令指令 非條件執(zhí)行非條件執(zhí)行 CMP r0, #0 ADDEQ r1, r1, #1 ADDNE r2, r2, #1 .條件執(zhí)行條件執(zhí)行指令條件碼指令條件碼 不相等無符號高于或相同無符號低于為負(fù)相等溢出無溢出無符號高于無符號低于或相同為正或零小于大于小于或等于總是大于或等于EQNECS/HSCC/LOPLVSHILSGELTGTLEALMIVC后
11、綴后綴描述描述Z=0C=1C=0Z=1被測試的標(biāo)志被測試的標(biāo)志N=1N=0V=1V=0C=1 & Z=0C=0 or Z=1N=VN!=VZ=0 & N=VZ=1 or N=!V可能的指令條件碼如下所示可能的指令條件碼如下所示 注意: AL 是默認(rèn)的,不需要被特別指出。 3.2.2數(shù)據(jù)處理指令數(shù)據(jù)處理指令由以下指令組成由以下指令組成 : : 算術(shù)運(yùn)算:ADDADCSUBSBC 邏輯運(yùn)算:ANDORREORBIC 比較運(yùn)算:CMPCMNTSTTEQ 數(shù)據(jù)傳送:MOV這些指令僅對存放于寄存器的數(shù)據(jù)操作,對內(nèi)存數(shù)據(jù)是無效的這些指令僅對存放于寄存器的數(shù)據(jù)操作,對內(nèi)存數(shù)據(jù)是無效的. .語
12、法語法: :S Rd, Rn, Operand2 第二個操作數(shù)可以為一個寄存器或者一個立即數(shù) SUB r0, r1, r2 AND r1, r4, #0 xFF 比較指令僅僅設(shè)置了條件標(biāo)志位 無需指定Rd CMP r0, r3 數(shù)據(jù)傳送指令并不指定Rd MOV r0, r1第二個操作數(shù)通過桶型移位器傳輸?shù)降诙€操作數(shù)通過桶型移位器傳輸?shù)紸LUALU寄存器方式寄存器方式, , 可附加移位操作可附加移位操作 移位的值可為以下的兩種: 5位的無符號整數(shù)(031) 其它寄存器的最低字節(jié) 用來實現(xiàn)乘以一個常數(shù) ADD r0, r5, r5 LSL 1 r0 = r5 x 3 立即數(shù)立即數(shù) 范圍在 0-2
13、55的8位立即數(shù) 或者該8位立即數(shù)循環(huán)右移偶數(shù)位得到的數(shù) 允許32位的常數(shù)直接加載到寄存器中結(jié)果結(jié)果操作數(shù)操作數(shù) 1桶型移位器桶型移位器操作數(shù)操作數(shù) 2ALU第二個操作數(shù)第二個操作數(shù)移位操作移位操作DestinationCF0DestinationCFLSL: 邏輯左移邏輯左移ASR: 算術(shù)右移算術(shù)右移相當(dāng)于乘2相當(dāng)于除以2, 保留符號位DestinationCF.0DestinationCFLSR: 邏輯右移邏輯右移ROR: 循環(huán)右移循環(huán)右移相當(dāng)于除以2最低有效位旋轉(zhuǎn)至最高有效位DestinationRRX: 擴(kuò)展的循環(huán)右移擴(kuò)展的循環(huán)右移寄存器數(shù)值右移一位,C標(biāo)志位填補(bǔ)空出的位,移出的位代替
14、C標(biāo)志位CF以下的移位操作是數(shù)據(jù)處理指令的一部分以下的移位操作是數(shù)據(jù)處理指令的一部分. . 移位的范圍為0-31位,對指令的性能不會造成太大的影響ARM ARM 指令不能包含一個指令不能包含一個 3232位的立即數(shù)常數(shù)位的立即數(shù)常數(shù) ARM 指令都是32 位定長的在數(shù)據(jù)處理指令的格式中,第二個操作數(shù)有在數(shù)據(jù)處理指令的格式中,第二個操作數(shù)有1212位來對應(yīng)位來對應(yīng)4 4 位的移位數(shù)乘以位的移位數(shù)乘以2,2,組成了步長為組成了步長為2 2,范圍在,范圍在0 03030的移位值的移位值 立即數(shù)法則:立即數(shù)法則: “8 8 位的常數(shù)循環(huán)右移偶數(shù)位得到位的常數(shù)循環(huán)右移偶數(shù)位得到”07118immed_8
15、ShifterRORrotx2小測試小測試: 指令:指令:0 xe3a004ffMOV r0, #?立即數(shù)常數(shù)立即數(shù)常數(shù) 為了加載更大的立即數(shù)為了加載更大的立即數(shù), , 匯編器提供了偽指令匯編器提供了偽指令: : LDR rd, =const這將這將: : 產(chǎn)生一條 MOV 或者 MVN 指令 或者 產(chǎn)生一條 PC相對尋址的LDR 指令將立即數(shù)從literal pool (嵌入在代碼中的常數(shù)域)里讀出來舉例舉例 LDR r0, =0 xFF=MOV r0, #0 xFF LDR r0, =0 x55555555 =LDR r0, PC, #Imm12DCD 0 x55555555推薦用這種方式
16、將常數(shù)加載到寄存器推薦用這種方式將常數(shù)加載到寄存器加載加載32位的常數(shù)位的常數(shù)有兩類乘法有兩類乘法 分別產(chǎn)生分別產(chǎn)生 3232位和位和 6464位位 的結(jié)果的結(jié)果3232位的這類乘法在位的這類乘法在 ARM7TDMI ARM7TDMI 會執(zhí)行會執(zhí)行 2 2 5 5 時鐘周期時鐘周期 MUL r0, r1, r2; r0 = r1 * r2 MLA r0, r1, r2, r3; r0 = (r1 * r2) + r36464位的乘法提供了兩種乘法指令:無符號和有符號乘位的乘法提供了兩種乘法指令:無符號和有符號乘 這類指令有兩個目標(biāo)寄存器 U|SMULL r4, r5, r2, r3; r5:r
17、4 = r2 * r3 U|SMLAL r4, r5, r2, r3; r5:r4 = (r2 * r3) + r5:r4大多數(shù)的大多數(shù)的 ARM ARM 核不提供整數(shù)除法指令核不提供整數(shù)除法指令 除法操作由c的庫函數(shù)例程或者移位操作實現(xiàn)3.2.3乘法和除法乘法和除法3.2.4分支指令分支指令分支跳轉(zhuǎn)指令有如下的格式分支跳轉(zhuǎn)指令有如下的格式: : BL label 子函數(shù)調(diào)用可加上 L實現(xiàn)實現(xiàn) 在指令編碼中,存在一個 24 位的地址域 在執(zhí)行時它被左移兩位 (因為 ARM 指令是字對齊的),產(chǎn)生一個26位的偏移地址,由此可知跳轉(zhuǎn)的范圍大體在-32MB+32MB之間 引起了流水線清空 B sta
18、rt . .start PC 相對尋址的標(biāo)號相對尋址的標(biāo)號 “start”跳轉(zhuǎn)到此處繼續(xù)執(zhí)行跳轉(zhuǎn)到此處繼續(xù)執(zhí)行:BL func2:BX lrfunc1func2void func1 (void):func2();:子程序子程序?qū)崿F(xiàn)一個傳統(tǒng)的子程序調(diào)用需要兩個步驟實現(xiàn)一個傳統(tǒng)的子程序調(diào)用需要兩個步驟: : 保存返回地址 跳轉(zhuǎn)到子程序的首地址這些步驟可以由一條指令完成這些步驟可以由一條指令完成, , BL 返回地址被保存在鏈接寄存器 (lr/r14) 分支跳轉(zhuǎn)到 +/- 32MB 范圍內(nèi)的任何地址重新加載鏈接寄存器的內(nèi)容至重新加載鏈接寄存器的內(nèi)容至PCPC寄存器即可實現(xiàn)返回寄存器即可實現(xiàn)返回3.2
19、.5單寄存器數(shù)據(jù)傳輸(加載單寄存器數(shù)據(jù)傳輸(加載 / 存儲指令)存儲指令) LDRSTR字 LDRBSTRB字節(jié) LDRHSTRH半字 LDRSB有符號的字節(jié)加載 LDRSH有符號的半字加載存儲系統(tǒng)必須支持所有的訪問尺寸存儲系統(tǒng)必須支持所有的訪問尺寸語法語法: : LDR Rd, STR Rd, 舉例 LDREQB 地址尋址方式地址尋址方式被被LDR/STRLDR/STR指令訪問的地址通過一個基址寄存器和一個偏移量來指定指令訪問的地址通過一個基址寄存器和一個偏移量來指定 對于字和無符號的字節(jié)訪問對于字和無符號的字節(jié)訪問, , 偏移量可以為偏移量可以為: : 一個無符號的12位立即數(shù) (i.e.
20、 0 - 4095 bytes)LDR r0, r1, #8 寄存器, 可附加的對其進(jìn)行移位LDR r0, r1, r2LDR r0, r1, r2, LSL#2對于半字和有符號的字節(jié)訪問對于半字和有符號的字節(jié)訪問, , 偏移量可以為偏移量可以為: : 一個8位的立即數(shù) (i.e. 0 - 255 bytes) 一個寄存器 (不可以被移位)基址寄存器的地址可加也可減基址寄存器的地址可加也可減: :LDR r0, r1, #-8LDR r0, r1, -r2, LSL#2是前序還是后序?qū)ぶ肥乔靶蜻€是后序?qū)ぶ肥欠窀禄芳拇嫫魇欠窀禄芳拇嫫?( (僅限于前序?qū)ぶ穬H限于前序?qū)ぶ? )LDR r0
21、, r1, #-8!0 x7r10 x300基址基址寄存器寄存器0 x300r00 x7源寄存器源寄存器偏移量偏移量80 x308r10 x300初始的基初始的基址寄存器址寄存器0 x300r00 x7源寄存器源寄存器偏移量偏移量80 x308r10 x308更新后的基更新后的基址寄存器址寄存器更新基址寄存器形式更新基址寄存器形式: STR r0,r1,#8!前序?qū)ぶ泛秃笮驅(qū)ぶ非靶驅(qū)ぶ泛秃笮驅(qū)ぶ非靶驅(qū)ぶ非靶驅(qū)ぶ? : STR r0, r1, #8后序?qū)ぶ泛笮驅(qū)ぶ? : STR r0, r1, #80 x780 x7基址寄存器的更新使編寫簡單的塊拷貝例程成為可能基址寄存器的更新使編寫簡單的塊拷貝
22、例程成為可能 舉例: 后序?qū)ぶ房捎脕砜截愐粋€內(nèi)存塊; r5 源數(shù)據(jù)塊的起始指針源數(shù)據(jù)塊的起始指針; r6 源數(shù)據(jù)塊的結(jié)束指針源數(shù)據(jù)塊的結(jié)束指針; r8 目的數(shù)據(jù)塊的起始指針目的數(shù)據(jù)塊的起始指針loopLDRr0, r5, #4; 加載加載4個字節(jié)個字節(jié)STRr0, r8, #4; 存儲至目標(biāo)地址存儲至目標(biāo)地址CMPr5, r6; 檢查是否完畢檢查是否完畢BLTloop; 循環(huán)循環(huán)在這個例子中每次循環(huán)拷貝一個字在這個例子中每次循環(huán)拷貝一個字內(nèi)存塊的拷貝內(nèi)存塊的拷貝 (1) 內(nèi)存增長方內(nèi)存增長方向向r6r5r83.2.6 批量加載批量加載 / 存儲指令存儲指令 語法語法: : Rb!, 4 4 種
23、地址模式種地址模式: : LDMIA / STMIA increment after LDMIB / STMIB increment before LDMDA / STMDA decrement after LDMDB / STMDB decrement beforeIAr2地址增長地址增長方向方向r3r1r2r3r1r2r3r1r2r3r1r0IBDADBLDMxx r0, r1,r2,r3STMxx r0, r1,r2,r3基址寄存器基址寄存器 (Rb)STM / / LDM不僅可用于堆棧操作,它們也可以用來進(jìn)行內(nèi)存塊拷貝不僅可用于堆棧操作,它們也可以用來進(jìn)行內(nèi)存塊拷貝舉例舉例; r5 源
24、數(shù)據(jù)塊的起始指針源數(shù)據(jù)塊的起始指針; r6 源數(shù)據(jù)塊的結(jié)束指針源數(shù)據(jù)塊的結(jié)束指針; r8 目的數(shù)據(jù)塊的起始指針目的數(shù)據(jù)塊的起始指針loopLDMIAr5!, r0-r3; 加載加載 16 個字節(jié)個字節(jié)STMIAr8!, r0-r3; 存儲至目標(biāo)地址存儲至目標(biāo)地址CMPr5, r6; 檢查拷貝是否完畢檢查拷貝是否完畢BLTloop; 循環(huán)循環(huán)在這個例子中每次循環(huán)拷貝在這個例子中每次循環(huán)拷貝8 8個字個字內(nèi)存塊的拷貝內(nèi)存塊的拷貝 (2)內(nèi)存增長方內(nèi)存增長方向向r6r5r8堆棧堆棧LDMFD sp!, r4-r7, pcSP100FF1234AOBE80341010123484209753r41r5
25、 14544r60r712lr9048pc9020r4100100FFr5FF1234r61234A0BEr7A0BE8034pc8034r4100r5FFr61234r7A0BElr8034ABCD8765102E16FFFF1010123484209753Top of MemorySPSP100FF1234A0BE8034SPOld SP100FF1234A0BE8034ARM ARM 堆棧操作由塊數(shù)據(jù)傳輸指令堆棧操作由塊數(shù)據(jù)傳輸指令: : STMFD(Push) 批存儲 滿遞減堆棧滿遞減堆棧 STMDB LDMFD(Pop)批加載 滿遞減堆棧滿遞減堆棧 LDMIA 注意: 寄存器在壓棧時
26、的順序始終是最低編號寄存器的內(nèi)容壓入最低地址的堆??臻g 被指定的寄存器順序是無效的.STMFD sp!, r4-r7, lr用于在內(nèi)存和寄存器之間傳送一個字節(jié)或字的原子操作(不可被打用于在內(nèi)存和寄存器之間傳送一個字節(jié)或字的原子操作(不可被打斷),先讀取內(nèi)存后寫內(nèi)存。斷),先讀取內(nèi)存后寫內(nèi)存。語法語法: : SWPB Rd, Rm, Rn可用于實現(xiàn)信號量可用于實現(xiàn)信號量不能由不能由C C匯編器編譯得到,只能直接由匯編指令實現(xiàn)匯編器編譯得到,只能直接由匯編指令實現(xiàn)RmRd321tempMemoryRn3.2.7 交換(交換(SWP)指令)指令 3.2.8 軟中斷指令(軟中斷指令(SWI) 引起了一
27、個異常自陷,引起了一個異常自陷, 跳轉(zhuǎn)到軟中斷異常向量跳轉(zhuǎn)到軟中斷異常向量 軟中斷處理例程檢查軟中斷號以決定如何處理該號中斷軟中斷處理例程檢查軟中斷號以決定如何處理該號中斷 通過軟中斷這種機(jī)制通過軟中斷這種機(jī)制, , 操作系統(tǒng)可以實現(xiàn)一個優(yōu)先操作集操作系統(tǒng)可以實現(xiàn)一個優(yōu)先操作集合,它們可被用戶模式下的應(yīng)用代碼調(diào)用合,它們可被用戶模式下的應(yīng)用代碼調(diào)用. . 語法語法: : SWI 283124270 Cond 1 1 1 1SWI 號號 (被處理器忽略被處理器忽略)23條件域條件域3.2.9 程序狀態(tài)寄存器訪問指令程序狀態(tài)寄存器訪問指令 MRS / MSRMRS / MSR指令用于在指令用于在
28、CPSR / SPSRCPSR / SPSR寄存器與通用寄存器之間傳輸數(shù)寄存器與通用寄存器之間傳輸數(shù)據(jù)據(jù) MSR 指令允許全部或部分的寄存器內(nèi)容被更新通過寫通過寫CPSRCPSR寄存器,可以開關(guān)中斷、改變處理器模式寄存器,可以開關(guān)中斷、改變處理器模式 典型的是使用一個讀/修改/寫的操作序列:MRS r0,CPSR; 將 CPSR 的內(nèi)容讀至 r0BIC r0,r0,#0 x80 ; 將第7位清零以允許IRQ中斷MSR CPSR_c,r0; 將修改后的值僅寫入c字節(jié)在用戶模式下在用戶模式下, , 所有的位都可以被讀出來,但是僅有條件標(biāo)志位(所有的位都可以被讀出來,但是僅有條件標(biāo)志位(f f)可以
29、被改變可以被改變fsxc2731N Z C V Q2867I F T mode1623 15 54024J1089 19GE3:0 E A IT cond_abcde3.2.10 協(xié)處理器指令協(xié)處理器指令 ARM ARM 體系支持體系支持1616個協(xié)處理器個協(xié)處理器每個協(xié)處理器的指令集都占據(jù)了每個協(xié)處理器的指令集都占據(jù)了 ARMARM指令集的固定部分指令集的固定部分 如果系統(tǒng)中沒有某個協(xié)處理器, 那么就會觸發(fā)未定義指令異常有三種協(xié)處理器指令有三種協(xié)處理器指令 協(xié)處理器數(shù)據(jù)操作指令 CDP : 初始化協(xié)處理器的數(shù)據(jù)處理操作 協(xié)處理器寄存器與ARM處理器寄存器數(shù)據(jù)傳輸指令 MRC : 協(xié)處理器寄存
30、器到ARM 處理器寄存器的數(shù)據(jù)傳輸指令 MCR : ARM 處理器寄存器到協(xié)處理器寄存器的數(shù)據(jù)傳輸指令 協(xié)處理器寄存器和內(nèi)存的數(shù)據(jù)傳輸指令 LDC : 協(xié)處理器數(shù)據(jù)加載指令 STC : 協(xié)處理器數(shù)據(jù)存儲指令主要內(nèi)容主要內(nèi)容 1 ARM1 ARM指令集概述指令集概述 2 ARM V4T2 ARM V4T架構(gòu)指令體系架構(gòu)指令體系 3 ARM v5TE 3 ARM v5TE 架構(gòu)指令體系架構(gòu)指令體系 4 ARM v6 4 ARM v6 架構(gòu)指令體系新特性架構(gòu)指令體系新特性 5 Thumb5 Thumb指令集指令集 ARM v5TE 架構(gòu)架構(gòu)v5TE v5TE 架構(gòu)包含了架構(gòu)包含了v4Tv4T架構(gòu)下所
31、有的架構(gòu)下所有的ARM / ThumbARM / Thumb指令集指令集, , 新增了新增了: : 對ARM / Thumb交互支持的改進(jìn) 在 ARM / Thumb 交互這一章做了介紹 前導(dǎo)0計數(shù)指令 半字的符號乘法指令 對飽和運(yùn)算的支持 程序狀態(tài)寄存器新增Q標(biāo)志位 雙字的加載 / 存儲指令 斷點(diǎn)中斷指令 (ARM 和 Thumb) 高速緩存(cache)預(yù)加載指令3.3.1 前導(dǎo)前導(dǎo)0計數(shù)指令計數(shù)指令 CLZcond Rd, Rm 返回寄存器內(nèi)容中第一個1之前的二進(jìn)制0的個數(shù) 源寄存器掃描從最高位到最低位 在 1 個時鐘周期的內(nèi)完成 如果沒有位為 1 則返回 32 , 如果第 31 位為
32、1 則返回 0 在軟件除法和浮點(diǎn)運(yùn)算中使用左移左移位可規(guī)范化位可規(guī)范化RmRm帶符號的規(guī)范化需要額外的一個周期帶符號的規(guī)范化需要額外的一個周期0000 0010 1110 1101.0R1 =CLZ R0, R10 x6R0=1011 1011 0100 0000.0R1 =MOV R1, R1 LSL R0TRmRsBTBW 選項16161616321632/6432/64Rd(RdHi,RdLo)Rn(RdHi,RdLo)3.3.2 符號乘法操作指令符號乘法操作指令 SMULxycond Rd, Rm, RsSMULxycond Rd, Rm, RsSMULWycond Rd, Rm, R
33、sSMULWycond Rd, Rm, RsSMLAxycond Rd, Rm, Rs, RnSMLAxycond Rd, Rm, Rs, RnSMLAWycond Rd, Rm, Rs, RnSMLAWycond Rd, Rm, Rs, RnSMLALxycond RdLo, RdHi, Rm, RsSMLALxycond RdLo, RdHi, Rm, Rs SMLA 指令會影響指令會影響Q Q標(biāo)志位標(biāo)志位 x, y 代表高半字(代表高半字(T Topop)或者低半字)或者低半字(B Bottomottom) W 代表選擇代表選擇4848位乘積的高位乘積的高3232位位不要去影響不要去影響
34、 NZCVNZCV標(biāo)志位標(biāo)志位 ( (指令后加指令后加SS后綴是不允許的后綴是不允許的) )3.3.3 飽和運(yùn)算指令飽和運(yùn)算指令 飽和運(yùn)算飽和運(yùn)算 向0 x7FFFFFFF加1導(dǎo)致了正值向負(fù)值的轉(zhuǎn)變 從0 x80000000 減1導(dǎo)致負(fù)值向正值的轉(zhuǎn)變在電信領(lǐng)域中,一些在電信領(lǐng)域中,一些DSPDSP算法要求飽和度可以保證算法要求飽和度可以保證 G.723.1 VoIP(IP語音技術(shù)) AMR - Adaptive MultiRate(自適應(yīng)多碼率 )QSUBcond Rd, Rm, Rn;Rd = saturate(Rm - Rn)QADDcond Rd, Rm, Rn;Rd = saturat
35、e(Rm + Rn)QDSUBcond Rd, Rm, Rn;Rd = saturate(Rm - saturate(Rn2)QDADDcond Rd, Rm, Rn;Rd = saturate(Rm + saturate(Rn2)在這些指令的執(zhí)行中,如果飽和發(fā)生,那么在這些指令的執(zhí)行中,如果飽和發(fā)生,那么Q Q 標(biāo)志位就會被置位標(biāo)志位就會被置位0 x00 x7FFFFFFF0 x80000000-ve+ve3.3.4 加載加載 / 存儲存儲2個寄存器指令個寄存器指令 LDR/STRD , 內(nèi)存中相鄰的兩個字與寄存器對內(nèi)存中相鄰的兩個字與寄存器對 (r0,r1), (r2,r3), (r4,r
36、5), (r0,r1), (r2,r3), (r4,r5), (r6,r7), (r8,r9), (r10,r11) or (r12,r13)(r6,r7), (r8,r9), (r10,r11) or (r12,r13)的數(shù)據(jù)傳輸?shù)臄?shù)據(jù)傳輸RdRd需指定為偶數(shù)號的寄存器需指定為偶數(shù)號的寄存器 緊跟其后的奇數(shù)號寄存器用來傳輸?shù)诰o跟其后的奇數(shù)號寄存器用來傳輸?shù)诙€字二個字使用與使用與 LDRH/STRHLDRH/STRH指令相同的尋址模式指令相同的尋址模式 LDRD 指令加載的是兩個字中內(nèi)存較小的地址較高地址由該地址指令加載的是兩個字中內(nèi)存較小的地址較高地址由該地址+4+4產(chǎn)生產(chǎn)生地址必須是地址
37、必須是8 8字節(jié)對齊的字節(jié)對齊的3.3.5 斷點(diǎn)指令斷點(diǎn)指令 斷點(diǎn)指令斷點(diǎn)指令 - - BKPT 執(zhí)行該指令或?qū)⒁鹨粋€預(yù)取指令異常,或者使處理器進(jìn)入調(diào)試狀態(tài) 若有調(diào)試軟件,它將該指令處理為斷點(diǎn) 若有調(diào)試硬件,那么將被直接作為一個斷點(diǎn)處理 立即數(shù)的值將被處理器忽略3.3.6 高速緩存預(yù)加載指令高速緩存預(yù)加載指令 高速緩存預(yù)加載指令高速緩存預(yù)加載指令 - - PLD Rn, 偏移量可以為 無符號的12位立即數(shù) (ie 0 - 4095 bytes). 寄存器, 可選擇移位操作 它告訴存儲系統(tǒng)對一個指定地址的數(shù)據(jù)訪問即將到來 PLD 是一條提示指令 如果在實現(xiàn)時對該指令不支持,那么相當(dāng)于做了一條空
38、操作語句 NOP主要內(nèi)容主要內(nèi)容 1 ARM1 ARM指令集概述指令集概述 2 ARM V4T2 ARM V4T架構(gòu)指令體系架構(gòu)指令體系 3 ARM v5TE 3 ARM v5TE 架構(gòu)指令體系架構(gòu)指令體系 4 ARM v6 4 ARM v6 架構(gòu)指令體系新特性架構(gòu)指令體系新特性 5 Thumb5 Thumb指令集指令集 V6的新特性的新特性 ARM ARM 的的 V6 V6 版本版本 包含了包含了 81 81 條新的指令條新的指令 幾類附加的指令幾類附加的指令 打包數(shù)據(jù) SIMD (單指令多數(shù)據(jù)處理) 絕對差值求和操作 飽和運(yùn)算 對混合端(大/小端)的支持 異常入口與返回指令 不同于以前對原
39、指令集的擴(kuò)充不同于以前對原指令集的擴(kuò)充 ( (例如例如 BLX offset), BLX offset), V6 V6 擴(kuò)充的指令幾乎都是條件執(zhí)行的擴(kuò)充的指令幾乎都是條件執(zhí)行的3.4.1 打包數(shù)據(jù)類型指令打包數(shù)據(jù)類型指令 V6 V6 引入了新的指令以打包引入了新的指令以打包 / / 拆分?jǐn)?shù)據(jù)拆分?jǐn)?shù)據(jù) PKHBT , , LSL # 將第一個操作數(shù)的低半字和第二個操作數(shù)的高半字組合成一個新字放入 第二個操作數(shù)可邏輯左移0-31位 PKHTB , , ASR # 將第一個操作數(shù)的高半字和第二個操作數(shù)的低半字組合成一個新字放入 第二個操作數(shù)可算術(shù)右移 0-31位 UXT , , 循環(huán)移位值可以為 #
40、8, #16 or #24 類型 ABRd = Rn + (rotate(Rm) AND 0 x000000FF) AHRd = Rn +(rotate(Rm) AND 0 x0000FFFF) BRd = rotate(Rm) AND 0 x000000FF B16Rd = rotate(Rm) AND 0 x00FF00FF HRd = rotate(Rm) AND 0 x0000FFFF數(shù)據(jù)打包舉例數(shù)據(jù)打包舉例AB00.00B00.00AUXTH r3, r1r2r3r1r1UXTH r2, r1, ROR #16PKHBT r1, r3, r2, LSL #16AB3.4.2 字節(jié)選擇
41、指令字節(jié)選擇指令 根據(jù)狀態(tài)寄存器根據(jù)狀態(tài)寄存器GE3:0 GE3:0 位的值,決定目標(biāo)寄存器中每個字節(jié)該是選擇第一位的值,決定目標(biāo)寄存器中每個字節(jié)該是選擇第一個寄存器的值還是第二個寄存器的值。個寄存器的值還是第二個寄存器的值。 SEL Select的縮寫 語法:SEL Rd, Rn, Rm 操作:IF GE0=1 Rd7:0 = Rn7:0 else Rm7:0IF GE1=1 Rd15:8 = Rn15:8 else Rm15:8Rd31:24和Rd23:16的值根據(jù)GE2和G3位同理可得 在分離的加法和減法運(yùn)算結(jié)果中,一些打包數(shù)據(jù)指令設(shè)置了GE3:0 (如 SADD8/16, SSUB8/
42、16) SEL 指令可緊跟這樣的指令以提取合適的數(shù)據(jù)域 e.g. USUB8 Rd, Ra, Rb SEL Rd, Rb, Ra 設(shè)置 Rd 中的每個字節(jié)為 Ra 和 Rb 中對應(yīng)的較小字節(jié)3.4.3 單指令多數(shù)據(jù)處理指令單指令多數(shù)據(jù)處理指令SIMD v6 v6 引入了新的指令來執(zhí)行數(shù)據(jù)的并行處理,這些操作引入了新的指令來執(zhí)行數(shù)據(jù)的并行處理,這些操作被稱之為被稱之為SIMDSIMD ( (單指令多數(shù)據(jù)單指令多數(shù)據(jù)) ) 在在 v6 v6 中中 SIMD SIMD 指令可分為下面三種指令可分為下面三種: : 加法和減法 乘法 差的絕對值和SIMD 加法加法 & 減法減法(1) Rd, R
43、n, Rm ADD16 & SUB16 從第一個操作數(shù)中的每個半字上加上或減去第二個操作數(shù)對應(yīng)的半字 ADD8 & SUB8 從第一個操作數(shù)中的每個字節(jié)上加上或減去第二個操作數(shù)對應(yīng)的字節(jié)前綴前綴: :S S 有符號有符號SHSH有符號平分(減半)有符號平分(減半)U U無符號無符號UH UH 無符號平分無符號平分UQUQ無符號飽和無符號飽和Q Q飽和飽和 ( (有符號有符號) )+RmRd+RnGE3GE2GE1GE0UADD8 Rd, Rn, RmSIMD 加法加法 & 減法減法(2)ADDSUBXADDSUBX & & SUBADDXSUBADDX
44、結(jié)合的16 位加法和減法GE3:2GE1:0Rd-+RbRaUADDSUBX Rd, Ra, Rb根據(jù)加法是否產(chǎn)生進(jìn)位或減法是否產(chǎn)生借位的情況設(shè)置根據(jù)加法是否產(chǎn)生進(jìn)位或減法是否產(chǎn)生借位的情況設(shè)置GE3:0GE3:0SIMD 乘法乘法 SMUADX Rd, Rm, Rs 雙重乘加(有符號) SMUSDX Rd, Rm, Rs 雙重乘減(有符號) SMLALDX Rd, Rm, Rs, Rn 雙重乘加累加(有符號) SMLSLDX Rd, Rm, Rs, Rn 雙重乘減累加(有符號)X X 表示在計算前表示在計算前RsRs中的兩個半字互換中的兩個半字互換L L 表示表示6464位的累加位的累加如果
45、發(fā)生累加溢出,如果發(fā)生累加溢出,Q Q 標(biāo)志位置位標(biāo)志位置位xRdRsxRmSMUAD Rd, Rm, Rs+3.4.4 絕對差值求和指令絕對差值求和指令 在許多在許多多媒體數(shù)字信號編碼多媒體數(shù)字信號編碼算法算法, ,尤其是視頻運(yùn)動估計尤其是視頻運(yùn)動估計(video motion (video motion estimation) estimation) 算法中,絕對差值求和運(yùn)算是主要操作算法中,絕對差值求和運(yùn)算是主要操作對象素數(shù)組數(shù)據(jù)的運(yùn)算對象素數(shù)組數(shù)據(jù)的運(yùn)算 ( (通常是通常是8 8位位) )ABSDIFFABSDIFFABSDIFFABSDIFF+可選擇累加可選擇累加3.4.5 SETE
46、ND指令指令 選擇數(shù)據(jù)訪問的大小端方式選擇數(shù)據(jù)訪問的大小端方式 ( ( BE8 or LEBE8 or LE ) ) 為了在系統(tǒng)中可以使用混合大小端的數(shù)據(jù) (如外設(shè)與處理器的大小端不一致)SETEND SETEND 語法:SETEND BE | LE 操作:設(shè)置了CPSR寄存器中的E位 使用使用 SETENDSETENDLE沒有沒有SETENDMRS r0, cpsrBIC r0, r0, #0 x0200MSR cpsr_x, r0舉例舉例 :在大端存儲系統(tǒng)中中訪問小端的結(jié)構(gòu)元素:在大端存儲系統(tǒng)中中訪問小端的結(jié)構(gòu)元素SETEND BELDR r0, r7, #4 ; big-endianSE
47、TEND LE LDR r1, r7, #4 ; little-endian 3.4.6 字節(jié)反轉(zhuǎn)指令字節(jié)反轉(zhuǎn)指令 V6版本版本REV r0, r0V6以前的版本以前的版本EORr1, r0, r0, ROR #16BICr1, r1, #0 xFF0000MOVr0, r0, ROR #8EORr0, r0, r1, LSR #8字節(jié)反轉(zhuǎn)指令字節(jié)反轉(zhuǎn)指令 REVcond Rd, Rm將一個字內(nèi)的字節(jié)反轉(zhuǎn)將一個字內(nèi)的字節(jié)反轉(zhuǎn) REV16cond Rd, Rm將兩個半字內(nèi)的字節(jié)反轉(zhuǎn)將兩個半字內(nèi)的字節(jié)反轉(zhuǎn) REVSHcond Rd, Rm反轉(zhuǎn)最低的兩個字節(jié)反轉(zhuǎn)最低的兩個字節(jié),并將結(jié)果擴(kuò)并將結(jié)果擴(kuò)展
48、為展為32位位32010132REV r0, r03.4.7 飽和指令飽和指令 將固定的位后數(shù)值設(shè)為飽和將固定的位后數(shù)值設(shè)為飽和 USAT 無符號的32位飽和,可以移位 語法:USAT Rd, #sat, Rm shift 操作:Rd = Saturate(Shift(Rm), #sat) 其它指令其它指令 SSAT 有符號的32位飽和,可以移位 USAT16 無符號的在2個半長數(shù)據(jù)同一位置的雙16位飽和,不允許移位 SSAT16 有符號的在2個半長數(shù)據(jù)同一位置的雙16位飽和,不允許移位 #sat 表示 0 到 31的立即數(shù) shift 是可選的并被限制為 LSL or ASR 如果發(fā)生飽和,
49、將 Q 標(biāo)志位置位3.4.8 排他的加載排他的加載 / 存儲指令存儲指令 標(biāo)記內(nèi)存訪問為標(biāo)記內(nèi)存訪問為“ 排他排他 ” 的指令的指令LDREX “ 排他 ” 的加載指令語法:LDREX Rd, Rn操作:Rd = *RnSTREX - “ 排他 ” 的存儲指令語法:STREX Rd, Rm, Rn操作:*Rn = Rm; Rd = 0 如果內(nèi)存更新了, 否則為1可以用來實現(xiàn)操作系統(tǒng)的信號量可以用來實現(xiàn)操作系統(tǒng)的信號量 在多處理器系統(tǒng)中要求存儲系統(tǒng)的支持MOVr1, #0 xFF; 讀取 lock taken 的值try_for_lockLDREXr0, LockAddr; 加載 lock va
50、lueCMPr0, #0; lock 空閑?STREXEQr0, r1, LockAddr; 是的,嘗試聲明CMPEQr0, #0; 成功?BNEtry_for_lock; 否, 再次嘗試.; 是的 現(xiàn)在擁有了 lock3.4.9 異常進(jìn)入與退出指令異常進(jìn)入與退出指令 加快異常進(jìn)入退出的一些指令加快異常進(jìn)入退出的一些指令 CPS 改變處理器狀態(tài) 語法: CPSIE|ID #mode 操作: 如果指定 “IE” 使能中斷, 否則屏蔽中斷 ;通過指定設(shè)置模式 域指定哪類中斷(IRQ, FIQ, Imprecise abort)需要被使能/屏蔽 SRS 保存返回狀態(tài) 語法: SRS #mode! 操
51、作: 保存 r14,spsr 到r13_mode寄存器指定的地址處,可選擇對r13_mode回寫 RFE 從異常返回 語法: RFE Rn! 操作: 將 Rn 所指的內(nèi)容加載到 pc 和 cpsr 寄存器 ,可選擇對 Rn 回寫這些指令都是無條件的這些指令都是無條件的主要內(nèi)容主要內(nèi)容 1 ARM1 ARM指令集概述指令集概述 2 ARM V4T2 ARM V4T架構(gòu)指令體系架構(gòu)指令體系 3 ARM v5TE 3 ARM v5TE 架構(gòu)指令體系架構(gòu)指令體系 4 ARM v6 4 ARM v6 架構(gòu)指令體系新特性架構(gòu)指令體系新特性 5 Thumb5 Thumb指令集指令集 ARM 與與 Thumb
52、的比較的比較Thumb Thumb 是一個是一個1616位的指令集位的指令集 從 C 代碼得到最優(yōu)的代碼密度 (約為 ARM 指令集65%左右) 對窄內(nèi)存系統(tǒng)有更好的指令性能但是但是它有如下限制它有如下限制 它是 ARM 指令集的一個功能子集 也許幾條 Thumb 指令才能代替一條ARM 指令 有限制的條件執(zhí)行 數(shù)據(jù)處理指令只能使用低編號的寄存器(r0 - r7) 不能使用內(nèi)嵌的桶型移位器. 立即數(shù)的范圍更小 不能訪問協(xié)處理器所以所以,thumbthumb指令集指令集 適合作為編譯器的輸出,而并非處理代碼3.5.1 v4T 和和 v5TE的的Thumb指令集指令集 分支跳轉(zhuǎn)指令分支跳轉(zhuǎn)指令B label 范圍在+/- 256字節(jié)B label 范圍在+/- 2KBBL label 范圍在 +/- 4MB (被編碼為一對指令)BX Rd 絕對跳轉(zhuǎn),可能伴隨狀態(tài)切換BLX label與 BL 指令相同, 但會切換到 ARM 狀態(tài) (僅對 v5TE版本)BLX Rd與 BX 指令相同, 但會
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024版墻紙購銷合同范本
- 2025年度數(shù)字經(jīng)濟(jì)基礎(chǔ)設(shè)施建設(shè)承包借款合同4篇
- 2024預(yù)埋件研發(fā)與生產(chǎn)項目合同范本3篇
- 2024食品物流信息化管理系統(tǒng)合同
- 2025年度文化創(chuàng)意產(chǎn)品采購合同知識產(chǎn)權(quán)保護(hù)與市場推廣3篇
- 2025年度專業(yè)市場租賃協(xié)議范本4篇
- 2025年度智慧社區(qū)物業(yè)服務(wù)承包合同4篇
- 2025年度電力企業(yè)財務(wù)預(yù)算出納人員擔(dān)保合同3篇
- 2025年度商場櫥窗窗簾廣告設(shè)計與安裝合同4篇
- 2025年度新能源汽車制造項目承包商擔(dān)保合同規(guī)范4篇
- 春節(jié)英語介紹SpringFestival(課件)新思維小學(xué)英語5A
- 進(jìn)度控制流程圖
- 2023年江蘇省南京市中考化學(xué)真題
- 【閱讀提升】部編版語文五年級下冊第四單元閱讀要素解析 類文閱讀課外閱讀過關(guān)(含答案)
- 供電副所長述職報告
- 現(xiàn)在完成時練習(xí)(短暫性動詞與延續(xù)性動詞的轉(zhuǎn)換)
- 產(chǎn)品質(zhì)量監(jiān)控方案
- 物業(yè)總經(jīng)理述職報告
- 新起點(diǎn),新發(fā)展心得體會
- 深圳大學(xué)學(xué)校簡介課件
- 校園欺凌問題成因及對策分析研究論文
評論
0/150
提交評論