版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
ARM及Thumb指令集
課程安排ARM根本尋址方式ARM指令集 Thumb指令集 v5TE體系結(jié)構(gòu)擴展存放器尋址存放器的內(nèi)容為操作數(shù)ADDR0,R1,R2R0R1+R2立即尋址操作數(shù)直接包含在指令中ADDR3,R3,#1R3R3+1ANDR8,R7,#0xFF1R8
R7[7:0]存放器移位尋址存放器操作數(shù)需要經(jīng)過移位后參與第一個操作數(shù)操作ADDR3,R2,R1,LSL#3R3R2+8xR1移位操作如下幾種LSR\LSL〔邏輯移位〕ASR〔算術(shù)右移〕\ROR〔循環(huán)右移〕RRX〔帶C循環(huán)移位〕存放器間接尋址被指定的存放器中存放的是操作數(shù)的有效地址LDRR0,[R1]
R0
[R1]
STRR0,[R1]
R0
[R1]變址尋址基址存放器中的內(nèi)容與指令中給出的位移量(最大4K)相加,形成操作數(shù)的有效地址前索引尋址LDRR0,[R1,#4]
R0
[R1+4]帶自動索引的前索引尋址
LDRR0,[R1,#4]!R0
[R1+4];R1R1+4后索引尋址
LDRR0,[R1],#4
R0
[R1];R1R1+4基址加索引尋址LDRR0,[R1,R2]
R0
[R1+R2]多存放器尋址/塊拷貝尋址一次可以傳送幾個存放器的值,允許一條指令傳送16個存放器的任何子集LDMIAR1,{R0,R2,R5}
R0
[R1];R2[R1+4];
R5
[R1+8]堆棧尋址向上生長:----遞增堆棧向下生長:----遞減堆棧滿堆棧:----指向最后壓入堆棧的有效數(shù)據(jù)項空堆棧:----指向下一個數(shù)據(jù)項放入的空位置ARM處理器支持4種類型堆棧滿遞增空遞增滿遞減空遞減相對尋址基址尋址中用PC提供基準(zhǔn)地址,指令中的地址碼字段作為位移量BLsubr……Subr:……. MOVPC,R14課程安排ARM根本尋址方式ARM指令集 Thumb指令集 v5TE體系結(jié)構(gòu)擴展ARM指令編碼格式說明Cond指令執(zhí)行的條件編碼Opcode指令操作符編碼S決定指令的操作是否影響CPSR的值Rd操作目標(biāo)存放器編碼Rn包含第一操作數(shù)的存放器編碼Shifter_operand表示第二操作數(shù)cond001opcodesRnRdShifter_operand31 2827
2524212019 16151211870ARM指令可以通過添加適當(dāng)?shù)臈l件碼后綴來到達條件執(zhí)行的目的。這樣可以提高代碼密度,減少分支跳轉(zhuǎn)指令數(shù)目,提高性能。CMPr3,#0CMPr3,#0
BEQskipADDNEr0,r1,r2
ADDr0,r1,r2
skip默認情況下,數(shù)據(jù)處理指令不影響條件碼標(biāo)志位,但可以選擇通過添加“S〞來影響標(biāo)志位。CMP不需要增加“S〞就可改變相應(yīng)的標(biāo)志位。 loop
…
SUBSr1,r1,#1
BNEloop條件執(zhí)行及標(biāo)志位如果Z標(biāo)志清零則跳轉(zhuǎn)R1減1,并設(shè)置標(biāo)志位ConditionCodes不等于(Notequal) 無符號的大于或等于無符號的小于負數(shù)(Minus)等于(Equal)溢出(Overflow)沒溢出無符號的大于無符號的小于或大于正數(shù)或零小于(LessThan)大于(GreaterThan)小于等于總是執(zhí)行(Always)大于等于EQNECS/HSCC/LOPLVSHILSGELTGTLEALMIVCSuffix描述Z=0C=1C=0Z=1測試的標(biāo)志位N=1N=0V=1V=0C=1&Z=0C=0orZ=1N=VN!=VZ=0&N=VZ=1orN=!V下表為所有可能的條件碼:注意:AL為默認狀態(tài),不需要單獨指出條件執(zhí)行例如一系列的指令都使用條件指令 if(a==0)func(1); CMPr0,#0
MOVEQr0,#1
BLEQfunc
置標(biāo)志位,再使用不同的條件碼 if(a==0)x=0;
if(a>0)x=1; CMPr0,#0
MOVEQr1,#0
MOVGTr1,#1
使用條件比較指令 if(a==4||a==10)x=0; CMPr0,#4
CMPNEr0,#10
MOVEQr1,#0Branch: B{<cond>}labelBranchwithLink: BL{<cond>}subroutine_label(下條指令地址送到R14)處理器把偏移量左移兩位,進行符號擴展后再與PC相加
跳轉(zhuǎn)范圍:±32Mbyte如何執(zhí)行長跳轉(zhuǎn)?2831240
Cond101L偏移量 條件碼區(qū)域Linkbit 0=Branch 1=Branchwithlink232527分支指令數(shù)據(jù)處理指令包括:算術(shù)指令: ADD ADC SUB SBC RSB RSC邏輯指令: AND ORR EOR BIC比較指令: CMP CMN TST TEQ數(shù)據(jù)搬移: MOV MVN上述指令只能對存放器操作,不能針對存儲器。
語法: <操作>{<cond>}{S}Rd,Rn,Operand2只有比較指令影響標(biāo)志位-不指定Rd數(shù)據(jù)搬移不指定Rn第二個操作數(shù)通過桶型移位器送到ALU中。桶型移位器DestinationCF0DestinationCFLSL:LogicalLeftShiftASR:ArithmeticRightShift〔無符號數(shù)〕乘2除2,并保存符號位DestinationCF...0DestinationCFLSR:LogicalShiftRightROR:RotateRight〔無符號數(shù)〕除2位循環(huán)
DestinationRRX:RotateRightExtended位輪換,從CF到MSB都參與操作CF存放器,可選擇是否增加移位操作.移位值可以是:5bit無符號整數(shù)放在另一個存放器的低字節(jié)用于常數(shù)乘法立即數(shù)8bit,大小范圍0-255。右移偶數(shù)位允許直接加載32-bit常數(shù)到存放器中。結(jié)果操作數(shù)1Barrel
Shifter操作數(shù)2ALU桶型移位器:
第二個操作數(shù)沒有任何一條ARM指令可包括一個32bit的立即數(shù)所有的ARM指令都是32bits固定長度數(shù)據(jù)處理指令格式中,第二個操作數(shù)有12位4bit移位值(0-15)乘于2,得到一個范圍在0-30,步長為2的移位值。記住一條準(zhǔn)那么:“最后8位一定要移動偶數(shù)位〞.07118immed_8Shifter
RORrotx2QuickQuiz:
0xe3a004ff
MOVr0,#???立即數(shù)(1)Examples:以下命令中,匯編器把立即數(shù)轉(zhuǎn)換為移位操作:MOVr0,#4096 ;uses0x40ror26ADDr1,r2,#0xFF0000 ;uses0xFFror16也可使用MVN來進行位反轉(zhuǎn):MOVr0,#0xFFFFFFFF ;assemblestoMVNr0,#0使用無法用上述方法生成的數(shù)據(jù),將產(chǎn)生錯誤。031ror#0range0-0xff000000step0x01000000ror#8range0-0x000000ffstep0x00000001range0-0x000003fcstep0x00000004ror#30000000000000000000000000000000000000000000000000000000000000000000000000立即數(shù)(2)為允許裝載大常數(shù),匯編器提供了一條偽指令:LDRrd,=const它可能匯編成以下指令:MOVorMVN。 或LDR指令,從數(shù)據(jù)池〔Literalpools〕讀取常數(shù)。ForexampleLDRr0,=0xFF => MOVr0,#0xFFLDRr0,=0x55555555 => LDRr0,[PC,#Imm12]
…
…
DCD0x55555555推薦使用這種方法把常數(shù)裝入存放器。裝載32bit常數(shù)Quiz#11.寫一條ARM指令,分別完成以下操作: a)r0=16 b)r0=r1/16 (帶符號的數(shù)字) c)r1=r2*3 d)r0=-r02.下面哪些立即數(shù)是數(shù)據(jù)處理指令中有效的數(shù)據(jù)? a)0x00AB0000b)0x0000FFFFc)0xF000000F d)0x08000012e)0x00001f80f)0xFFFFFFFF3.BIC指令做什么用?4.為什么ARM處理器增加了一條RSB指令?StartStopr0=r1
?r0>r1
?r0=r0-r1r1=r1-r0YesNoYesNo你只需要使用CMP、SUB和B指令。充分使用條件執(zhí)行!
AREAmyarea,CODE ENTRY MOVr0,#n1 MOVr1,#n2start ;yourcodeherestop Bstop ENDQuiz#2程序結(jié)構(gòu)如下:完成流程圖所對應(yīng)的程序乘法語法:MUL{<cond>}{S}Rd,Rm,Rs Rd=Rm*RsMLA{<cond>}{S}Rd,Rm,Rs,Rn Rd=(Rm*Rs)+Rn[U|S]MULL{<cond>}{S} RdLo,RdHi,Rm,Rs RdHi,RdLo:=Rm*Rs[U|S]MLAL{<cond>}{S}RdLo,RdHi,Rm,Rs RdHi,RdLo:=(Rm*Rs)+RdHi,RdLo占用的周期數(shù)根本MUL指令A(yù)RM7TDMI上為2-5周期StrongARM/XScale上為1-3周期ARM9E/ARM102xE上為2周期ARM9TDMI比ARM7TDMI多1周期累加再多1周期(不針對9E,盡管結(jié)果延遲多于1周期)對于“l(fā)ong〞型數(shù)據(jù),多1周期以上均為一般規(guī)那么,確切細節(jié)查看相應(yīng)手冊。單存放器數(shù)據(jù)傳送
LDR STR WordLDRB STRB ByteLDRH STRH HalfwordLDRSB 帶符號的byteloadLDRSH 帶符號的halfwordload存儲器系統(tǒng)必須支持所有訪問寬度語法:
LDR{<cond>}{<size>}Rd,<address>STR{<cond>}{<size>}Rd,<address>e.g.LDREQB地址訪問LDR/STR訪問的地址由基址存放器加上偏移量來產(chǎn)生。針對word和無符號byte的訪問,偏移量可以是:一個無符號12-bit立即數(shù)(如0-4095bytes).
LDRr0,[r1,#8]一個存放器,或再加上移位〔由立即數(shù)指定〕
LDRr0,[r1,r2]
LDRr0,[r1,r2,LSL#2]可以是從基址存放器上加或減去偏移量:
LDRr0,[r1,#-8]
LDRr0,[r1,-r2]
LDRr0,[r1,-r2,LSL#2]對于halfword和帶符號的halfword/byte,偏移量可以是:一個無符號8bit立即數(shù)(如0-255bytes).一個存放器(不能移位)??蛇x擇采用pre-indexed或post-indexed方式尋址0x50x5r10x200基址
存放器0x200r00x5源存放器
forSTR偏移量120x20cr10x200原基址
存放器0x200r00x5源存放器
forSTR偏移量120x20cr10x20c更新
基址存放器通過STRr0,[r1,#12]!來自動更新基址存放器PreorPostIndexed尋址?
Pre-indexed:STRr0,[r1,#12]
Post-indexed:STRr0,[r1],#12編寫一個ARM匯編程序,累加一個隊列中的所有元素,碰上0時停止。結(jié)果放入r4。在源文件末尾按如下方式聲明隊列:
myarray
DCD0x11
DCD0x22
DCD0用r0指向隊列的入口
ADRr0,myarray
使用LDRr1,[r0],#4從隊列中裝載數(shù)據(jù)累加并放入r4循環(huán),直到r1為0停止,進入死循環(huán)Quiz#3-Totalofarray0x2200x11r0地址增加LDM/STM指令允許一次傳送1到16個存放器到/從存儲器中。存放器傳送順序不能被指定最小數(shù)字的存放器總是被傳送到/從存儲器的最低地址上。 LDMIA r10,{r0,r1,r4}基址存放器指定存儲器訪問開始的地址
快傳送指令針對以下情況很有效:從存儲器中搬運一塊數(shù)據(jù)保存或恢復(fù)堆棧中的內(nèi)容如果是慢速存儲器,會影響中斷響應(yīng)時間塊數(shù)據(jù)傳送r1r4r0r10地址增加LDM/STM操作語法:<LDM|STM>{<cond>}<addressing_mode>Rb{!},<存放器list>4中尋址操作:LDMIA/STMIA IncrementAfter〔先操作,后增加〕LDMIB/STMIB IncrementBefore〔先增加,后操作〕LDMDA/STMDA DecrementAfter〔先操作,后遞減〕LDMDB/STMDB DecrementBefore〔先遞減,后操作〕IAr1地址增加r4r0r1r4r0r1r4r0r1r4r0r10IBDADBLDMxxr10,{r0,r1,r4}STMxxr10,{r0,r1,r4}基址存放器(Rb)存儲器塊拷貝可選項“!〞將導(dǎo)致LDM/STM指令去自動更新基址存放器后綴為IA,IB時,加上4乘以用于傳送的存放器的數(shù)目的值后綴為DA,DB時,減去4乘以用于傳送的存放器的數(shù)目的值例如:;r12指向源數(shù)據(jù)起始地址;r14指向源數(shù)據(jù)尾地址;r13指向目的數(shù)據(jù)起始地址loop LDMIA r12!,{r0-r11} ;裝載48bytes STMIA r13!,{r0-r11} ;和存儲them CMP r12,r14 ;checkfortheend BNE loop ;和loopuntildone此循環(huán)傳送48bytes占用了31周期時鐘為33MHz時傳輸速率超過50Mbytes/sec存儲器增加r13r14r12LDMFDsp!,{r4-r7,pc}SP100FF1234AOBE80341010123484209753r41r514544r60r712lr9048pc9020r4100100FFr5FF1234r61234A0BEr7A0BE8034pc8034堆棧r4100r5FFr61234r7A0BElr8034ABCD8765102E16FFFF1010123484209753存儲器頂SPSP100FF1234A0BE8034SPOldSP100FF1234A0BE8034ARM堆棧操作通過塊傳送指令來完成:STMFD
(Push) 塊存儲-FullDescendingstack[STMDB]LDMFD
(Pop) 塊裝載-FullDescendingstack[LDMIA]STMFDsp!,{r4-r7,lr}在存放器和存儲器之間,由一次存儲器讀和一次存儲器寫組成的原子操作。完成一個字節(jié)或字的交換。語法:SWP{<cond>}{B}Rd,Rm,[Rn]可用作信號量不能由armcc編譯產(chǎn)生,必須使用匯編器。RmRd321temp存儲器RnSWP軟件中斷(SWI)產(chǎn)生一個異常陷阱,跳轉(zhuǎn)到SWI硬件向量。SWI處理程序可以檢測SWI號,從而決定采取何種操作。通過SWI機制,運行在用戶模式下的應(yīng)用程序,可請求操作系統(tǒng)執(zhí)行一系列特權(quán)操作。語法:
SWI{<cond>}<SWInumber>283124270
Cond1111SWInumber(ignoredbyprocessor)23條件域PSR傳送指令MRS和MSR允許傳送CPSR/SPSR中的內(nèi)容到/從一個通用存放器中。語法:MRS{<cond>}Rd,<psr>;Rd=<psr>MSR{<cond>}<psr[_fields]>,Rm;<psr[_fields]>=Rm在這里:<psr>=CPSRorSPSR[_fields]=‘fsxc’的任意組合也允許送一個立即數(shù)到psr_fieldsMSR{<cond>}<psr_fields>,#Immediate用戶模式下,所有位均可以被讀取,但只有條件標(biāo)志位(_f)可被寫。2731NZCVQ2867IFTmode1623
815
54024fsxc
UndefinedJ協(xié)處理器指令A(yù)RM體系支持16個協(xié)處理器針對每個協(xié)處理器的指令占用ARM指令集中的固定局部如果相應(yīng)的協(xié)處理器不存在,將發(fā)生一個未定義指令異常。這有三種協(xié)處理器指令協(xié)處理器數(shù)據(jù)處理指令CDP:初始化協(xié)處理器數(shù)據(jù)處理操作協(xié)處理器存放器傳送指令MRC:從ARM存放器移到協(xié)處理器存放器MCR:從協(xié)處理器存放器移到ARM存放器協(xié)處理器存儲器傳送指令LDC:從存儲器裝載到協(xié)處理器存放器STC:從協(xié)處理器存放器存儲到存儲器Quiz#41.寫幾條ARM指令,使能IRQ中斷2.以下ARM指令將做什么? a)LDRHr0,[r1,#6] b)LDRr0,=0x9993.在裝載或存儲指令中,“!〞表示什么?4.當(dāng)執(zhí)行SWI指令時,會發(fā)生什么?5.SWP指令的優(yōu)勢是什么?課程安排
ARM指令集Thumb指令集
v5TE體系結(jié)構(gòu)擴展015310ADDSr2,r2,#1ADDr2,#132-bitARM指令16-bitThumb指令對于由編譯器產(chǎn)生的大局部指令:沒有條件執(zhí)行源、目的存放器必須相同僅能使用低存放器常數(shù)大小有限制不能使用在線移位器ThumbThumb是16-bit指令集代碼密度優(yōu)化〔總代碼大小約為ARM指令的65%〕使用窄總線存儲器時可以大大提高性能。是ARM指令集的一個子集。核存在一個執(zhí)行狀態(tài)–Thumb狀態(tài)ARM和Thumb之間切換使用BX指令使用BranchExchange
指令來完成InterworkingBXRn
;Thumb狀態(tài)下的Bx指令BX<condition>Rn
;ARM狀態(tài)下的Bx指令也可以只是執(zhí)行一個絕對跳轉(zhuǎn),無須狀態(tài)更換。ARM/ThumbInterworkingRnBX跳轉(zhuǎn)的地址31013101ARM/Thumb選擇0-ARM狀態(tài)1-Thumb狀態(tài)0寫Thumb匯編程序Thumb不是一個“好〞指令集!最好用編譯器來產(chǎn)生約束并不一致手動編碼使用ARM指令集比較好更多細節(jié),參看:ARM“ArchitectureReferenceManual〞ChaptersA6和A7課程安排
ARM指令集 Thumb指令集v5TE體系結(jié)構(gòu)擴展v5TE結(jié)構(gòu)v5TE體系包括全部的v4TARM和Thumb指令集,還有:增強的interwor
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 財務(wù)管理金融控股公司財務(wù)分析師實習(xí)報告
- 朝陽行業(yè)分析會計報告
- 人脈圈的行業(yè)分析報告
- 小學(xué)勞動衛(wèi)生檢查制度
- 聊城衛(wèi)生保障制度
- 公共服務(wù)場所衛(wèi)生制度
- 衛(wèi)生院普法制度
- 餐館門口衛(wèi)生管理制度
- 場館衛(wèi)生清潔標(biāo)準(zhǔn)制度
- 公司清潔衛(wèi)生制度
- 北京市順義區(qū)2025-2026學(xué)年八年級上學(xué)期期末考試英語試題(原卷版+解析版)
- 中學(xué)生冬季防溺水主題安全教育宣傳活動
- 2026年藥廠安全生產(chǎn)知識培訓(xùn)試題(達標(biāo)題)
- 初中九年級上一元二次方程計算練習(xí)題及答案詳解B2
- 冷庫防護制度規(guī)范
- 2026年生產(chǎn)管理崗入職性格測試題及答案
- 廣東省廣州市番禺區(qū)2026屆高一數(shù)學(xué)第一學(xué)期期末聯(lián)考試題含解析
- 2026年廣東省佛山市高三語文聯(lián)合診斷性考試作文題及3篇范文:可以“重讀”甚至“重構(gòu)”這些過往
- 2025年汽車駕駛員技師考試試題及答案含答案
- 觀看煤礦警示教育片寫心得體會
- 2025年國際中文教師證書考試真題附答案
評論
0/150
提交評論