ChapterthreeARM指令系統(tǒng)_第1頁
ChapterthreeARM指令系統(tǒng)_第2頁
ChapterthreeARM指令系統(tǒng)_第3頁
ChapterthreeARM指令系統(tǒng)_第4頁
ChapterthreeARM指令系統(tǒng)_第5頁
已閱讀5頁,還剩99頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、第第3章章 嵌入式處理器指令系統(tǒng)嵌入式處理器指令系統(tǒng)3.1 ARM指令分類及指令格式指令分類及指令格式3.2 ARM指令的尋址方式指令的尋址方式3.3 ARM指令集指令集3.4 Thumb指令集指令集3.5 Thumb-2指令集指令集3.6 ARM處理器支持的偽指令處理器支持的偽指令Opcode Cond SRd,Rn,Op2 Opcode: 指令操作碼指令操作碼 Cond: 指令的條件碼指令的條件碼 S: 操作是否影響操作是否影響CPSR Rd: 目的標寄存器編碼目的標寄存器編碼 Rn: 包含第一個操作數(shù)的寄存器編碼包含第一個操作數(shù)的寄存器編碼 Op2: 第二操作數(shù)第二操作數(shù) 3.1 ARM

2、指令分類及指令格式指令分類及指令格式1、ARM指令格式ADDNES R0,R1,R2; Opcode,cond,s之間沒有分隔符,之間沒有分隔符,s與與Rd之之間用空格隔開間用空格隔開ADDNES R0,R1,R2;2、指令的條件域n 當處理器工作在當處理器工作在ARMARM狀態(tài)時,幾乎所有的指令狀態(tài)時,幾乎所有的指令均根據(jù)均根據(jù)CPSRCPSR中條件碼的狀態(tài)和指令的條件域有中條件碼的狀態(tài)和指令的條件域有條件的執(zhí)行。條件的執(zhí)行。n 當指令的執(zhí)行條件滿足時,指令被執(zhí)行,否則當指令的執(zhí)行條件滿足時,指令被執(zhí)行,否則指令被忽略。指令被忽略。 n 每一條每一條ARMARM指令包含指令包含4 4位的條件

3、碼,位于指令的位的條件碼,位于指令的最高最高4 4位位31:2831:28。 條件碼助記符后綴標志含義0000EQZ置位相等0001NEZ清零不相等0010CSC置位無符號數(shù)大于或等于0011CCC清零無符號數(shù)小于0100MIN置位負數(shù)0101PLN清零正數(shù)或零0110VSV置位溢出0111VCV清零未溢出1000HIC置位Z清零無符號數(shù)大于1001LSC清零Z置位無符號數(shù)小于或等于1010GEN等于V帶符號數(shù)大于或等于1011LTN不等于V帶符號數(shù)小于1100GTZ清零且(N等于V)帶符號數(shù)大于1101LEZ置位且(N不等于V)帶符號數(shù)小于或等于1110AL忽略無條件執(zhí)行3、ARM指令中的操

4、作數(shù)符號指令中的操作數(shù)符號1 1)立即數(shù)符號)立即數(shù)符號“#”#”2 2)十六進制符號)十六進制符號“0 x”0 x”3 3)“!”更新基址寄存器符號更新基址寄存器符號 表示指令在完成操作后最后的地址應該寫入基表示指令在完成操作后最后的地址應該寫入基址寄存器址寄存器 4 4)“-”-”指示寄存器列表范圍符號指示寄存器列表范圍符號 表示多個連續(xù)寄存器表示多個連續(xù)寄存器 ,如,如R0-R7R0-R7表示寄存器表示寄存器共共8 8個寄存器:個寄存器:R0R0,R1R1,R2R2,R3R3,R4R4,R5R5,R6R6和和R7R7。即含義。即含義“從從到到” ” 4、ARM指令中的移位操作1)邏輯左移

5、操作)邏輯左移操作LSL MOV R0,R1,LSL#2 *首先將首先將R1中的內(nèi)容向左移動兩位,低端用中的內(nèi)容向左移動兩位,低端用0補充,然后將處理后的數(shù)據(jù)傳送到補充,然后將處理后的數(shù)據(jù)傳送到R04、ARM指令中的移位操作指令中的移位操作2)算術左移操作)算術左移操作ASL MOV R0,R2,ASL#2 *ASL的作用與的作用與LSL的作用相同的作用相同 3)邏輯右移操作)邏輯右移操作LSR MOV R0,R1,LSR#2 *首先將首先將R1中的內(nèi)容向右移動兩位,高端中的內(nèi)容向右移動兩位,高端用用0補充,然后將處理后的數(shù)據(jù)傳送到補充,然后將處理后的數(shù)據(jù)傳送到R04、ARM指令中的移位操作指

6、令中的移位操作4)算術右移操作)算術右移操作ASR:高位用位:高位用位31位的值位的值來填充來填充5) 循環(huán)右移操作循環(huán)右移操作ROR6)帶擴展的循環(huán)右移操作)帶擴展的循環(huán)右移操作RRX:左端用進位:左端用進位標志來填充標志來填充 4、ARM指令中的移位操作指令中的移位操作LSL移位操作:0LSR移位操作:0ASR移位操作:ROR移位操作:RRX移位操作:C4、ARM指令中的移位操作指令中的移位操作R1的內(nèi)容為的內(nèi)容為0 x10000009, 執(zhí)行指令執(zhí)行指令MOV R0,R1,LSL#2后后R0中的內(nèi)容是什么?執(zhí)行指令中的內(nèi)容是什么?執(zhí)行指令MOV R2,R1,LSR#2后后R2中的內(nèi)容是什

7、么?執(zhí)中的內(nèi)容是什么?執(zhí)行指令行指令MOV R3,R1,ASR#2后后R3中的內(nèi)容是什中的內(nèi)容是什么?么?R0:0 x40000024R2:0 x08000002R3:0 x08000002如果如果R1的內(nèi)容為的內(nèi)容為0 x90000009R3 ?4、ARM指令中的移位操作指令中的移位操作5、ARM指令分類1)分支指令)分支指令2)數(shù)據(jù)處理指令)數(shù)據(jù)處理指令3)程序狀態(tài)寄存器處理指令)程序狀態(tài)寄存器處理指令4)加載)加載/存儲指令存儲指令5)協(xié)處理器指令)協(xié)處理器指令6)異常產(chǎn)生指令)異常產(chǎn)生指令 3.2 ARM指令的尋址方式指令的尋址方式尋址:就是尋找指令中的操作數(shù)或操作數(shù)尋址:就是尋找指令

8、中的操作數(shù)或操作數(shù)的地址。的地址。尋址方式:就是如何找到存放操作數(shù)的地尋址方式:就是如何找到存放操作數(shù)的地址,把操作數(shù)提取出來的方法。址,把操作數(shù)提取出來的方法。 3.2 ARM指令的尋址方式指令的尋址方式1、立即數(shù)尋址、立即數(shù)尋址:操作數(shù)本身已包含在指令中,取出指令也就取出了立即可用的操作數(shù)。 例:MOV R0,#20 ;20 R0 0 x55R0MOV R0,#0 xFF00程序存儲MOV R0,#0 xFF000 xFF00從代碼中獲得數(shù)據(jù)2、寄存器尋址、寄存器尋址:寄存器中的內(nèi)容為操作數(shù) 例 MOV R1,R2 ;R2R10 xAA0 x55R2R1MOV R1,R20 xAA3、寄存

9、器間接尋址、寄存器間接尋址: 指令中給出的通用寄存器里存放著操作數(shù)所存放的存儲單元的地址。 例:LDR R0,R2 ;R2R00 x55R0R2 0 x400000000 xAA0 x40000000LDR R0,R20 xAA4、基址加變址尋址:將基址寄存器的內(nèi)容與指令中給出的偏移量相加,形成操作數(shù)的有效地址。 例1:LDR R0,R1,#4 ;R1+4 R0,例2:LDR R0,R1,#4! ;R1+4 R0,R1+4R1,例3:LDR R0,R1,#4 ;R1 R0,R1+4R1,!:表示指令在完成操作后將操作后的地址寫入基址寄存器0 x55R2R3 0 x400000000 xAA0

10、x4000000CLDR R2,R3,#0 x0C0 xAA將R3+0 x0C作為地址裝載數(shù)據(jù)5、相對尋址、相對尋址: 由程序計數(shù)器由程序計數(shù)器PC提供基地址,加上指令提供基地址,加上指令中給出的偏移量,得到操作數(shù)的有效地址。中給出的偏移量,得到操作數(shù)的有效地址。 例例:B rel ;(;(pc)+rel pc0 x2100000 BL Subroutine_A 0 x21000100 Subroutine_A MOV PC,LR6、堆棧尋址、堆棧尋址堆棧的工作方式:先進后出堆棧的工作方式:先進后出滿堆棧:堆棧指針指向最后壓入堆棧的數(shù)據(jù)。滿堆棧:堆棧指針指向最后壓入堆棧的數(shù)據(jù)??斩褩#憾褩V羔?/p>

11、指向?qū)⒁湃霐?shù)據(jù)的空位置??斩褩#憾褩V羔樦赶?qū)⒁湃霐?shù)據(jù)的空位置。滿堆??斩褩_f增堆棧(遞增堆棧(Ascending Stack) 堆棧由低地址向高地址生成堆棧由低地址向高地址生成遞減堆棧(遞減堆棧(Decending Stack) 堆棧由高地址向低地址生成堆棧由高地址向低地址生成堆棧的四種工作方式滿遞減堆棧FD空遞減堆棧ED滿遞增堆棧FA空遞增堆棧EASTMFD R13! ,R0,R9-R12將寄存器列表中的寄存器的內(nèi)容存入堆棧將寄存器列表中的寄存器的內(nèi)容存入堆棧 堆棧類堆棧類型型存儲存儲加載加載滿降序STMFD(STMDB,之前遞減)LDMFD(LDM,之后遞增)滿升序STMFA(STM

12、IB,之前遞增)LDMFA(LDMDA,之后遞減)空降序STMED(STMDA,之后遞減)LDMED(LDMIB,之前遞增)空升序STMEA(STM,之后遞增)LDMEA(LDMDB,之前遞減) 7、多寄存器尋址 LDMIA R0,R1,R2,R3,R4 ; R1R0 R2 R0+4 R3 R0+8 R4 R0+120 x40000000R1R20 x?0 x010 x400000000 x?R3R40 x?R60 x?0 x020 x030 x040 x400000040 x400000080 x4000000C存儲器LDMIA R1!,R2-R4,R6 0 x010 x020 x030 x

13、040 x40000010(一一) ARM數(shù)據(jù)處理指令數(shù)據(jù)處理指令(二)程序狀態(tài)寄存器訪問指令二)程序狀態(tài)寄存器訪問指令(三)三) ARM分支轉(zhuǎn)移類指令分支轉(zhuǎn)移類指令(四四) 加載加載/存儲指令存儲指令(五)五)ARM協(xié)處理器類指令協(xié)處理器類指令(六六) 軟件中斷和斷點指令軟件中斷和斷點指令 3.3 ARM指令集指令集(一)(一) ARM數(shù)據(jù)處理指令數(shù)據(jù)處理指令助記符助記符具體操作具體操作助記符助記符具體操作具體操作MOVMOV數(shù)據(jù)傳送指令數(shù)據(jù)傳送指令SUBSUB減法指令減法指令MVNMVN數(shù)據(jù)取反指令數(shù)據(jù)取反指令SBCSBC帶借位減法指帶借位減法指令令CMPCMP比較指令比較指令RSBRSB

14、逆向減法指令逆向減法指令CMNCMN反值比較反值比較RSCRSC帶借位逆向減帶借位逆向減法指令法指令TSTTST位測試指令位測試指令ANDAND邏輯與指令邏輯與指令TEQTEQ相等測試指令相等測試指令ORRORR邏輯或指令邏輯或指令ADDADD加法指令加法指令EOREOR邏輯異或指令邏輯異或指令ADCADC帶進位加法指帶進位加法指令令BICBIC位清除指令位清除指令1 1)數(shù)據(jù)傳送指令)數(shù)據(jù)傳送指令MOVMOV、MVNMVN 例:例: MOV R1,R0; R1 R0MOV R1,R0; R1 R0 MVN R1,R0; R1 NOT R0 MVN R1,R0; R1 NOT R0 MOV R

15、1,R0,LSR#2;MOV R1,R0,LSR#2; MVN R0,#0 ; R0=-1; MVN R0,#0 ; R0=-1; MVN R0,#4 ; R0 ? MVN R0,#4 ; R0 ? (一)(一) ARM數(shù)據(jù)處理指令數(shù)據(jù)處理指令2)2)比較指令比較指令CMPCMP、CMNCMN 用于比較操作、根據(jù)結果更新條件碼標志,用于比較操作、根據(jù)結果更新條件碼標志,結果并不放入寄存器。結果并不放入寄存器。 例:例: CMP R1, R0; R1-R0CMP R1, R0; R1-R0 CMN R1, R0; R1+R0 CMN R1, R0; R1+R0CMP、CMN指令不需要指令不需要S

16、。 : ADD R0,R1,R2; R0R1+R2: ADD R0,R1,R2; R0R1+R2 ADC R0,R1,R2; R0R1+R2+C ADC R0,R1,R2; R0R1+R2+C ADD R0 ADD R0,R2R2,R3R3,LSL#1LSL#1 ;R0=R2+R0=R2+(R3R3邏輯左移邏輯左移1 1位的值)位的值) 3)算術運算指令: ADD、ADC、SUB、SBC、RSB、RSC ADDS R0,R4,R8 ADCS R1,R5,R9 ADCS R2,R6,R10 ADC R3,R7,R11功能:完成兩個128位數(shù)的相加:SUB R0,R1,R2 ; R0R1-R2 S

17、BC R0,R1,R2 ; R0R1-R2-!C例:完成兩個例:完成兩個64位數(shù)的相減,其中被減數(shù)放在位數(shù)的相減,其中被減數(shù)放在R3,R2中,減數(shù)放在中,減數(shù)放在R5,R4中中SUBS R0,R2,R4SBC R1,R3,R5:RSB R0,R1,R2 ; R0R2-R1 RSC R0,R1,R2 ; R0R2-R1- !C例:例: R0中的內(nèi)容乘中的內(nèi)容乘5ADD R0,R0,R0,LSL#2作業(yè)作業(yè)1: R0中的內(nèi)容乘中的內(nèi)容乘10作業(yè)作業(yè)2 2:R0R0中的內(nèi)容乘中的內(nèi)容乘1010,并加上,并加上R1R1中的內(nèi)容中的內(nèi)容 作業(yè)作業(yè)3 3: 寫出寫出ADDNE R0ADDNE R0,R1R

18、1,#&ff#&ff的注釋的注釋作業(yè)作業(yè)4 4: 用一條指令實現(xiàn)用一條指令實現(xiàn)R1R1中的內(nèi)容乘中的內(nèi)容乘7 7,送給送給R0R0 4 4)邏輯運算指令)邏輯運算指令ANDAND、ORRORR、EOREOR、BICBIC AND R0,R0,#3; R0R0 AND 3 AND R0,R0,#3; R0R0 AND 3 ORR R0,R0,#3; R0R0 ORR 3 ORR R0,R0,#3; R0R0 ORR 3 EOR R0,R0,#3; R0R0 EOR 3 EOR R0,R0,#3; R0R0 EOR 3 BIC R0,R0,#3; R0R0 AND (NOT 3)

19、BIC R0,R0,#3; R0R0 AND (NOT 3) * * 位清零指令位清零指令BICBIC用于將寄存器中某些位設置用于將寄存器中某些位設置成成0 0, 將某位與將某位與1 1做做BICBIC操作,該位變成操作,該位變成0 0, 將某位與將某位與0 0做做BICBIC操作,該位值不變。操作,該位值不變。TST和TEQ指令不需要S。 5) 5)測試指令測試指令TSTTST、TEQTEQ 用于測試操作,根據(jù)結果更新條件碼標志,結用于測試操作,根據(jù)結果更新條件碼標志,結果不放入寄存器。果不放入寄存器。 TST R1,#%1; R1 AND 1TST R1,#%1; R1 AND 1 TEQ

20、 R1,R2 ; R1 EOR R2 TEQ R1,R2 ; R1 EOR R26)6)乘法指令:乘法指令: MULMUL、MLAMLA、SMULLSMULL、SMLALSMLAL、UMULLUMULL、UMLALUMLAL例:MUL R0,R1,R2; R0R1R2 MULS R0,R1,R2; MLA R0,R1,R2,R3; R0 R1R2+R3例例 :SMLAL R8,R9,R7,R6SMLAL R8,R9,R7,R6 SMULLNE R0,R1,R9,R10 SMULLNE R0,R1,R9,R10 ; R6 R6* *R7R7的低的低3232位位+R8=R8+R8=R8 R6 R6

21、* *R7R7的高的高3232位位+R9=R9 +R9=R9 ; Z=0; Z=0時,執(zhí)行時,執(zhí)行R9R9* *R10R10的低的低3232位位=R0=R0, R9 R9* *R10R10的高的高3232位位=R1 =R1 (二)程序狀態(tài)寄存器訪問指令二)程序狀態(tài)寄存器訪問指令1 1、程序狀態(tài)寄存器到通用寄存器的數(shù)據(jù)傳送指、程序狀態(tài)寄存器到通用寄存器的數(shù)據(jù)傳送指令令MRSMRS格式:格式:MRSMRS條件條件 通用寄存器,程序狀態(tài)寄存器通用寄存器,程序狀態(tài)寄存器 例:例:MRS R0, CPSRMRS R0, CPSR ; ;傳送傳送CPSRCPSR的內(nèi)容到的內(nèi)容到R0R02 2 、通用寄存器

22、到程序狀態(tài)寄存器的數(shù)據(jù)傳送指、通用寄存器到程序狀態(tài)寄存器的數(shù)據(jù)傳送指令令MSRMSR格式:格式:MSR MSR 條件條件 程序狀態(tài)寄存器程序狀態(tài)寄存器_,操作數(shù)操作數(shù) 例:例:MSR CPSR, R0MSR CPSR, R0c: c: 控制域字段(控制域字段(PSRPSR中的第中的第0707位)位)x: x: 擴展域字段(擴展域字段(PSRPSR中的第中的第815815位)位)s: s: 狀態(tài)域字段(狀態(tài)域字段(PSRPSR中的第中的第16231623位)位)f: f: 標志域字段(標志域字段(PSRPSR中的第中的第24312431位)位)指令中,指令中, 項可以是這項可以是這4 4段中之一

23、或多個。為段中之一或多個。為CPSR_fCPSR_f、CPSR_cCPSR_c,SPSR_fsxcSPSR_fsxc等。等。 MSR CPSR_c, R0 ;傳送傳送R0的內(nèi)容到的內(nèi)容到CPSR中,但僅修改中,但僅修改CPSR中的控制域。中的控制域。 ENABLE_IRQ MRS R0,CPSR BIC R0,R0,#0 x80 MSR CPSR_c,R0 MOV PC,LR例子:使能例子:使能IRQIRQ中斷中斷DISABLE_IRQ MRS R0,CPSR ORR R0,R0,#0 x80 MSR CPSR_c,R0 MOV PC,LR例子:禁止例子:禁止IRQIRQ中斷中斷(三)三)AR

24、M分支轉(zhuǎn)移類指令分支轉(zhuǎn)移類指令1 1、B B 跳轉(zhuǎn)指令;跳轉(zhuǎn)指令; 格式:格式: BB條件條件 目標地址目標地址 ; ;跳轉(zhuǎn)到目標地址(跳轉(zhuǎn)到目標地址(PCPC目標地址)目標地址)(三)三)ARM分支轉(zhuǎn)移類指令分支轉(zhuǎn)移類指令2 2、BL BL 帶返回的跳轉(zhuǎn)指令;帶返回的跳轉(zhuǎn)指令; 格式:格式: BLBL條件條件 目標地址目標地址 ;R14PC-4,;R14PC-4,跳轉(zhuǎn)到目標地址(跳轉(zhuǎn)到目標地址(PCPC目標地址)目標地址)3 3、BX BX 帶狀態(tài)切換的跳轉(zhuǎn)指令;帶狀態(tài)切換的跳轉(zhuǎn)指令; 格式:格式: BXBX條件條件 ; Rn ; Rn最低最低2 2位地址固定為位地址固定為0 0,如果,如果

25、RnRn的最低位的最低位為為1 1,則跳轉(zhuǎn)到,則跳轉(zhuǎn)到Rn-1Rn-1的地址執(zhí)行的地址執(zhí)行ThumbThumb指令,如果指令,如果RnRn的最低位為的最低位為0 0,則跳轉(zhuǎn)到,則跳轉(zhuǎn)到RnRn的地址執(zhí)行的地址執(zhí)行ARMARM指令,指令,4 4、BLXBLX帶返回和狀態(tài)切換的跳轉(zhuǎn)指令。帶返回和狀態(tài)切換的跳轉(zhuǎn)指令。 格式:格式: BLX BLX 目標地址目標地址 例例1 1:條件轉(zhuǎn)移:條件轉(zhuǎn)移 CMP R0,#5 ; CMP R0,#5 ; 如果如果R0R0小于小于5 5 BLT SUB1 ; BLT SUB1 ; 則轉(zhuǎn)則轉(zhuǎn)SUB1SUB1 BGE SUB2 ; BGE SUB2 ; 否則轉(zhuǎn)否則轉(zhuǎn)

26、SUB2SUB2例例2 2:程序調(diào)用:程序調(diào)用 BL BL SSB ; SSB ; 調(diào)用子程序調(diào)用子程序SSBSSB ;返回點;返回點 SSB SSB ;子程序入口;子程序入口 MOV PC, R14 MOV PC, R14 ;執(zhí)行完返回;執(zhí)行完返回 (四四)加載)加載/存儲指令存儲指令1 1、單一數(shù)據(jù)加載、單一數(shù)據(jù)加載/ /存儲指令存儲指令 功能:提供功能:提供ARMARM寄存器和內(nèi)存之間單字節(jié)(寄存器和內(nèi)存之間單字節(jié)(8 8位)位), ,半字半字(16(16位位) )或單字(或單字(3232位)數(shù)據(jù)的傳送。位)數(shù)據(jù)的傳送。1 1)字數(shù)據(jù)加載(字數(shù)據(jù)加載( LDR LDR )、存儲()、存儲

27、( STR STR )指令)指令 格式:操作符格式:操作符 條件條件 寄存器,寄存器, LDR R0,R1 LDR R0,R1 ; ; 將存儲器地址為將存儲器地址為R1R1的字數(shù)據(jù)讀入寄存器的字數(shù)據(jù)讀入寄存器R0R0 STR R0,R1 STR R0,R1 ; ; 將寄存器將寄存器R0R0中的字數(shù)據(jù)寫入以中的字數(shù)據(jù)寫入以R1R1為地址為地址的存儲器中的存儲器中2)字節(jié)數(shù)據(jù)加載(字節(jié)數(shù)據(jù)加載( LDRB )、存儲()、存儲( STRB )指令)指令 格式:格式:LDR/STR條件條件B 寄存器,寄存器, LDRB R0,R1 ;將存儲器地址為將存儲器地址為R1的字節(jié)數(shù)據(jù)讀入寄存器的字節(jié)數(shù)據(jù)讀入寄

28、存器R0,并將并將R0的高的高24位清零位清零 STRB R0,R1 ;將寄存器將寄存器R0中的字節(jié)數(shù)據(jù)寫入以中的字節(jié)數(shù)據(jù)寫入以R1為地址的為地址的存儲器中存儲器中3)半字數(shù)據(jù)加載()半字數(shù)據(jù)加載( LDRH )、存儲()、存儲( STRH)指)指令令 格式:格式:LDR/STR條件條件H 寄存器,寄存器, LDRH R0,R1 ; 將存儲器地址為將存儲器地址為R1的半字數(shù)據(jù)讀入寄存器的半字數(shù)據(jù)讀入寄存器R0,并將并將R0的高的高16位清零位清零 STRH R0,R1 ;將寄存器將寄存器R0中的半字數(shù)據(jù)寫入以中的半字數(shù)據(jù)寫入以R1為地址的為地址的存儲器中存儲器中3) STRH R0,R1,#8

29、1) LDR R0,R1,R2?。籖1+R2R0,R1+R2R12) LDR R0,R1,R2例例;R1R0,R1+R2R11)批量數(shù)據(jù)加載批量數(shù)據(jù)加載(LDM)指令指令格式:格式:LDM條件條件類型類型 基址寄存器基址寄存器!,寄存,寄存器列表器列表功能:將由基址寄存器所指示的一片連續(xù)存儲單功能:將由基址寄存器所指示的一片連續(xù)存儲單元讀到寄存器列表所指示的多個寄存器中。元讀到寄存器列表所指示的多個寄存器中。2、批量數(shù)據(jù)加載、批量數(shù)據(jù)加載(LDM)、存儲、存儲(STM)指令指令IA:每次傳送后地址加每次傳送后地址加4IB:每次傳送前地址加每次傳送前地址加4DA:每次傳送后地址減每次傳送后地址減

30、4DB:每次傳送前地址減每次傳送前地址減4類型類型!:將最后的地址寫入基址寄存器將最后的地址寫入基址寄存器:1) 寄存器是用戶模式的寄存器寄存器是用戶模式的寄存器 2)包含包含R15時時,指示指示SPSR復制到復制到CPSRLDMIA R8,R0,R2,R9 ; R8 R0 R8+4 R2 R8+8 R9格式:格式:STM條件條件類型類型 基址寄存器基址寄存器!,寄,寄存器列表存器列表功能:將寄存器列表所指示的多個寄存器的數(shù)功能:將寄存器列表所指示的多個寄存器的數(shù)據(jù)存儲到基址寄存器所指示的一片連續(xù)存儲單據(jù)存儲到基址寄存器所指示的一片連續(xù)存儲單元中。元中。2)批量數(shù)據(jù)存儲批量數(shù)據(jù)存儲(STM)指

31、令指令STMIA R1!,!,R3R6,R11,R12 ;R3 R1 ;R4 R1+4 ;R5 R1+8 ; R6 R1+12 ;R11 R1+16 ;R12 R1+20 ;R1+24 R1STMDB R1!,R3R6,R11,R12 ;R12 R14 ; R11 R18 ;R6 R112 ; R5 R116 ;R4 R120 ; R3 R124 ;R124 R1作業(yè)作業(yè): :對下面兩條指令進行注釋對下面兩條指令進行注釋1 1、STMIB R1STMIB R1!,!,R3-R6R3-R6,R11R11,R12R122 2、LDMDA R1LDMDA R1!,!,R3-R6R3-R6,R11R1

32、1,R12R123 3、LDMFA R13!, R3-R5LDMFA R13!, R3-R51)字數(shù)據(jù)交換指令字數(shù)據(jù)交換指令SWP 格式:格式:SWP條件條件 Rd,Rm,Rn 功能:功能: (Rn) Rd,(Rm) (Rn) ) SWP R0,R1,R2 ;將將R2所指向的存儲器中的字數(shù)據(jù)傳送到所指向的存儲器中的字數(shù)據(jù)傳送到R0中,同時將中,同時將R1中的字數(shù)據(jù)傳送到中的字數(shù)據(jù)傳送到R2所指向所指向的存儲單元的存儲單元3、數(shù)據(jù)交換指令、數(shù)據(jù)交換指令SWP、SWPB2)字節(jié)數(shù)據(jù)交換指令)字節(jié)數(shù)據(jù)交換指令SWPB SWPB R0,R1,R2 ;將將R2所指向的存儲器中的字節(jié)數(shù)據(jù)傳送到所指向的存儲

33、器中的字節(jié)數(shù)據(jù)傳送到R0中,中,R0的高的高24位清零,同時將位清零,同時將R1中的低中的低8位位數(shù)據(jù)傳送到數(shù)據(jù)傳送到R2所指向的存儲單元所指向的存儲單元(五)(五)ARMARM協(xié)處理器類指令協(xié)處理器類指令完成與協(xié)處理器有關的操作,如完成與協(xié)處理器有關的操作,如: : 協(xié)處理器內(nèi)部寄存器之間的數(shù)據(jù)操作協(xié)處理器內(nèi)部寄存器之間的數(shù)據(jù)操作; ; 協(xié)處理器與存儲器之間的數(shù)據(jù)傳送協(xié)處理器與存儲器之間的數(shù)據(jù)傳送; ; 協(xié)處理器與協(xié)處理器與ARMARM寄存器之間的數(shù)據(jù)傳送。寄存器之間的數(shù)據(jù)傳送。 功能:完成協(xié)處理器寄存器數(shù)據(jù)操作。功能:完成協(xié)處理器寄存器數(shù)據(jù)操作。格式:格式:CDP 條件碼條件碼 CP#,o

34、pcodel,CRd,CRn ,CRm,opcode2其中其中CP# :指令操作的協(xié)處理器名,標準名為指令操作的協(xié)處理器名,標準名為pn,n 為為015范圍內(nèi)的整數(shù)。范圍內(nèi)的整數(shù)。Opcode1 :協(xié)處理器的特定操作碼協(xié)處理器的特定操作碼CRd、 CRn 、CRm :協(xié)處理器寄存器協(xié)處理器寄存器Opcode2 :可選的協(xié)處理器特定操作碼可選的協(xié)處理器特定操作碼1、CDP指令指令例:例:CDP p1,10,C1,C2,C3 CDP p1,10,C1,C2,C3 ;協(xié)處理器;協(xié)處理器1 1中的寄存器中的寄存器C2C2和和C3C3完成操作完成操作1010, ;然后將結果放在;然后將結果放在C1C1中

35、。中。 CDPEQ p2,5,C1,C2,C3,2 CDPEQ p2,5,C1,C2,C3,2 ;如果;如果z z位置位置1 1,那么協(xié)處理器,那么協(xié)處理器2 2中的中的C2 C2 和和C3C3完成操作完成操作5(5(子操作子操作2 2),然后將結果放在),然后將結果放在C1C1中。中。功能:在存儲器和協(xié)處理器之間傳送數(shù)據(jù)功能:在存儲器和協(xié)處理器之間傳送數(shù)據(jù)格式格式:LDC/STC條件條件L 協(xié)處理器編碼協(xié)處理器編碼 目的寄存器目的寄存器,源寄存器源寄存器L:L:指明是長整數(shù)傳送。用于雙精度數(shù)據(jù)傳送指明是長整數(shù)傳送。用于雙精度數(shù)據(jù)傳送2、LDC和和STC 指令指令例:LDC p6,C1,R4

36、; ;將存儲器中的內(nèi)容取至協(xié)處理器將存儲器中的內(nèi)容取至協(xié)處理器6 6的寄存的寄存器器C1C1中,中,R4R4為所取內(nèi)容的地址為所取內(nèi)容的地址。例:LDC p6,CR4,R2,4 ; ;將存儲器中的內(nèi)容取至協(xié)處理器將存儲器中的內(nèi)容取至協(xié)處理器6 6寄存器寄存器C4C4中,中,R2+4R2+4為所取內(nèi)容的地址。為所取內(nèi)容的地址。例例3 3:STC P3STC P3,C4C4,R0 R0 ; ;將協(xié)處理器將協(xié)處理器P3P3的寄存器的寄存器C4C4中的字數(shù)據(jù)中的字數(shù)據(jù)傳送到傳送到ARMARM處理器的寄存器處理器的寄存器R0R0所指向的存儲所指向的存儲器中器中3 3、MCRMCR指令指令功能:功能: A

37、RMARM寄存器到協(xié)處理器寄存器的傳送數(shù)據(jù)。寄存器到協(xié)處理器寄存器的傳送數(shù)據(jù)。格式格式: :MCRMCR條件條件 協(xié)處理器編碼協(xié)處理器編碼 操作碼操作碼1 1,源寄存器,源寄存器,目的寄存器目的寄存器1 1,目的寄存器,目的寄存器2 2,操作碼,操作碼2 2 例:例:MCR p3MCR p3,3 3,R0R0,C4C4,C5C5,6 6 ;將;將ARMARM處理器寄存器處理器寄存器R0R0中的數(shù)據(jù)傳送到協(xié)中的數(shù)據(jù)傳送到協(xié)處理器處理器P3P3的寄存器的寄存器C4C4和和C5C5中。中。功能:協(xié)處理器寄存器到功能:協(xié)處理器寄存器到ARMARM寄存器的傳送數(shù)據(jù)。寄存器的傳送數(shù)據(jù)。格式格式: :MRC

38、MRC條件條件 協(xié)處理器編碼協(xié)處理器編碼 操作碼操作碼1 1,源寄存器,源寄存器,目的寄存器目的寄存器1 1,目的寄存器,目的寄存器2 2,操作碼,操作碼2 2 4、MRC指令指令例:例:MRC p3MRC p3,3 3,R0R0,C4C4,C5C5,6 6 ;將協(xié)處理器;將協(xié)處理器P3P3的寄存器的寄存器C4C4和和C5C5中的中的數(shù)據(jù)傳送到數(shù)據(jù)傳送到ARMARM處理器寄存器處理器寄存器R0R0中。中。 (六六)軟件中斷和斷點指令軟件中斷和斷點指令1 1、軟件中斷指令、軟件中斷指令SWISWI功能:用來執(zhí)行系統(tǒng)調(diào)用,處理器進入管理模功能:用來執(zhí)行系統(tǒng)調(diào)用,處理器進入管理模式,并從地址式,并從

39、地址0 x080 x08開始執(zhí)行指令。通常在該地開始執(zhí)行指令。通常在該地址處存放一條跳轉(zhuǎn)指令,轉(zhuǎn)到中斷處理程序。址處存放一條跳轉(zhuǎn)指令,轉(zhuǎn)到中斷處理程序。格式:格式:SWI immed_24參數(shù)傳遞通常有兩種方法:參數(shù)傳遞通常有兩種方法: 忽略指令中的忽略指令中的24bit24bit立即數(shù),立即數(shù),r0r0指定指定APIAPI號,其它號,其它參數(shù)通過其它寄存器傳遞。參數(shù)通過其它寄存器傳遞。 指令中的指令中的24bit24bit立即數(shù)指定立即數(shù)指定APIAPI號,其它參數(shù)通過號,其它參數(shù)通過寄存器傳遞。寄存器傳遞。 方法方法1 1:使用參數(shù)寄存器:使用參數(shù)寄存器 MOV R0,#1 ; #1給給R

40、0SWI 0 x98 ; 產(chǎn)生產(chǎn)生SWI中斷中斷,執(zhí)行異常處理程序執(zhí)行異常處理程序SWI_HandlerADD R2,R1,R3 SWI_HandlerSWI_Handler CMP R0, #6 ; if R0 6 CMP R0, #6 ; if R0 6 LDRL LDRLO O PC, PC, R0, LSL #2 ; if R0 6,PC = PC + PC, PC, R0, LSL #2 ; if R0 6,PC = PC + R0 R0* *4,else next4,else next MOVS PC, LR MOVS PC, LRSwiFunctionSwiFunction DC

41、D function0 ;0 DCD function0 ;0 DCD function1 ;1 DCD function1 ;1 DCD function2 ;2 DCD function2 ;2 DCD function3 ;3 DCD function3 ;3 DCD function4 ;4 DCD function4 ;4 DCD function5 ;5 DCD function5 ;5Function0 異常處理分支異常處理分支0代碼代碼 MOVS PC , LRFunction1 異常處理分支異常處理分支1代碼代碼 MOVS PC , LRfunction2 異常處理分支異常處

42、理分支2代碼代碼 function3 異常處理分支異常處理分支3代碼代碼 function4 異常處理分支異常處理分支4代碼代碼function5 異常處理分支異常處理分支5代碼代碼MOV R0,#1 ; #1給給R0SWI 0 x98 ; 產(chǎn)生產(chǎn)生SWI中斷中斷,執(zhí)行異常處理程序執(zhí)行異常處理程序SWI_HandlerADD R2,R1,R3 方法方法2 2:獲?。韩@取immed_24immed_24操作數(shù)。操作數(shù)。方法方法2 2:獲取:獲取immed_24immed_24操作數(shù)。操作數(shù)。SWI_Handler STMFD SP!,R0-R3,R12,LR;現(xiàn)場保護 MRS R0,SPSR ;

43、讀取SPSR STMFD SP!,R0 ;保存SPSR TST R0,#0 x20 ;測試T標志位 LDRNEH R0,LR,#-2 ;如是Thumb指令,讀取指令碼16位 BICNE R0,R0,#0 xFF00 ;取得thumb指令的8位立即數(shù) LDREQ R0,LR,#-4 ;如是ARM指令,讀取指令碼32位 BICEQ R0,R0,#0 xFF00000 ;取得ARM指令的24位立即數(shù) LDMFD SP!,R0,-R3,R12,PC ;SWI異常返回 格式格式:BKPT immed_16:BKPT immed_16 immed_16 immed_16 :1616位整數(shù)表達式,其值范圍在

44、位整數(shù)表達式,其值范圍在0-655350-65535。 功能:中斷正常指令,進入相應的調(diào)試子程序,支持軟件功能:中斷正常指令,進入相應的調(diào)試子程序,支持軟件調(diào)試。調(diào)試。例:例: BKPT 0XF02CBKPT 0XF02C BKPT 640 BKPT 6402、斷點指令、斷點指令BKPTnARM指令集與Thumb指令集的關系Thumb指令集具有靈活、小巧的特點ARM指令集支持ARM核所有的特性,具有高效、快速的特點1 1、ARMARM指令集指令集 3232位指令長度位指令長度 3232位的操作數(shù)位的操作數(shù) 3232位的指令地址位的指令地址2 2、ThumbThumb指令集:指令集: 1616位

45、指令長度位指令長度 3232位的操作數(shù)位的操作數(shù) 3232位的指令地址位的指令地址 n數(shù)據(jù)處理指令n分支指令n加載/存儲指令n異常中斷指令SWI軟件中斷指令軟件中斷指令BKPT斷點異常中斷指令斷點異常中斷指令3 3、ThumbThumb指令的特點指令的特點 1 1)數(shù)據(jù)處理指令采用)數(shù)據(jù)處理指令采用2 2地址格式地址格式 2 2)跳轉(zhuǎn)指令:只有)跳轉(zhuǎn)指令:只有B B指令有條件執(zhí)行功能指令有條件執(zhí)行功能 3 3)加載)加載/ /存儲指令存儲指令: :大部分只能訪問大部分只能訪問R0-R7R0-R7寄存器寄存器 4)4)無異常處理的一些指令無異常處理的一些指令 5)5)沒有協(xié)處理器指令及訪問沒有協(xié)

46、處理器指令及訪問CPSRCPSR或或SPSRSPSR的的指令指令 3.5 Thumb-23.5 Thumb-2指令集指令集nThumb-2Thumb-2是一種新型混合指令集,融合了是一種新型混合指令集,融合了1616位位和和3232位指令,用于實現(xiàn)密度和性能的最佳平衡。位指令,用于實現(xiàn)密度和性能的最佳平衡。 Thumb-2 Thumb-2指令集指令集 n數(shù)據(jù)處理指令n分支指令與程序處理指令n加載與存儲指令 n提示類指令與交換類指令 3.6 ARM3.6 ARM處理器支持的偽指令處理器支持的偽指令 n指令性指令:指令性指令:可以執(zhí)行的指令可以執(zhí)行的指令n偽指令:偽指令:是一種指示性語句,是不可執(zhí)

47、行的指是一種指示性語句,是不可執(zhí)行的指令。令。 n指令性語句匯編后由相應的指令性語句匯編后由相應的機器代碼機器代碼所取代,所取代,指示匯編程序為數(shù)據(jù)分配內(nèi)存空間或相應寄存指示匯編程序為數(shù)據(jù)分配內(nèi)存空間或相應寄存器,器,不產(chǎn)生任何機器代碼不產(chǎn)生任何機器代碼。 nARMARM處理器支持的偽指令有處理器支持的偽指令有ADRADR、LDRLDR和和NOPNOP三類。三類。ADRADR偽指令偽指令功能:功能:將程序相對偏移地址或寄存器偏移地址加將程序相對偏移地址或寄存器偏移地址加載到指定寄存器中。載到指定寄存器中。格式:格式:ADRcond RdADRcond Rd,exprexpr示例:示例:Mloo

48、p Mloop MOV R1,#0 xf9MOV R1,#0 xf9 ADR ADR R0,mloop R0,mloop ;將;將mloopmloop對應相對偏移地址傳送到對應相對偏移地址傳送到R0R0中中 ARM偽指令偽指令小范圍的地址讀取小范圍的地址讀取 . ADR R1,Delay .Delay MOV R0,r14 . .0 x20 ADD r1,pc,#0 x3c . .0 x64 MOV r0,r14 .應用示例(源程序):應用示例(源程序):編譯后的反匯編代碼:編譯后的反匯編代碼:ARM偽指令偽指令中等范圍的地址讀取中等范圍的地址讀取 . ADRL R1,Delay . Dela

49、y MOV R0,r14 .應用示例(源程序):應用示例(源程序): . 0 x20 ADD r1,pc,#0 x400 x24 ADD r1,r1,#0 xFF00 .0 xFF68 MOV r0,r14 .編譯后的反匯編代碼:編譯后的反匯編代碼:LDRLDR偽指令偽指令功能:功能:將將3232位常量或一個地址加載到到指定寄存位常量或一個地址加載到到指定寄存器中器中 。格式:格式:LDRcond RdLDRcond Rd,expr|lable-exprexpr|lable-expr 示例:示例: LDR R1,=0 x1234LDR R1,=0 x1234;R1=0 x1234;R1=0 x1234Mloop LDRMloop LDRR2,=0 xABCDEF98R2,=0 xABCDEF98 ;R2=0 xABCDEF98 ;R2=0 xABCDEF98 LDR LDRR3,=mloopR3,=mloop ; ;將將mloopmloop對應地址傳送到對應地址傳送到R3R3中中將將0 xff00 xff0讀取到讀取到R1R1中中 LDR R

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論